Re: [PATCH] Opensmppbox and handling of stat txt field in DLR.
"XEN-Housing s.r.o." <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, fixed memory leak and missing stat field in original dlr text. thnx for help Nikos ;) Slavoj. Dňa 28. 10. 2010 14:47, Nikos Balkanas wrote / napísal(a): > Hi, > > Looks good. Opensmppbox maintainer is Rene. You might want to cc him > for smppbox patches. > > 3 observations: > > 1) You write straight C. I have no problem with it, and in fact I > prefer it. But other people might object to it, and would prefer > octstr_* wrappers. Please review gwlib/octstr.h and replace some of > the functions like strstr and sscanf with those. > 2) What if there is no stat: field in the DLR? Handle this case, too. > 3) You need to octstr_destroy(dlr_status) when done, else you will > have a memory leak. > > +1 > > BR, > Nikos > ----- Original Message ----- From: "XEN-Housing s.r.o." > <[email protected]> > To: <[email protected]> > Sent: Thursday, October 28, 2010 3:09 PM > Subject: [PATCH] Opensmppbox and handling of stat txt field in DLR. > > >> Hello there. >> >> I was wroten another small patch to opensmppbox. When i got from smpp >> smsc an fail status due sms was expired, at stat field of message was >> EXPIRED, but when DLR passes trought opensmppbox, target client got >> fixed UNDELIV text. Original code doesnot reflect original reason why >> sms delivery failed. >> >> Please review that code, if there are no memory leaks, or if that code >> should be applicated to all message statuses, not only DLR_FAIL and >> DLR_SMSC_FAIL. >> >> Slavoj. >> >> >
dlr_undeliv_status2.diff
(text/plain, 1.5 KB)
--- opensmppbox.c.old 2010-10-06 19:05:13.000000000 +0200
+++ opensmppbox.c 2010-10-28 14:57:26.000000000 +0200
@@ -603,6 +692,7 @@
Msg *dlr;
char *text, *tmps, err[4] = { '0', '0', '0', '\0' };
char submit_date_c_str[11] = { '\0' }, done_date_c_str[11] = { '\0' };
+ char original_stat[11] = { '\0' };
struct tm tm_tmp;
Octstr *msgid, *msgid2, *dlr_status, *dlvrd;
/* split variables */
@@ -723,6 +813,17 @@
parts = octstr_split(msg->sms.dlr_url, octstr_imm(";"));
msgid = gwlist_extract_first(parts);
dlr = dlr_find(box->boxc_id, msgid, msg->sms.receiver, dlrtype, 0);
+
+ text = octstr_get_cstr(msg->sms.msgdata);
+ debug("opensmppbox", 0, "Original DLR sms.msgdata: %s.", text);
+
+ tmps = strstr(text, " stat:");
+ if (tmps != NULL) {
+ text = tmps + (6 * sizeof(char));
+ sscanf(text,"%s",&original_stat);
+ debug("opensmppbox", 0, "Original DLR stat: %s.", original_stat);
+ }
+
if (dlr == NULL) {
/* we could not find a corresponding dlr; nothing to send */
smpp_pdu_destroy(pdu);
@@ -755,7 +856,11 @@
case DLR_FAIL:
case DLR_SMSC_FAIL:
dlr_state = 5;
- dlr_status = octstr_imm("UNDELIV");
+ if (original_stat) {
+ dlr_status = octstr_create(original_stat);
+ }else{
+ dlr_status = octstr_imm("UNDELIV");
+ }
break;
}
@@ -829,6 +934,7 @@
gwlist_append(pdulist, pdu);
}
octstr_destroy(msgid);
+ octstr_destroy(dlr_status);
msg_destroy(dlr);
gwlist_destroy(parts, octstr_destroy_item);
return pdulist;