Module: kamailio
Branch: master
Commit: 38a3d0ca6c09c851835eaf0875a4cee7fa947e61
URL: 
https://github.com/kamailio/kamailio/commit/38a3d0ca6c09c851835eaf0875a4cee7fa947e61

Author: Olle E. Johansson <[email protected]>
Committer: Olle E. Johansson <[email protected]>
Date: 2015-11-01T20:25:38+01:00

Curl: Make base URI pvar

---

Modified: modules/curl/curl.c
Modified: modules/curl/functions.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/38a3d0ca6c09c851835eaf0875a4cee7fa947e61.diff
Patch: 
https://github.com/kamailio/kamailio/commit/38a3d0ca6c09c851835eaf0875a4cee7fa947e61.patch

---

diff --git a/modules/curl/curl.c b/modules/curl/curl.c
index ae9f464..a485604 100644
--- a/modules/curl/curl.c
+++ b/modules/curl/curl.c
@@ -389,7 +389,8 @@ static int fixup_curl_connect(void** param, int param_no)
 
 /*
  * Fix curl_connect params when posting (5 parameters): 
- *     connection (string/pvar), url (string with pvars), content-type, data 
(string/pvar, pvar
+ *     connection (string/pvar), url (string with pvars), content-type, 
+ *      data (string/pvar, pvar)
  */
 static int fixup_curl_connect_post(void** param, int param_no)
 {
@@ -397,12 +398,12 @@ static int fixup_curl_connect_post(void** param, int 
param_no)
     str s;
     pv_elem_t *pv = NULL;
 
-    if (param_no == 1 || param_no == 2 || param_no == 3) {
+    if (param_no == 1 || param_no == 3) {
        /* We want char * strings */
-       /* At some point we need to allow pvars in the string. */
        return 0;
        }
-    if (param_no == 4) {
+    /* URL and data may contain pvar */
+    if (param_no == 4 || param_no == 2) {
         s.s = (char*)(*param);
         s.len = strlen(s.s);
 
diff --git a/modules/curl/functions.c b/modules/curl/functions.c
index 4c9961e..214eb32 100644
--- a/modules/curl/functions.c
+++ b/modules/curl/functions.c
@@ -264,6 +264,9 @@ int curl_con_query_url(struct sip_msg* _m, char 
*connection, char* _url, char* _
        char passwordbuf[BUFSIZ/2];
        char connurlbuf[BUFSIZ/2];
        char urlbuf[512];
+       str urlbuf2;
+       char *urlbuf3 = NULL;
+
        unsigned int len = 0;
        str postdatabuf;
        char *postdata = NULL;
@@ -292,9 +295,41 @@ int curl_con_query_url(struct sip_msg* _m, char 
*connection, char* _url, char* _
        strncpy(passwordbuf, conn->password.s, conn->password.len);
        strncpy(connurlbuf, conn->url.s, conn->url.len);
 
-       strncpy(urlbuf,conn->schema.s, conn->schema.len);
-       snprintf(&urlbuf[conn->schema.len],(sizeof(urlbuf) - conn->schema.len), 
"://%s%s%s", connurlbuf, 
-               (_url[0] && _url[0] == '/')?"":(_url[0] != '\0' ? "/": ""), 
_url);
+       LM_DBG("******** CURL Connection found %s\n", connection);
+
+       if (_url && *_url) {
+               if(pv_printf_s(_m, (pv_elem_t*) _url, &urlbuf2) != 0) {
+                               LM_ERR("curl :: unable to handle post data 
%s\n", _url);
+                               return -1;
+               }
+               if(urlbuf2.s==NULL || urlbuf2.len == 0) {
+                               LM_ERR("curl :: invalid url parameter\n");
+                               return -1;
+               }
+               LM_DBG("******** CURL Connection URL parsed for  %s\n", 
connection);
+               /* Allocated using pkg_memory */
+               urlbuf3 = as_asciiz(&urlbuf2);
+               if (urlbuf3  == NULL) {
+                               ERR("Curl: No memory left\n");
+                       return -1;
+               }
+               LM_DBG("******** CURL URL string after PV parsing %s\n", 
urlbuf3);
+       } else {
+               LM_DBG("******** CURL URL string NULL no PV parsing %s\n", 
_url);
+       }
+       strncpy(urlbuf, conn->schema.s, conn->schema.len);
+       if (urlbuf3 != NULL) {
+               snprintf(&urlbuf[conn->schema.len],(sizeof(urlbuf) - 
conn->schema.len), "://%s%s%s", connurlbuf, 
+                       (urlbuf3[0] && urlbuf3[0] == '/')?"":(urlbuf3[0] != 
'\0' ? "/": ""), urlbuf3);
+       } else {
+               snprintf(&urlbuf[conn->schema.len],(sizeof(urlbuf) - 
conn->schema.len), "://%s%s%s", connurlbuf, 
+                       (_url[0] && _url[0] == '/')?"":(_url[0] != '\0' ? "/": 
""), _url);
+       }
+
+       /* Release the memory allocated by as_asciiz */
+       if (urlbuf3 != NULL) {
+               pkg_free(urlbuf3);
+       }
        LM_DBG("***** #### ***** CURL URL: %s \n", urlbuf);
        if (_post && *_post) {
                 if(pv_printf_s(_m, (pv_elem_t*)_post, &postdatabuf) != 0) {
@@ -319,6 +354,7 @@ int curl_con_query_url(struct sip_msg* _m, char 
*connection, char* _url, char* _
        res = curL_query_url(_m, urlbuf, _result, usernamebuf, passwordbuf, 
(contenttype ? contenttype : "text/plain"), postdata,
                conn->timeout, conn->http_follow_redirect, 0, (unsigned int) 
maxdatasize );
 
+       LM_DBG("***** #### ***** CURL DONE : %s \n", urlbuf);
        if (postdata != NULL) {
                pkg_free(postdata);
        }


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to