diff --git a/src/modules/presence/notify.c b/src/modules/presence/notify.c index 85b74261b99..3bc1d0dc521 100644 --- a/src/modules/presence/notify.c +++ b/src/modules/presence/notify.c @@ -56,6 +56,7 @@ int goto_on_notify_reply = -1; extern int pres_local_log_level; extern int pres_local_log_facility; extern subs_t *_pres_subs_last_sub; +extern int _pres_subs_mode; c_back_param *shm_dup_cbparam(subs_t *); void free_cbparam(c_back_param *cb_param); @@ -1507,13 +1508,17 @@ int send_notify_request( LM_DBG("expires %d status %d\n", subs->expires, subs->status); cb_param = mem_copy_subs(subs, SHM_MEM_TYPE); - backup_subs = _pres_subs_last_sub; - _pres_subs_last_sub = subs; + if(_pres_subs_mode==1) { + backup_subs = _pres_subs_last_sub; + _pres_subs_last_sub = subs; + } set_uac_req(&uac_r, &met, &str_hdr, notify_body, td, TMCB_LOCAL_COMPLETED, p_tm_callback, (void *)cb_param); result = tmb.t_request_within(&uac_r); - _pres_subs_last_sub = backup_subs; + if(_pres_subs_mode==1) { + _pres_subs_last_sub = backup_subs; + } if(result < 0) { LM_ERR("in function tmb.t_request_within\n"); if(cb_param) @@ -1705,8 +1710,10 @@ void run_notify_reply_event(struct cell *t, struct tmcb_params *ps) _pres_subs_notify_reply_msg = ps->rpl; } - backup_subs = _pres_subs_last_sub; - _pres_subs_last_sub = mem_copy_subs((subs_t *)(*ps->param), PKG_MEM_TYPE); + if(_pres_subs_mode==1) { + backup_subs = _pres_subs_last_sub; + _pres_subs_last_sub = mem_copy_subs((subs_t *)(*ps->param), PKG_MEM_TYPE); + } backup_route_type = get_route_type(); set_route_type(LOCAL_ROUTE); @@ -1715,8 +1722,10 @@ void run_notify_reply_event(struct cell *t, struct tmcb_params *ps) _pres_subs_notify_reply_msg = NULL; _pres_subs_notify_reply_code = 0; - pkg_free(_pres_subs_last_sub); - _pres_subs_last_sub = backup_subs; + if(_pres_subs_mode==1) { + pkg_free(_pres_subs_last_sub); + _pres_subs_last_sub = backup_subs; + } free_sip_msg(&msg); } diff --git a/src/modules/presence/presence.c b/src/modules/presence/presence.c index 26e91970a2b..a8f781c4be3 100644 --- a/src/modules/presence/presence.c +++ b/src/modules/presence/presence.c @@ -102,6 +102,7 @@ int library_mode = 0; str server_address = {0, 0}; evlist_t *EvList = NULL; int pres_subs_remove_match = 0; +int _pres_subs_mode = 1; /* sip uri match */ sip_uri_match_f presence_sip_uri_match; @@ -243,6 +244,7 @@ static param_export_t params[]={ { "sip_uri_match", PARAM_INT, &pres_uri_match}, { "cseq_offset", PARAM_INT, &pres_cseq_offset}, { "enable_dmq", PARAM_INT, &pres_enable_dmq}, + { "pres_subs_mode", PARAM_INT, &_pres_subs_mode}, {0,0,0} }; /* clang-format on */ diff --git a/src/modules/presence/subscribe.c b/src/modules/presence/subscribe.c index 1ab693109e7..7d27a76d756 100644 --- a/src/modules/presence/subscribe.c +++ b/src/modules/presence/subscribe.c @@ -731,6 +731,7 @@ void msg_watchers_clean(unsigned int ticks, void *param) LM_ERR("cleaning pending subscriptions\n"); } +extern int _pres_subs_mode; subs_t *_pres_subs_last_sub = NULL; /* @@ -1036,9 +1037,11 @@ int handle_subscribe(struct sip_msg *msg, str watcher_user, str watcher_domain) str reply_str; int sent_reply = 0; - if(_pres_subs_last_sub) { - pkg_free(_pres_subs_last_sub); - _pres_subs_last_sub = NULL; + if(_pres_subs_mode==1) { + if(_pres_subs_last_sub) { + pkg_free(_pres_subs_last_sub); + _pres_subs_last_sub = NULL; + } } /* ??? rename to avoid collisions with other symbols */ @@ -1188,7 +1191,9 @@ int handle_subscribe(struct sip_msg *msg, str watcher_user, str watcher_domain) } } - _pres_subs_last_sub = mem_copy_subs(&subs, PKG_MEM_TYPE); + if(_pres_subs_mode==1) { + _pres_subs_last_sub = mem_copy_subs(&subs, PKG_MEM_TYPE); + } /* check if correct status */ if(get_status_str(subs.status) == NULL) {