[sr-dev] git:master:ab2ca4c9: core: ability to run alternative request_route and reply_route handlers
Daniel-Constantin Mierla
miconda at gmail.com
Tue Apr 12 14:45:30 CEST 2016
Module: kamailio
Branch: master
Commit: ab2ca4c9145a537136ea81a21bf257af50bfd18d
URL: https://github.com/kamailio/kamailio/commit/ab2ca4c9145a537136ea81a21bf257af50bfd18d
Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2016-04-12T14:14:15+02:00
core: ability to run alternative request_route and reply_route handlers
- they can be offered by the embedded interpreters
- at this moment app_lua can execute functions from the script loaded
with param 'load':
- instead of request_route it executes ksr_request_route()
- instead of reply_route it executes ksr_reply_route()
---
Modified: receive.c
---
Diff: https://github.com/kamailio/kamailio/commit/ab2ca4c9145a537136ea81a21bf257af50bfd18d.diff
Patch: https://github.com/kamailio/kamailio/commit/ab2ca4c9145a537136ea81a21bf257af50bfd18d.patch
---
diff --git a/receive.c b/receive.c
index 0904de1..67c7df0 100644
--- a/receive.c
+++ b/receive.c
@@ -54,6 +54,7 @@
#include "tcp_options.h" /* for access to tcp_accept_aliases*/
#include "cfg/cfg.h"
#include "core_stats.h"
+#include "kemi.h"
#ifdef DEBUG_DMALLOC
#include <mem/dmalloc.h>
@@ -125,6 +126,7 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info)
#endif
str inb;
sr_net_info_t netinfo;
+ sr_kemi_eng_t *keng = NULL;
if(sr_event_enabled(SREV_NET_DATA_RECV)) {
if(sip_check_fline(buf, len)==0) {
@@ -237,9 +239,20 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info)
set_route_type(REQUEST_ROUTE);
/* exec the routing script */
- if (run_top_route(main_rt.rlist[DEFAULT_RT], msg, 0)<0){
- LM_WARN("error while trying script\n");
- goto error_req;
+ if(unlikely(main_rt.rlist[DEFAULT_RT]==NULL)) {
+ keng = sr_kemi_eng_get();
+ if(keng==NULL) {
+ LM_ERR("no config routing engine registered\n");
+ goto error_req;
+ }
+ if(keng->froute(msg, REQUEST_ROUTE, NULL)<0) {
+ LM_NOTICE("negative return code from engine function\n");
+ }
+ } else {
+ if (run_top_route(main_rt.rlist[DEFAULT_RT], msg, 0)<0){
+ LM_WARN("error while trying script\n");
+ goto error_req;
+ }
}
#ifdef STATS
@@ -283,7 +296,15 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info)
/* exec the onreply routing script */
if (onreply_rt.rlist[DEFAULT_RT]){
set_route_type(CORE_ONREPLY_ROUTE);
- ret=run_top_route(onreply_rt.rlist[DEFAULT_RT], msg, &ctx);
+ ret = 1;
+ if(unlikely(main_rt.rlist[DEFAULT_RT]==NULL)) {
+ keng = sr_kemi_eng_get();
+ if(keng!=NULL) {
+ ret = keng->froute(msg, REQUEST_ROUTE, NULL);
+ }
+ } else {
+ ret=run_top_route(onreply_rt.rlist[DEFAULT_RT], msg, &ctx);
+ }
#ifndef NO_ONREPLY_ROUTE_ERROR
if (unlikely(ret<0)){
LM_WARN("error while trying onreply script\n");
More information about the sr-dev
mailing list