Module: kamailio Branch: master Commit: b7d170607ccc1ecac6cb2bf210790c8382386f2a URL: https://github.com/kamailio/kamailio/commit/b7d170607ccc1ecac6cb2bf210790c83...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2017-12-06T08:51:39+01:00
http_async_client: exported functions to kemi framework
---
Modified: src/modules/http_async_client/async_http.c
---
Diff: https://github.com/kamailio/kamailio/commit/b7d170607ccc1ecac6cb2bf210790c83... Patch: https://github.com/kamailio/kamailio/commit/b7d170607ccc1ecac6cb2bf210790c83...
---
diff --git a/src/modules/http_async_client/async_http.c b/src/modules/http_async_client/async_http.c index a828078f1d..59106a3bae 100644 --- a/src/modules/http_async_client/async_http.c +++ b/src/modules/http_async_client/async_http.c @@ -46,6 +46,7 @@ #include "../../core/ut.h" #include "../../core/cfg/cfg_struct.h" #include "../../core/fmsg.h" +#include "../../core/kemi.h" #include "../../modules/tm/tm_load.h"
#include "async_http.h" @@ -56,7 +57,7 @@ extern struct tm_binds tmb; struct sip_msg *ah_reply = NULL; str ah_error = {NULL, 0};
-async_http_worker_t *workers; +async_http_worker_t *workers = NULL; int num_workers = 1;
struct query_params ah_params; @@ -122,15 +123,18 @@ static inline char *strfindcasestrz(str *haystack, char *needlez)
void async_http_cb(struct http_m_reply *reply, void *param) { - async_query_t *aq; - cfg_action_t *act; + async_query_t *aq = NULL; + cfg_action_t *act = NULL; int ri; unsigned int tindex; unsigned int tlabel; struct cell *t = NULL; char *p; str newbuf = {0, 0}; - sip_msg_t *fmsg; + sip_msg_t *fmsg = NULL; + sr_kemi_eng_t *keng = NULL; + str cbname = {0, 0}; + str evname = str_init("http_async_client:callback");
aq = param;
@@ -139,15 +143,18 @@ void async_http_cb(struct http_m_reply *reply, void *param) ah_error.len = 0; memset(ah_reply, 0, sizeof(struct sip_msg));
- ri = route_lookup(&main_rt, aq->cbname); - if(ri<0) { - LM_ERR("unable to find route block [%s]\n", aq->cbname); - goto done; - } - act = main_rt.rlist[ri]; - if(act==NULL) { - LM_ERR("empty action lists in route block [%s]\n", aq->cbname); - goto done; + keng = sr_kemi_eng_get(); + if(keng==NULL) { + ri = route_lookup(&main_rt, aq->cbname); + if(ri<0) { + LM_ERR("unable to find route block [%s]\n", aq->cbname); + goto done; + } + act = main_rt.rlist[ri]; + if(act==NULL) { + LM_ERR("empty action lists in route block [%s]\n", aq->cbname); + goto done; + } }
if (reply->result != NULL) { @@ -232,12 +239,30 @@ void async_http_cb(struct http_m_reply *reply, void *param)
LM_DBG("resuming transaction (%d:%d)\n", tindex, tlabel);
- if(act!=NULL) - tmb.t_continue(tindex, tlabel, act); + if(keng==NULL) { + if(act!=NULL) { + tmb.t_continue(tindex, tlabel, act); + } + } else { + cbname.s = aq->cbname; + cbname.len = aq->cbname_len; + tmb.t_continue_cb(tindex, tlabel, &cbname, &evname); + } } else { fmsg = faked_msg_next(); - if (run_top_route(act, fmsg, 0)<0) - LM_ERR("failure inside run_top_route\n"); + if(keng==NULL) { + if(act!=NULL) { + if (run_top_route(act, fmsg, 0)<0) { + LM_ERR("failure inside run_top_route\n"); + } + } + } else { + cbname.s = aq->cbname; + cbname.len = aq->cbname_len; + if(keng->froute(fmsg, EVENT_ROUTE, &cbname, &evname)<0) { + LM_ERR("error running event route kemi callback\n"); + } + } }
done: