diff --git a/debian/patches/series b/debian/patches/series index e0a358bea..ba21149d9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -72,11 +72,14 @@ upstream/cfgt-use-snprintf-instead-of-sprintf.patch upstream/tm_add_proportional_load_contacts_by_q_value.patch upstream/avpops-add-avp_subst_pv-documentation.patch upstream/avpops-add-avp_subst_pv.patch +sipwise/fix_incorrect_branch_id_via_branch_next.patch ### relevant for upstream sipwise/fix_error_in_cfgt_module.patch sipwise/pv_headers-store-To-info-in-xavp_parsed_name.r-on-re.patch ## sipwise/pv_headers-full-rework.patch +sipwise/pua_dialoginfo-refresh_pubruri_avps_flag.patch +sipwise/pua_dialoginfo-local_identity_dlg_var.patch # ### Don't just put stuff in any order ### use gbp pq import/export tooling to help maintain patches @@ -94,4 +97,3 @@ sipwise/pv_headers-full-rework.patch ## git checkout -- debian/ ### git commit + git-review as usual ### -sipwise/fix_incorrect_branch_id_via_branch_next.patch diff --git a/debian/patches/sipwise/pua_dialoginfo-local_identity_dlg_var.patch b/debian/patches/sipwise/pua_dialoginfo-local_identity_dlg_var.patch new file mode 100644 index 000000000..137c03a63 --- /dev/null +++ b/debian/patches/sipwise/pua_dialoginfo-local_identity_dlg_var.patch @@ -0,0 +1,88 @@ +From: Victor Seva +Date: Fri, 28 Feb 2020 11:39:24 +0100 +Subject: pua_dialoginfo: local_identity_dlg_var +--- + .../pua_dialoginfo/doc/pua_dialoginfo_admin.xml | 20 ++++++++++++++++++++ + src/modules/pua_dialoginfo/pua_dialoginfo.c | 17 +++++++++++++++++ + 2 files changed, 37 insertions(+) + +diff --git a/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml b/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml +index 3054a77..fc0efd6 100644 +--- a/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml ++++ b/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml +@@ -535,6 +535,26 @@ modparam("pua_dialoginfo", "callee_trying", 1) + + + ++ ++
++ <varname>local_identity_dlg_var</varname> (str) ++ ++ PUBLISH-requests reporting dialog-information will use the value of ++ the dialog variable if exists ++ ++ ++ Default value is NULL. ++ ++ ++ Set <varname>local_identity_dlg_var</varname> parameter ++ ++... ++modparam("pua_dialoginfo", "local_identity_dlg_var", "local_identity") ++... ++ ++ ++
++ + + +
+diff --git a/src/modules/pua_dialoginfo/pua_dialoginfo.c b/src/modules/pua_dialoginfo/pua_dialoginfo.c +index 2e25386..c70ea02 100644 +--- a/src/modules/pua_dialoginfo/pua_dialoginfo.c ++++ b/src/modules/pua_dialoginfo/pua_dialoginfo.c +@@ -82,6 +82,7 @@ int_str pubruri_callee_avp_name; + + static str caller_dlg_var = {0, 0}; /* pubruri_caller */ + static str callee_dlg_var = {0, 0}; /* pubruri_callee */ ++static str local_identity_dlg_var = STR_NULL; + + /* Module parameter variables */ + int include_callid = DEF_INCLUDE_CALLID; +@@ -124,6 +125,7 @@ static param_export_t params[]={ + {"pubruri_callee_avp", PARAM_STRING, &pubruri_callee_avp }, + {"pubruri_caller_dlg_var", PARAM_STR, &caller_dlg_var }, + {"pubruri_callee_dlg_var", PARAM_STR, &callee_dlg_var }, ++ {"local_identity_dlg_var", PARAM_STR, &local_identity_dlg_var }, + {"callee_trying", INT_PARAM, &callee_trying }, + {"disable_caller_publish_flag", INT_PARAM, &disable_caller_publish_flag }, + {"disable_callee_publish_flag", INT_PARAM, &disable_callee_publish_flag }, +@@ -300,6 +302,17 @@ void refresh_pubruri_avps(struct dlginfo_cell *dlginfo, str *uri) + } + } + ++void refresh_local_identity(struct dlg_cell *dlg, str *uri) { ++ str *s = dlg_api.get_dlg_var(dlg, &local_identity_dlg_var); ++ ++ if(s != NULL) { ++ uri->s = s->s; ++ uri->len = s->len; ++ LM_DBG("Found local_identity in dialog '%.*s'\n", ++ uri->len, uri->s); ++ } ++} ++ + static void + __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params) + { +@@ -328,6 +341,10 @@ __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_para + refresh_pubruri_avps(dlginfo, &uri); + } + ++ if(local_identity_dlg_var.len > 0) { ++ refresh_local_identity(dlg, &uri); ++ } ++ + switch (type) { + case DLGCB_FAILED: + case DLGCB_TERMINATED: diff --git a/debian/patches/sipwise/pua_dialoginfo-refresh_pubruri_avps_flag.patch b/debian/patches/sipwise/pua_dialoginfo-refresh_pubruri_avps_flag.patch new file mode 100644 index 000000000..c1740ebcc --- /dev/null +++ b/debian/patches/sipwise/pua_dialoginfo-refresh_pubruri_avps_flag.patch @@ -0,0 +1,167 @@ +From: Victor Seva +Date: Thu, 20 Feb 2020 18:50:14 +0100 +Subject: pua_dialoginfo: refresh_pubruri_avps_flag +--- + .../pua_dialoginfo/doc/pua_dialoginfo_admin.xml | 20 +++++- + src/modules/pua_dialoginfo/pua_dialoginfo.c | 75 ++++++++++++++++++++++ + 2 files changed, 94 insertions(+), 1 deletion(-) + +diff --git a/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml b/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml +index eda5562..3054a77 100644 +--- a/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml ++++ b/src/modules/pua_dialoginfo/doc/pua_dialoginfo_admin.xml +@@ -414,7 +414,25 @@ modparam("pua_dialoginfo", "use_pubruri_avps", 1) + + +
+- ++ ++
++ <varname>refresh_pubruri_avps_flag</varname> (int) ++ ++ If use_pubruri_avps is enabled, this message flag indicates whether to refresh R-Uri from avps before sending the PUBLISH requests. ++ ++ ++ Default value is -1. ++ ++ ++ Set <varname>refresh_pubruri_avps_flag</varname> parameter ++ ++... ++modparam("pua_dialoginfo", "refresh_pubruri_avps_flag", 11) ++... ++ ++ ++
++ +
+ <varname>pubruri_caller_avp</varname> (int) + +diff --git a/src/modules/pua_dialoginfo/pua_dialoginfo.c b/src/modules/pua_dialoginfo/pua_dialoginfo.c +index f393249..2e25386 100644 +--- a/src/modules/pua_dialoginfo/pua_dialoginfo.c ++++ b/src/modules/pua_dialoginfo/pua_dialoginfo.c +@@ -41,6 +41,7 @@ + #include "../../core/str_list.h" + #include "../../core/mem/mem.h" + #include "../../core/pt.h" ++#include "../../core/ut.h" + #include "../dialog/dlg_load.h" + #include "../dialog/dlg_hash.h" + #include "../pua/pua_bind.h" +@@ -58,6 +59,7 @@ MODULE_VERSION + #define DEF_OVERRIDE_LIFETIME 0 + #define DEF_SEND_PUBLISH_FLAG -1 + #define DEF_USE_PUBRURI_AVPS 0 ++#define DEF_REFRESH_PUBRURI_AVPS_FLAG -1 + #define DEF_PUBRURI_CALLER_AVP 0 + #define DEF_PUBRURI_CALLEE_AVP 0 + #define DEF_CALLEE_TRYING 0 +@@ -90,6 +92,7 @@ int caller_confirmed = DEF_CALLER_ALWAYS_CONFIRMED; + int include_req_uri = DEF_INCLUDE_REQ_URI; + int send_publish_flag = DEF_SEND_PUBLISH_FLAG; + int use_pubruri_avps = DEF_USE_PUBRURI_AVPS; ++int refresh_pubruri_avps_flag = DEF_REFRESH_PUBRURI_AVPS_FLAG; + int callee_trying = DEF_CALLEE_TRYING; + int disable_caller_publish_flag = DEF_DISABLE_CALLER_PUBLISH_FLAG; + int disable_callee_publish_flag = DEF_DISABLE_CALLEE_PUBLISH_FLAG; +@@ -116,6 +119,7 @@ static param_export_t params[]={ + {"include_req_uri", INT_PARAM, &include_req_uri }, + {"send_publish_flag", INT_PARAM, &send_publish_flag }, + {"use_pubruri_avps", INT_PARAM, &use_pubruri_avps }, ++ {"refresh_pubruri_avps_flag", INT_PARAM, &refresh_pubruri_avps_flag }, + {"pubruri_caller_avp", PARAM_STRING, &pubruri_caller_avp }, + {"pubruri_callee_avp", PARAM_STRING, &pubruri_callee_avp }, + {"pubruri_caller_dlg_var", PARAM_STR, &caller_dlg_var }, +@@ -244,6 +248,58 @@ __dialog_cbtest(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params) + } + #endif + ++static struct str_list* get_str_list(unsigned short avp_flags, int_str avp_name); ++static int is_ruri_in_list(struct str_list *list, str *ruri); ++ ++void refresh_pubruri_avps(struct dlginfo_cell *dlginfo, str *uri) ++{ ++ struct str_list *pubruris = get_str_list(pubruri_caller_avp_type, ++ pubruri_caller_avp_name); ++ struct str_list *list, *next; ++ str target = STR_NULL; ++ ++ if(pubruris) { ++ list = dlginfo->pubruris_caller; ++ while(list) { ++ if(is_ruri_in_list(pubruris, &list->s) == 0) { ++ LM_DBG("ruri:'%.*s' removed from pubruris_caller list\n", ++ list->s.len, list->s.s); ++ next = list->next; list->next = NULL; ++ dialog_publish_multi("terminated", list, ++ &(dlginfo->from_uri), uri, &(dlginfo->callid), 1, ++ 10, 0, 0, &(dlginfo->from_contact), ++ &target, send_publish_flag==-1?1:0); ++ list->next = next; ++ } ++ list = list->next; ++ } ++ free_str_list_all(dlginfo->pubruris_caller); ++ dlginfo->pubruris_caller = pubruris; ++ LM_DBG("refreshed pubruris_caller info from avp\n"); ++ } ++ pubruris = get_str_list(pubruri_callee_avp_type, ++ pubruri_callee_avp_name); ++ if(pubruris) { ++ list = dlginfo->pubruris_callee; ++ while(list) { ++ if(is_ruri_in_list(pubruris, &list->s) == 0) { ++ LM_DBG("ruri:'%.*s' removed from pubruris_callee list\n", ++ list->s.len, list->s.s); ++ next = list->next; list->next = NULL; ++ dialog_publish_multi("terminated", list, ++ uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, ++ 10, 0, 0, &target, &(dlginfo->from_contact), ++ send_publish_flag==-1?1:0); ++ list->next = next; ++ } ++ list = list->next; ++ } ++ free_str_list_all(dlginfo->pubruris_callee); ++ dlginfo->pubruris_callee = pubruris; ++ LM_DBG("refreshed pubruris_callee info from avp\n"); ++ } ++} ++ + static void + __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params) + { +@@ -266,6 +322,12 @@ __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_para + uri = dlginfo->to_uri; + } + ++ if(use_pubruri_avps && (refresh_pubruri_avps_flag > -1 ++ || (request->flags & (1<len, ruri->s); ++ while(pubruris) { ++ LM_DBG("compare with:'%.*s'\n", pubruris->s.len, pubruris->s.s); ++ if(str_strcmp(&pubruris->s, ruri) == 0) { ++ return 1; ++ } ++ pubruris = pubruris->next; ++ } ++ return 0; ++} ++ + void free_str_list_all(struct str_list * del_current) { + + struct str_list* del_next;