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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.