Module: sip-router Branch: master Commit: b0d089b685abc51b68b25e90c6021b888cabf051 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=b0d089b6...
Author: Juha Heinanen jh@tutpro.com Committer: Juha Heinanen jh@tutpro.com Date: Sat Oct 25 18:46:25 2014 +0300
modules/pua: added outbound_proxy to struct publ_info
---
modules/pua/README | 25 ++++++++++++++----------- modules/pua/doc/pua_admin.xml | 3 ++- modules/pua/doc/pua_devel.xml | 2 ++ modules/pua/hash.h | 2 +- modules/pua/send_publish.c | 20 ++++++++++++++++++-- modules/pua/send_publish.h | 1 + 6 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/modules/pua/README b/modules/pua/README index c8c7d8a..ed64a3b 100644 --- a/modules/pua/README +++ b/modules/pua/README @@ -8,7 +8,7 @@ Edited by
Anca-Maria Vamanu
- Copyright � 2006 Voice Sistem SRL + Copyright (c) 2006 Voice Sistem SRL __________________________________________________________________
Table of Contents @@ -186,7 +186,7 @@ modparam("pua", "hash_size", 11)
Database url.
- Default value is ">mysql://openser:openserrw@localhost/openser". + Default value is ">mysql://kamailio:kamailiorw@localhost/kamailio".
Example 1.2. Set db_url parameter ... @@ -243,7 +243,8 @@ modparam("pua", "update_period", 100)
3.7. outbound_proxy (str)
- SIP URI of outbound proxy to be used when sending PUBLISH requests. + SIP URI of outbound proxy to be used when sending PUBLISH requests if + no outbound proxy is given in outbound_proxy field of struct publ_info.
By default, no outbound proxy has been defined.
@@ -334,7 +335,7 @@ modparam("pua", "fetch_rows", 1000)
4.1. pua_update_contact()
-4.1. pua_update_contact() +4.1. pua_update_contact()
The remote target can be updated by the Contact of a subsequent in dialog request. In the PUA watcher case (sending a SUBSCRIBE messages), @@ -359,7 +360,7 @@ if(method=="NOTIFY")
5.1. pua_cleanup
-5.1. pua_cleanup +5.1. pua_cleanup
Manually triggers the cleanup functions for the pua table. Useful if you have set update_period to zero or less. @@ -394,7 +395,7 @@ Chapter 2. Developer Guide The module provides the following functions that can be used by other Kamailio modules.
-1. bind_pua(pua_api_t* api) +1. bind_pua(pua_api_t* api)
This function binds the pua modules and fills the structure with the two exported functions. @@ -410,7 +411,7 @@ typedef struct pua_api { } pua_api_t; ...
-2. send_publish +2. send_publish
Field type: ... @@ -445,12 +446,14 @@ typedef struct publ_info for that event)*/ str* etag; /* (optional) the value of the etag the request should match */ + str* outbound_proxy;/* outbound_proxy to use when sending the + Publish request */ str* extra_headers /* (optional) extra_headers that should be added to Publish msg*/ }publ_info_t; ...
-3. send_subscribe +3. send_subscribe
Field type: ... @@ -489,7 +492,7 @@ typedef struct subs_info }subs_info_t; ...
-4. is_dialog +4. is_dialog
Field type: ... @@ -508,7 +511,7 @@ typedef int (*query_dialog_t)(ua_pres_t* presentity); } ...
-5. register_puacb +5. register_puacb
Field type: ... @@ -537,7 +540,7 @@ typedef int (*register_puacb_t)(int types, pua_cb f, void* param ); typedef int (pua_cb)(ua_pres_t* hentity, struct sip_msg*); ...
-6. add_event +6. add_event
Field type: ... diff --git a/modules/pua/doc/pua_admin.xml b/modules/pua/doc/pua_admin.xml index f692786..e7b242d 100644 --- a/modules/pua/doc/pua_admin.xml +++ b/modules/pua/doc/pua_admin.xml @@ -197,7 +197,8 @@ modparam("pua", "update_period", 100) <title><varname>outbound_proxy</varname> (str)</title> <para> SIP URI of outbound proxy to be used when sending - PUBLISH requests. + PUBLISH requests if no outbound proxy is given in + outbound_proxy field of struct publ_info. </para> <para> <emphasis>By default, no outbound proxy has been defined. diff --git a/modules/pua/doc/pua_devel.xml b/modules/pua/doc/pua_devel.xml index 75014b4..d36c8d1 100644 --- a/modules/pua/doc/pua_devel.xml +++ b/modules/pua/doc/pua_devel.xml @@ -86,6 +86,8 @@ typedef struct publ_info for that event)*/ str* etag; /* (optional) the value of the etag the request should match */ + str* outbound_proxy;/* outbound_proxy to use when sending the + Publish request */ str* extra_headers /* (optional) extra_headers that should be added to Publish msg*/ }publ_info_t; diff --git a/modules/pua/hash.h b/modules/pua/hash.h index af32d13..161939b 100644 --- a/modules/pua/hash.h +++ b/modules/pua/hash.h @@ -81,6 +81,7 @@ typedef struct ua_pres{ void* cb_param; struct ua_pres* next; int ua_flag; + str* outbound_proxy; /* croc-not sored in db_only mode */ /* publish */ str etag; @@ -96,7 +97,6 @@ typedef struct ua_pres{ int cseq; int version; /* int watcher_count; croc-nolonger used!! */ - str* outbound_proxy; /* croc-not sored in db_only mode */ str* extra_headers; str record_route; str remote_contact; diff --git a/modules/pua/send_publish.c b/modules/pua/send_publish.c index da74ab7..3ddd5e7 100644 --- a/modules/pua/send_publish.c +++ b/modules/pua/send_publish.c @@ -274,6 +274,7 @@ void publ_cback_func(struct cell *t, int type, struct tmcb_params *ps) publ.content_type= hentity->content_type; publ.id= hentity->id; publ.extra_headers= hentity->extra_headers; + publ.outbound_proxy = hentity->outbound_proxy; publ.cb_param= hentity->cb_param;
if (dbmode == PUA_DB_ONLY && pua_dbf.end_transaction) @@ -692,8 +693,9 @@ send_publish: result= tmb.t_request(&uac_r, publ->pres_uri, /*! Request-URI */ publ->pres_uri, /*! To */ - publ->pres_uri, /*! From */ - &outbound_proxy /*! Outbound proxy*/ + publ->pres_uri, /*! From */ + publ->outbound_proxy? + publ->outbound_proxy:&outbound_proxy /*! Outbound proxy*/ );
if(result< 0) @@ -757,6 +759,9 @@ ua_pres_t* publish_cbparam(publ_info_t* publ,str* body,str* tuple_id,
size= sizeof(ua_pres_t)+ sizeof(str)+ (publ->pres_uri->len+ + publ->content_type.len+ publ->id.len+ 1)*sizeof(char); + + if(publ->outbound_proxy) + size+= sizeof(str)+ publ->outbound_proxy->len* sizeof(char); if(body && body->s && body->len) size+= sizeof(str)+ body->len* sizeof(char); if(publ->etag) @@ -822,6 +827,16 @@ ua_pres_t* publish_cbparam(publ_info_t* publ,str* body,str* tuple_id, cb_param->extra_headers->len= publ->extra_headers->len; size+= publ->extra_headers->len; } + if(publ->outbound_proxy) + { + cb_param->outbound_proxy = (str*)((char*)cb_param + size); + size += sizeof(str); + cb_param->outbound_proxy->s = (char*)cb_param + size; + memcpy(cb_param->outbound_proxy->s, publ->outbound_proxy->s, + publ->outbound_proxy->len); + cb_param->outbound_proxy->len = publ->outbound_proxy->len; + size+= publ->outbound_proxy->len; + }
if(publ->content_type.s && publ->content_type.len) { @@ -837,6 +852,7 @@ ua_pres_t* publish_cbparam(publ_info_t* publ,str* body,str* tuple_id, cb_param->tuple_id.len= tuple_id->len; size+= tuple_id->len; } + cb_param->event= publ->event; cb_param->flag|= publ->source_flag; cb_param->cb_param= publ->cb_param; diff --git a/modules/pua/send_publish.h b/modules/pua/send_publish.h index ef81ee9..667d7aa 100644 --- a/modules/pua/send_publish.h +++ b/modules/pua/send_publish.h @@ -44,6 +44,7 @@ typedef struct publ_info str content_type; /*! the content_type of the body if present(optional if the same as the default value for that event) */ str* etag; + str* outbound_proxy; str* extra_headers; void* cb_param; /*! the parameter for the function to be called on the callback for the received reply; it must be allocated in share memory;