From cdccee42663b60d40ce30775276aaf1b7150686e Mon Sep 17 00:00:00 2001 From: Thomas Ries Date: Sat, 19 Sep 2015 22:32:55 +0000 Subject: [PATCH] --- src/plugin_siptrunk.c | 15 ++++++++++----- src/proxy.c | 9 ++++++--- src/sip_utils.c | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/plugin_siptrunk.c b/src/plugin_siptrunk.c index 51d458a..2bded3c 100644 --- a/src/plugin_siptrunk.c +++ b/src/plugin_siptrunk.c @@ -118,7 +118,7 @@ int PLUGIN_INIT(plugin_def_t *plugin_def) { /* Execution mask - during what stages of SIP processing shall * the plugin be called. */ - plugin_def->exe_mask=PLUGIN_PRE_PROXY; + plugin_def->exe_mask=PLUGIN_DETERMINE_TARGET; //PLUGIN_PRE_PROXY; /* read the config file */ if (read_config(configuration.configfile, @@ -204,6 +204,9 @@ static int plugin_siptrunk_process(sip_ticket_t *ticket) { /* plugin loaded and not configured, return with success */ if (plugin_cfg.trunk_numbers_regex.used==0) return STS_SUCCESS; + if (ticket->direction == DIRTYP_UNKNOWN) { + sip_find_direction(ticket, NULL); + } DEBUGC(DBCLASS_PLUGIN, "plugin_siptrunk: type=%i", ticket->direction); DEBUGC(DBCLASS_PLUGIN, "plugin_siptrunk: next hop was %s:%i", @@ -211,10 +214,11 @@ static int plugin_siptrunk_process(sip_ticket_t *ticket) { ticket->next_hop.sin_port); /* SIP request? && direction undetermined? */ - if (MSG_IS_REQUEST(ticket->sipmsg)) { -// if ((ticket->direction == DIRTYP_UNKNOWN) -// && MSG_IS_REQUEST(ticket->sipmsg)) { + if ((ticket->direction == DIRTYP_UNKNOWN) + && MSG_IS_REQUEST(ticket->sipmsg)) { DEBUGC(DBCLASS_PLUGIN, "plugin_siptrunk: processing REQ w/ DIRTYP_UNKNOWN"); + DEBUGC(DBCLASS_PLUGIN, "&&&1: req_uri [%s]", ticket->sipmsg->req_uri->username); + DEBUGC(DBCLASS_PLUGIN, "&&&1: to_url [%s]", ticket->sipmsg->to->url->username); /* get REQ URI & To URI from headers */ req_url=osip_message_get_uri(ticket->sipmsg); @@ -223,7 +227,8 @@ static int plugin_siptrunk_process(sip_ticket_t *ticket) { } /* check To: URI */ - to_url=osip_to_get_url(ticket->sipmsg); +//&&&broken: to_url=osip_to_get_url(ticket->sipmsg); + to_url=ticket->sipmsg->to->url; if (to_url && to_url->username) { DEBUGC(DBCLASS_BABBLE, "To: header: [%s]", to_url->username); } diff --git a/src/proxy.c b/src/proxy.c index 9736f0b..a9f3f9f 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -114,11 +114,11 @@ int proxy_request (sip_ticket_t *ticket) { * by doing a lookup in the registration table. */ sip_find_direction(ticket, &i); - type = ticket->direction; /* Call Plugins for stage: PLUGIN_PRE_PROXY */ sts = call_plugins(PLUGIN_PRE_PROXY, ticket); + type = ticket->direction; /* * RFC 3261, Section 16.6 step 1 * Proxy Behavior - Request Forwarding - Make a copy @@ -140,7 +140,10 @@ int proxy_request (sip_ticket_t *ticket) { * (rewrite request URI to point to the real host) */ /* 'i' still holds the valid index into the URLMAP table */ - proxy_rewrite_request_uri(request, i); +DEBUGC(DBCLASS_PROXY,"index i=%i",i); + if ((i>=0) && (i < URLMAP_SIZE)) { + proxy_rewrite_request_uri(request, i); + } /* if this is CANCEL/BYE request, stop RTP proxying */ if (MSG_IS_BYE(request) || MSG_IS_CANCEL(request)) { @@ -495,11 +498,11 @@ int proxy_response (sip_ticket_t *ticket) { * world to one of our registered clients */ sip_find_direction(ticket, NULL); - type = ticket->direction; /* Call Plugins for stage: PLUGIN_PRE_PROXY */ sts = call_plugins(PLUGIN_PRE_PROXY, ticket); + type = ticket->direction; /* * RFC 3261, Section 16.7 step 3 * Proxy Behavior - Response Processing - Remove my Via header field value diff --git a/src/sip_utils.c b/src/sip_utils.c index a653678..0ee3aed 100644 --- a/src/sip_utils.c +++ b/src/sip_utils.c @@ -1192,6 +1192,7 @@ int sip_find_direction(sip_ticket_t *ticket, int *urlidx) { if (type == DIRTYP_UNKNOWN) { DEBUGC(DBCLASS_SIP, "sip_find_direction: unable to determine " "direction of SIP packet"); + if (urlidx) *urlidx=-1; return STS_FAILURE; }