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
>
>
Index: gw/smsc/smsc_http.c
===================================================================
--- gw/smsc/smsc_http.c (revision 4932)
+++ 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 4932)
+++ 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,6 +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;
+    
     *url = client->url;
     *headers = client->request->headers;
     *body = client->request->body;
Index: gwlib/http.h
===================================================================
--- gwlib/http.h        (revision 4932)
+++ 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

Reply via email to