a bunch of small refactorings in the dialog module
authorHenning Westerholt <henning.westerholt@1und1.de>
Sun, 3 May 2009 21:25:05 +0000 (23:25 +0200)
committerHenning Westerholt <henning.westerholt@1und1.de>
Mon, 4 May 2009 13:07:01 +0000 (15:07 +0200)
- move populate_leg_info declaration to the proper header file
 - unify mostly identical dlg_seq_up_onreply, dlg_seq_down_onreply functions
 - make unref_new_dialog static, this is not used outside the implementation file
 - compact variable declarations in dlg_onroute and a few other functions
 - the get_dlg_tl_payload macro is only used once, integrate it into the code

modules_k/dialog/dlg_handlers.c
modules_k/dialog/dlg_handlers.h
modules_k/dialog/dlg_req_within.h
modules_k/dialog/dlg_transfer.c

index 6b3bc3d..2b3d53d 100644 (file)
@@ -293,10 +293,7 @@ static void dlg_onreply(struct cell* t, int type, struct tmcb_params *param)
 {
        struct sip_msg *rpl;
        struct dlg_cell *dlg;
 {
        struct sip_msg *rpl;
        struct dlg_cell *dlg;
-       int new_state;
-       int old_state;
-       int unref;
-       int event;
+       int new_state, old_state, unref, event;
        str tag;
 
        dlg = (struct dlg_cell *)(*param->param);
        str tag;
 
        dlg = (struct dlg_cell *)(*param->param);
@@ -403,12 +400,16 @@ static void dlg_onreply(struct cell* t, int type, struct tmcb_params *param)
 
 
 /*!
 
 
 /*!
- * \brief Run dialog callbacks on forwarded requests in upstream direction
+ * \brief Helper function that run dialog callbacks on forwarded requests
+ * \see dlg_seq_up_onreply
+ * \see dlg_seq_down_onreply
  * \param t transaction, unused
  * \param type type of the callback, should be TMCB_RESPONSE_FWDED
  * \param param saved dialog structure inside the callback
  * \param t transaction, unused
  * \param type type of the callback, should be TMCB_RESPONSE_FWDED
  * \param param saved dialog structure inside the callback
+ * \param direction direction of the request
  */
  */
-static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *param)
+static void dlg_seq_onreply_helper(struct cell* t, int type,
+               struct tmcb_params *param, const int direction)
 {
        struct dlg_cell *dlg;
 
 {
        struct dlg_cell *dlg;
 
@@ -418,7 +419,7 @@ static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *par
 
        if (type==TMCB_RESPONSE_FWDED) {
                run_dlg_callbacks(DLGCB_RESPONSE_WITHIN, dlg, param->rpl,
 
        if (type==TMCB_RESPONSE_FWDED) {
                run_dlg_callbacks(DLGCB_RESPONSE_WITHIN, dlg, param->rpl,
-                       DLG_DIR_UPSTREAM, 0);
+                       direction, 0);
                return;
        }
 
                return;
        }
 
@@ -427,26 +428,28 @@ static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *par
 
 
 /*!
 
 
 /*!
- * \brief Run dialog callbacks on forwarded requests in downstream direction
+ * \brief Run dialog callbacks on forwarded requests in upstream direction
+ * \see dlg_seq_onreply_helper
  * \param t transaction, unused
  * \param type type of the callback, should be TMCB_RESPONSE_FWDED
  * \param param saved dialog structure inside the callback
  */
  * \param t transaction, unused
  * \param type type of the callback, should be TMCB_RESPONSE_FWDED
  * \param param saved dialog structure inside the callback
  */
-static void dlg_seq_down_onreply(struct cell* t, int type, struct tmcb_params *param)
+static void dlg_seq_up_onreply(struct cell* t, int type, struct tmcb_params *param)
 {
 {
-       struct dlg_cell *dlg;
-
-       dlg = (struct dlg_cell *)(*param->param);
-       if (shutdown_done || dlg==0)
-               return;
+       return dlg_seq_onreply_helper(t, type, param, DLG_DIR_UPSTREAM);
+}
 
 
-       if (type==TMCB_RESPONSE_FWDED) {
-               run_dlg_callbacks(DLGCB_RESPONSE_WITHIN, dlg, param->rpl,
-                       DLG_DIR_DOWNSTREAM, 0);
-               return;
-       }
 
 
-       return;
+/*!
+ * \brief Run dialog callbacks on forwarded requests in downstream direction
+ * \see dlg_seq_onreply_helper
+ * \param t transaction, unused
+ * \param type type of the callback, should be TMCB_RESPONSE_FWDED
+ * \param param saved dialog structure inside the callback
+ */
+static void dlg_seq_down_onreply(struct cell* t, int type, struct tmcb_params *param)
+{
+       return dlg_seq_onreply_helper(t, type, param, DLG_DIR_DOWNSTREAM);
 }
 
 
 }
 
 
@@ -492,7 +495,7 @@ void dlg_onreq(struct cell* t, int type, struct tmcb_params *param)
  * \see dlg_onreq
  * \param dialog unreferenced dialog
  */
  * \see dlg_onreq
  * \param dialog unreferenced dialog
  */
-void unref_new_dialog(void *dialog)
+static void unref_new_dialog(void *dialog)
 {
        struct tmcb_params p;
 
 {
        struct tmcb_params p;
 
@@ -755,17 +758,8 @@ static void unreference_dialog(void *dialog)
 void dlg_onroute(struct sip_msg* req, str *route_params, void *param)
 {
        struct dlg_cell *dlg;
 void dlg_onroute(struct sip_msg* req, str *route_params, void *param)
 {
        struct dlg_cell *dlg;
-       str val;
-       str callid;
-       str ftag;
-       str ttag;
-       int h_entry;
-       int h_id;
-       int new_state;
-       int old_state;
-       int unref;
-       int event;
-       int timeout;
+       str val, callid, ftag, ttag;
+       int h_entry, h_id, new_state, old_state, unref, event, timeout;
        unsigned int dir;
        int ret = 0;
 
        unsigned int dir;
        int ret = 0;
 
@@ -956,11 +950,6 @@ void dlg_onroute(struct sip_msg* req, str *route_params, void *param)
 }
 
 
 }
 
 
-
-#define get_dlg_tl_payload(_tl_)  ((struct dlg_cell*)((char *)(_tl_)- \
-               (unsigned long)(&((struct dlg_cell*)0)->tl)))
-
-
 /*!
  * \brief Timer function that removes expired dialogs, run timeout route
  * \param tl dialog timer list
 /*!
  * \brief Timer function that removes expired dialogs, run timeout route
  * \param tl dialog timer list
@@ -968,12 +957,12 @@ void dlg_onroute(struct sip_msg* req, str *route_params, void *param)
 void dlg_ontimeout( struct dlg_tl *tl)
 {
        struct dlg_cell *dlg;
 void dlg_ontimeout( struct dlg_tl *tl)
 {
        struct dlg_cell *dlg;
-       int new_state;
-       int old_state;
-       int unref;
+       int new_state, old_state, unref;
        struct sip_msg *fmsg;
 
        struct sip_msg *fmsg;
 
-       dlg = get_dlg_tl_payload(tl);
+       /* get the dialog tl payload */
+       dlg = ((struct dlg_cell*)((char *)(tl) -
+               (unsigned long)(&((struct dlg_cell*)0)->tl)));
 
        if(dlg->toroute>0 && dlg->toroute<RT_NO)
        {
 
        if(dlg->toroute>0 && dlg->toroute<RT_NO)
        {
index e0804ba..277db0b 100644 (file)
@@ -70,6 +70,21 @@ void init_dlg_handlers(char *rr_param, int dlg_flag,
 void destroy_dlg_handlers(void);
 
 
 void destroy_dlg_handlers(void);
 
 
+/*!
+ * \brief Parse SIP message and populate leg informations
+ *
+ * Parse SIP message and populate leg informations. 
+ * \param dlg the dialog to add cseq, contact & record_route
+ * \param msg sip message
+ * \param flag  0-for a request(INVITE), 1- for a reply(200 ok)
+ * \return 0 on success, -1 on failure
+ * \note for a request: get record route in normal order, for a reply get
+ * in reverse order, skipping the ones from the request and the proxies' own
+ */
+int populate_leg_info( struct dlg_cell *dlg, struct sip_msg *msg,
+       struct cell* t, unsigned int leg, str *tag);
+
+
 /*!
  * \brief Function that is registered as TM callback and called on requests
  * \param t transaction, used to created the dialog
 /*!
  * \brief Function that is registered as TM callback and called on requests
  * \param t transaction, used to created the dialog
index df7d334..732f430 100644 (file)
@@ -49,9 +49,6 @@ struct mi_root * mi_terminate_dlg(struct mi_root *cmd_tree, void *param );
 
 dlg_t* build_dlg_t(struct dlg_cell * cell, int dir);
 int free_tm_dlg(dlg_t *td);
 
 dlg_t* build_dlg_t(struct dlg_cell * cell, int dir);
 int free_tm_dlg(dlg_t *td);
-int populate_leg_info( struct dlg_cell *dlg, struct sip_msg *msg,
-       struct cell* t, unsigned int leg, str *tag);
-
 int dlg_bye(struct dlg_cell *dlg, str *hdrs, int side);
 int dlg_bye_all(struct dlg_cell *dlg, str *hdrs);
 
 int dlg_bye(struct dlg_cell *dlg, str *hdrs, int side);
 int dlg_bye_all(struct dlg_cell *dlg, str *hdrs);
 
index 2348590..df6f5d1 100644 (file)
@@ -34,6 +34,7 @@
 #include "../../modules/tm/tm_load.h"
 
 #include "dlg_req_within.h"
 #include "../../modules/tm/tm_load.h"
 
 #include "dlg_req_within.h"
+#include "dlg_handlers.h"
 #include "dlg_transfer.h"
 
 #define DLG_HOLD_SDP "v=0\r\no=kamailio-bridge 0 0 IN IP4 0.0.0.0\r\ns=kamailio\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 9 RTP/AVP 8 0\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\n"
 #include "dlg_transfer.h"
 
 #define DLG_HOLD_SDP "v=0\r\no=kamailio-bridge 0 0 IN IP4 0.0.0.0\r\ns=kamailio\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\nm=audio 9 RTP/AVP 8 0\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:0 PCMU/8000\r\n"