Re: Patch for http smsc

Bassam Al-Sarori <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <CADjNs2h8kQnxwL6gzTdrJR7FJu5YRN_3-0tf7M2vwuqnxp0R6Q@mail.gmail.com>
Hi,

Sorry, I forget to remove the old url assignment from http.c when I created
the patch which leaves the MO logging issue unresolved. Here is the modified
and tested patch :)

Regards,
Bassam

On Mon, Oct 10, 2011 at 2:55 AM, Bassam Al-Sarori <[email protected]>wrote:

> Here is the patch :)
>
>
> On Mon, Oct 10, 2011 at 2:54 AM, Bassam Al-Sarori <[email protected]>wrote:
>
>> Hi all,
>>
>> I am new to this mailing list but have been using Kannel for a long time.
>>
>> I want to share a patch which I hope to be useful.
>>
>> The patch solves two issues which I faced with http smsc (generic)
>>
>> 1) URL Parameters of an MO message request are not logged. Only the base
>> URL gets logged, for example,
>> 2011-10-10 00:35:06 [2930] [7] DEBUG: HTTP[httpsmsc]: Got request `/send'
>>
>> Which makes it hard for debugging
>>
>> So, I made some changes so that the full URL and parameters are logged
>>
>> 2011-10-10 00:35:06 [2930] [7] DEBUG: HTTP[httpsmsc]: Got request
>> `/send?from=13123&to=6774638981&text=hi&coding=0&udh='
>>
>> 2) Incorrect success reply for failed MOs. SMSC assumes that the only case
>> of failure is when bb_smscconn_receive returns -1, which is not correct
>> (bb_smscconn_receive never returns -1). So, I changed it to only assume
>> success in case of SMSCCONN_SUCCESS or SMSCCONN_QUEUED is returned.
>>
>> Please note that I am not an experienced C programmer. So, if you find any
>> stupid mistakes let me know. Thanks!
>>
>>
>> Regards,
>> Bassam
>>
>>
>
patch.diff (text/x-patch, 3.8 KB)
Index: gw/smsc/smsc_http.c
===================================================================
--- gw/smsc/smsc_http.c	(revision 4935)
+++ gw/smsc/smsc_http.c	(working copy)
@@ -287,8 +287,8 @@
 
         /* XXX if conn->is_stopped, do not receive new messages.. */
 
-        client = http_accept_request(conndata->port, &ip, &url,
-                                     &headers, &body, &cgivars);
+        client = http_accept_request_real(conndata->port, &ip, &url,
+                                     &headers, &body, &cgivars,1);
         if (client == NULL)
             break;
 
@@ -1810,13 +1810,13 @@
 
             Msg *resp = msg_duplicate(dlrmsg);
             ret = bb_smscconn_receive(conn, dlrmsg);
-            if (ret == -1) {
-                retmsg = octstr_create("Not accepted");
-                retstatus = fm->status_error;
-            } else {
-                retmsg = urltrans_fill_escape_codes(fm->message_sent, resp);
-                retstatus = fm->status_sent;
-            }
+			if (ret == SMSCCONN_SUCCESS || ret == SMSCCONN_QUEUED){
+				retmsg = urltrans_fill_escape_codes(fm->message_sent, resp);
+          	    retstatus = fm->status_sent;
+			}else{
+            	retmsg = octstr_create("Not accepted");
+            	retstatus = fm->status_error;
+        	}
             msg_destroy(resp);
         } else {
             error(0,"HTTP[%s]: Got DLR but could not find message or was not interested "
@@ -1901,12 +1901,12 @@
         msg->sms.meta_data = octstr_duplicate(meta_data);
         Msg *resp = msg_duplicate(msg);
         ret = bb_smscconn_receive(conn, msg);
-        if (ret == -1) {
+        if (ret == SMSCCONN_SUCCESS || ret == SMSCCONN_QUEUED){
+			retmsg = urltrans_fill_escape_codes(fm->message_sent, resp);
+            retstatus = fm->status_sent;
+		}else{
             retmsg = octstr_create("Not accepted");
             retstatus = fm->status_error;
-        } else {
-            retmsg = urltrans_fill_escape_codes(fm->message_sent, resp);
-            retstatus = fm->status_sent;
         }
         msg_destroy(resp);
     }
Index: gwlib/http.c
===================================================================
--- gwlib/http.c	(revision 4935)
+++ gwlib/http.c	(working copy)
@@ -2557,9 +2557,9 @@
 }
 
 
-HTTPClient *http_accept_request(int port, Octstr **client_ip, Octstr **url, 
+HTTPClient *http_accept_request_real(int port, Octstr **client_ip, Octstr **url, 
     	    	    	    	List **headers, Octstr **body, 
-                                List **cgivars)
+                                List **cgivars, int keep_url)
 {
     HTTPClient *client;
     
@@ -2578,7 +2578,12 @@
     } while(client == NULL);
     
     *client_ip = octstr_duplicate(client->ip);
+    
+    if(keep_url)
+    *url = octstr_duplicate(client->url);//duplicate otherwise parse_cgivars will eat params
+    else
     *url = client->url;
+    
     *headers = client->request->headers;
     *body = client->request->body;
     *cgivars = parse_cgivars(client->url);
Index: gwlib/http.h
===================================================================
--- gwlib/http.h	(revision 4935)
+++ gwlib/http.h	(working copy)
@@ -430,10 +430,15 @@
  * many threads to be fast. The HTTP user should use a single thread,
  * unless requests can block.
  */
-HTTPClient *http_accept_request(int port, Octstr **client_ip, 
+HTTPClient *http_accept_request_real(int port, Octstr **client_ip, 
     	    	    	    	Octstr **url, List **headers, Octstr **body,
-				List **cgivars);
+				List **cgivars, int keep_url);
 
+/* always eats URL params, bb and other boxes use it while SMSCs should
+ use the real one */
+#define http_accept_request(port,client_ip, url, headers, body, cgivars) \
+    http_accept_request_real(port,client_ip, url, headers, body, cgivars, 0)
+
 
 /*
  * Send a reply to a previously accepted request. The caller is responsible
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.