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