Module: kamailio Branch: master Commit: 38a3d0ca6c09c851835eaf0875a4cee7fa947e61 URL: https://github.com/kamailio/kamailio/commit/38a3d0ca6c09c851835eaf0875a4cee7...
Author: Olle E. Johansson oej@edvina.net Committer: Olle E. Johansson oej@edvina.net 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/38a3d0ca6c09c851835eaf0875a4cee7... Patch: https://github.com/kamailio/kamailio/commit/38a3d0ca6c09c851835eaf0875a4cee7...
---
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); }