summaryrefslogtreecommitdiff
path: root/packages/gsm/files/025_sms-status-report.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gsm/files/025_sms-status-report.patch')
-rw-r--r--packages/gsm/files/025_sms-status-report.patch133
1 files changed, 133 insertions, 0 deletions
diff --git a/packages/gsm/files/025_sms-status-report.patch b/packages/gsm/files/025_sms-status-report.patch
new file mode 100644
index 0000000000..560e72e380
--- /dev/null
+++ b/packages/gsm/files/025_sms-status-report.patch
@@ -0,0 +1,133 @@
+From: Erin Yueh <erin_yueh@openmoko.com>
+Subject: [PATCH] SMS status report
+
+I made a patch for SMS status report. It can change SMS-Submit messages
+and ask for a status report. When the destination address receives our
+message, the service center will send a SMS-STATUS-REPORT to us. We can
+tell what messages we sent by TP-MR (message reference number) value and
+can know the sending result by TP-ST (Status) value from status report
+messages.
+
+PS. if you don't want to ask a status report, you can change this value
+back. Replace "GSMD_SMS_TP_SRR_STATUS_REQUEST" with
+"GSMD_SMS_TP_SRR_NOT_REQUEST".
+header[pos ++] =
+ GSMD_SMS_TP_MTI_SUBMIT |
+ (0 << 2) | /* Reject Duplicates: 0 */
+ GSMD_SMS_TP_VPF_NOT_PRESENT |
+- GSMD_SMS_TP_SRR_NOT_REQUEST |
++ GSMD_SMS_TP_SRR_STATUS_REQUEST |
+ (src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
+ GSMD_SMS_TP_UDHI_NO_HEADER) |
+ GSMD_SMS_TP_RP_NOT_SET;
+
+Signed-off-by: Jim Huang <jserv@openmoko.org>
+---
+ src/gsmd/sms_pdu.c | 54 +++++++++++++++++++++++++++++++++++++++++++-----------
+ src/util/event.c | 6 +++++-
+ 2 files changed, 48 insertions(+), 12 deletions(-)
+
+Index: gsm/src/gsmd/sms_pdu.c
+===================================================================
+--- gsm.orig/src/gsmd/sms_pdu.c 2007-09-06 11:14:34.000000000 +0800
++++ gsm/src/gsmd/sms_pdu.c 2007-09-17 23:39:20.000000000 +0800
+@@ -139,6 +139,17 @@
+ /* Skip TP-PID */
+ len -= 9;
+ src += 9;
++
++ /* TP-UDL */
++ dst->payload.length = src[0];
++ i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
++
++ /* TP-UD */
++ if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
++ return 1;
++ memcpy(dst->payload.data, src + 1, i);
++ dst->payload.data[i] = 0;
++
+ break;
+ case GSMD_SMS_TP_MTI_SUBMIT:
+ if (len < 4)
+@@ -179,23 +190,44 @@
+ src += vpf ? 3 : 2;
+
+ memset(dst->time_stamp, 0, 7);
++
++ /* TP-UDL */
++ dst->payload.length = src[0];
++ i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
++
++ /* TP-UD */
++ if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
++ return 1;
++ memcpy(dst->payload.data, src + 1, i);
++ dst->payload.data[i] = 0;
+ break;
+ case GSMD_SMS_TP_MTI_STATUS_REPORT:
+- /* TODO */
++ if (len < 3)
++ return 1;
++
++ /* TP-MR set it gsmd_sms_list.index*/
++ dst->index = (int) src[1];
++ /* TP-STATUS set it to coding_scheme */
++ dst->payload.coding_scheme = (int) src[len-1];
++ /* TP-RA */
++ i = sms_number_bytelen(src[3], src[2]);
++ if (len < 13 + i)
++ return 1;
++ if (sms_address2ascii(&dst->addr, src + 2))
++ return 1;
++ len -= 4 + i;
++ src += 4 + i;
++ /* TP-SCTS */
++ memcpy(dst->time_stamp, src, 7);
++ /* TP-UD */
++ dst->payload.length = 0;
++ dst->payload.data[0] = 0;
++ break;
+ default:
+ /* Unknown PDU type */
+ return 1;
+ }
+
+- /* TP-UDL */
+- dst->payload.length = src[0];
+- i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
+-
+- /* TP-UD */
+- if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
+- return 1;
+- memcpy(dst->payload.data, src + 1, i);
+- dst->payload.data[i] = 0;
+
+ return 0;
+ }
+@@ -215,7 +247,7 @@
+ GSMD_SMS_TP_MTI_SUBMIT |
+ (0 << 2) | /* Reject Duplicates: 0 */
+ GSMD_SMS_TP_VPF_NOT_PRESENT |
+- GSMD_SMS_TP_SRR_NOT_REQUEST |
++ GSMD_SMS_TP_SRR_STATUS_REQUEST |
+ (src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
+ GSMD_SMS_TP_UDHI_NO_HEADER) |
+ GSMD_SMS_TP_RP_NOT_SET;
+Index: gsm/src/util/event.c
+===================================================================
+--- gsm.orig/src/util/event.c 2007-09-06 11:14:34.000000000 +0800
++++ gsm/src/util/event.c 2007-09-17 23:39:47.000000000 +0800
+@@ -128,8 +128,12 @@
+ static int inds_handler(struct lgsm_handle *lh, int evt,
+ struct gsmd_evt_auxdata *aux)
+ {
+- if (aux->u.ds.inlined)
++ if (aux->u.ds.inlined) {
++ struct gsmd_sms_list *sms;
++ sms = (struct gsmd_sms_list *) aux->data;
+ printf("EVENT: Incoming Status Report\n");
++ printf("message ref = %d, status = %d\n", sms->index,sms->payload.coding_scheme);
++ }
+ else
+ printf("EVENT: Incoming Status Report stored at location %i\n",
+ aux->u.ds.index);