[sr-dev] git:master: Adapt multiple modules relying on the dialog module to latest

Timo Reimann timo.reimann at 1und1.de
Wed Aug 17 13:43:21 CEST 2011


Module: sip-router
Branch: master
Commit: 934adcfb97f2e92e8bde695538e0e0b289ba3614
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=934adcfb97f2e92e8bde695538e0e0b289ba3614

Author: Timo Reimann <timo.reimann at 1und1.de>
Committer: Timo Reimann <timo.reimann at 1und1.de>
Date:   Wed Aug 17 13:35:53 2011 +0200

Adapt multiple modules relying on the dialog module to latest
dialog changes.

- modules_k/nat_traversal: Register for DLGCB_CONFIRMED_NA
  (formerly called DLGCB_CONFIRMED; see commit e1068cb0ab4 for
  details).
- modules_k/pua_dialoginfo:
    * In __dialog_cbtest(), make sure that valid SIP message is
      used.
    * In __dialog_cbtest(), print details for callback on
      DLGCB_CONFIRMED_NA too.
    * In __dialog_created(), register to DLGCB_CONFIRMED_NA in
      normal case and additionally to DLGCB_CONFIRMED_NA in debug
      case (PUA_DIALOGINFO_DEBUG enabled).
- modules_k/sst:
    * Use reply message from dialog callback parameters in
      sst_dialog_confirmed_CB().
    * Register to DLGCB_CONFIRMED_NA instead of DLGCB_CONFIRMED.

---

 modules_k/nat_traversal/nat_traversal.c   |    2 +-
 modules_k/pua_dialoginfo/pua_dialoginfo.c |   44 +++++++++++++++++-----------
 modules_k/sst/sst_handlers.c              |    4 +-
 3 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/modules_k/nat_traversal/nat_traversal.c b/modules_k/nat_traversal/nat_traversal.c
index cc65354..62227e4 100644
--- a/modules_k/nat_traversal/nat_traversal.c
+++ b/modules_k/nat_traversal/nat_traversal.c
@@ -1248,7 +1248,7 @@ __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 
     if (dlg_api.register_dlgcb(dlg, DLGCB_EARLY, __dialog_early, param, NULL) != 0)
         LM_ERR("cannot register callback for dialog early replies\n");
-    if (dlg_api.register_dlgcb(dlg, DLGCB_CONFIRMED, __dialog_confirmed, param, NULL) != 0)
+    if (dlg_api.register_dlgcb(dlg, DLGCB_CONFIRMED_NA, __dialog_confirmed, param, NULL) != 0)
         LM_ERR("cannot register callback for dialog confirmation\n");
 
     if ((request->msg_flags & FL_DO_KEEPALIVE) == 0)
diff --git a/modules_k/pua_dialoginfo/pua_dialoginfo.c b/modules_k/pua_dialoginfo/pua_dialoginfo.c
index f2731c0..792e3b0 100644
--- a/modules_k/pua_dialoginfo/pua_dialoginfo.c
+++ b/modules_k/pua_dialoginfo/pua_dialoginfo.c
@@ -120,6 +120,7 @@ static void
 __dialog_cbtest(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 {
 	str tag;
+	struct sip_msg *msg;
 	LM_ERR("dialog callback received, from=%.*s, to=%.*s\n", dlg->from_uri.len, dlg->from_uri.s, dlg->to_uri.len, dlg->to_uri.s);
 	if (dlg->tag[0].len && dlg->tag[0].s ) {
 		LM_ERR("dialog callback: tag[0] = %.*s", dlg->tag[0].len, dlg->tag[0].s);
@@ -129,24 +130,30 @@ __dialog_cbtest(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 	}
 
 if (type != DLGCB_DESTROY) {
+	msg = get_valid_msg(_params);
+	if (!msg) {
+		LM_ERR("no SIP message available in callback parameters\n");
+		return;
+	}
+
 	/* get to tag*/
-	if ( !_params->msg->to) {
+	if ( !msg->to) {
 		// to header not defined, parse to header
 		LM_ERR("to header not defined, parse to header\n");
-		if (parse_headers(_params->msg, HDR_TO_F,0)<0) {
+		if (parse_headers(msg, HDR_TO_F,0)<0) {
 			//parser error
 			LM_ERR("parsing of to-header failed\n");
 			tag.s = 0;
 			tag.len = 0;
-		} else if (!_params->msg->to) {
+		} else if (!msg->to) {
 			// to header still not defined
 			LM_ERR("no to although to-header is parsed: bad reply or missing TO hdr :-/\n");
 			tag.s = 0;
 			tag.len = 0;
 		} else 
-			tag = get_to(_params->msg)->tag_value;
+			tag = get_to(msg)->tag_value;
 	} else {
-		tag = get_to(_params->msg)->tag_value;
+		tag = get_to(msg)->tag_value;
 		if (tag.s==0 || tag.len==0) {
 			LM_ERR("missing TAG param in TO hdr :-/\n");
 			tag.s = 0;
@@ -154,7 +161,7 @@ if (type != DLGCB_DESTROY) {
 		}
 	}
 	if (tag.s) {
-		LM_ERR("dialog callback: _params->msg->to->parsed->tag_value = %.*s", tag.len, tag.s);
+		LM_ERR("dialog callback: msg->to->parsed->tag_value = %.*s", tag.len, tag.s);
 	}
 }
 
@@ -162,6 +169,9 @@ if (type != DLGCB_DESTROY) {
 	case DLGCB_FAILED:
 		LM_ERR("dialog callback type 'DLGCB_FAILED' received, from=%.*s\n", dlg->from_uri.len, dlg->from_uri.s);
 		break;
+	case DLGCB_CONFIRMED_NA:
+		LM_ERR("dialog callback type 'DLGCB_CONFIRMED_NA' received, from=%.*s\n", dlg->from_uri.len, dlg->from_uri.s);
+		break;
 	case DLGCB_CONFIRMED:
 		LM_ERR("dialog callback type 'DLGCB_CONFIRMED' received, from=%.*s\n", dlg->from_uri.len, dlg->from_uri.s);
 		break;
@@ -228,24 +238,24 @@ __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_para
 		LM_DBG("dialog is early, from=%.*s\n", dlginfo->from_uri.len, dlginfo->from_uri.s);
 		if (include_tags) {
 			/* get remotetarget */
-			if ( !_params->msg->contact && ((parse_headers(_params->msg, HDR_CONTACT_F,0)<0) || !_params->msg->contact) ) {
+			if ( !_params->rpl->contact && ((parse_headers(_params->rpl, HDR_CONTACT_F,0)<0) || !_params->rpl->contact) ) {
 				LM_ERR("bad reply or missing CONTACT hdr\n");
 			} else {
-				if ( parse_contact(_params->msg->contact)<0 ||
-						((contact_body_t *)_params->msg->contact->parsed)->contacts==NULL ||
-						((contact_body_t *)_params->msg->contact->parsed)->contacts->next!=NULL ) {
+				if ( parse_contact(_params->rpl->contact)<0 ||
+						((contact_body_t *)_params->rpl->contact->parsed)->contacts==NULL ||
+						((contact_body_t *)_params->rpl->contact->parsed)->contacts->next!=NULL ) {
 					LM_ERR("Malformed CONTACT hdr\n");
 				} else {
-					target = ((contact_body_t *)_params->msg->contact->parsed)->contacts->uri;
+					target = ((contact_body_t *)_params->rpl->contact->parsed)->contacts->uri;
 				}
 			}
 			/* get to tag*/
-			if ( !_params->msg->to && ((parse_headers(_params->msg, HDR_TO_F,0)<0) || !_params->msg->to) ) {
+			if ( !_params->rpl->to && ((parse_headers(_params->rpl, HDR_TO_F,0)<0) || !_params->rpl->to) ) {
 				LM_ERR("bad reply or missing TO hdr :-/\n");
 				tag.s = 0;
 				tag.len = 0;
 			} else {
-				tag = get_to(_params->msg)->tag_value;
+				tag = get_to(_params->rpl)->tag_value;
 				if (tag.s==0 || tag.len==0) {
 					LM_ERR("missing TAG param in TO hdr :-/\n");
 					tag.s = 0;
@@ -281,7 +291,7 @@ __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_para
 static void
 __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 {
-	struct sip_msg *request = _params->msg;
+	struct sip_msg *request = _params->req;
 	struct dlginfo_cell *dlginfo;
 	int len;
 
@@ -329,7 +339,7 @@ __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 	
 	/* register dialog callbacks which triggers sending PUBLISH */
 	if (dlg_api.register_dlgcb(dlg, 
-		DLGCB_FAILED| DLGCB_CONFIRMED | DLGCB_TERMINATED | DLGCB_EXPIRED | 
+		DLGCB_FAILED| DLGCB_CONFIRMED_NA | DLGCB_TERMINATED | DLGCB_EXPIRED |
 		DLGCB_REQ_WITHIN | DLGCB_EARLY,
 		__dialog_sendpublish, dlginfo, free_dlginfo_cell) != 0) {
 		LM_ERR("cannot register callback for interesting dialog types\n");
@@ -339,8 +349,8 @@ __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 #ifdef PUA_DIALOGINFO_DEBUG
 	/* dialog callback testing (registered last to be executed frist) */
 	if (dlg_api.register_dlgcb(dlg, 
-		DLGCB_FAILED| DLGCB_CONFIRMED | DLGCB_REQ_WITHIN | DLGCB_TERMINATED | DLGCB_EXPIRED | 
-		DLGCB_EARLY | DLGCB_RESPONSE_FWDED | DLGCB_RESPONSE_WITHIN  | 
+		DLGCB_FAILED| DLGCB_CONFIRMED_NA | DLGCB_CONFIRMED | DLGCB_REQ_WITHIN | DLGCB_TERMINATED |
+		DLGCB_EXPIRED | DLGCB_EARLY | DLGCB_RESPONSE_FWDED | DLGCB_RESPONSE_WITHIN  |
 		DLGCB_MI_CONTEXT | DLGCB_DESTROY,
 		__dialog_cbtest, NULL, NULL) != 0) {
 		LM_ERR("cannot register callback for all dialog types\n");
diff --git a/modules_k/sst/sst_handlers.c b/modules_k/sst/sst_handlers.c
index fb3351f..c7778a1 100644
--- a/modules_k/sst/sst_handlers.c
+++ b/modules_k/sst/sst_handlers.c
@@ -365,7 +365,7 @@ void sst_dialog_created_CB(struct dlg_cell *did, int type,
 static void sst_dialog_confirmed_CB(struct dlg_cell *did, int type,
 		struct dlg_cb_params * params)
 {
-	struct sip_msg* msg = params->msg;
+	struct sip_msg* msg = params->rpl;
 
 	LM_DBG("confirmed dialog CB %p\n", did);
 	DLOGMSG(msg);
@@ -944,7 +944,7 @@ static void setup_dialog_callbacks(struct dlg_cell *did, sst_info_t *info)
 #ifdef USE_CONFIRM_CALLBACK
 	LM_DBG("Adding callback DLGCB_CONFIRMED\n");
 	dlg_binds->register_dlgcb(did,
-			DLGCB_CONFIRMED, sst_dialog_confirmed_CB, info, NULL);
+			DLGCB_CONFIRMED_NA, sst_dialog_confirmed_CB, info, NULL);
 #endif /* USE_CONFIRM_CALLBACK */
 
 	LM_DBG("Adding callback "




More information about the sr-dev mailing list