Module: sip-router
Branch: pd/outbound
Commit: 61674b59c6b14aded58fcd9801370b3648f9d21c
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=61674b5…
Author: Peter Dunkley <peter.dunkley(a)crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunkley(a)crocodile-rcs.com>
Date: Sun Aug 19 20:47:43 2012 +0100
modules_k/outbound: Started to fill in function that determines whether Outbound is
required
---
modules_k/outbound/ob_mod.c | 27 +++++++++++++++++++++++----
1 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/modules_k/outbound/ob_mod.c b/modules_k/outbound/ob_mod.c
index 57d5cf3..f561931 100644
--- a/modules_k/outbound/ob_mod.c
+++ b/modules_k/outbound/ob_mod.c
@@ -22,6 +22,7 @@
*/
#include "../../dprint.h"
+#include "../../dset.h"
#include "../../ip_addr.h"
#include "../../mod_fix.h"
#include "../../sr_module.h"
@@ -36,7 +37,7 @@ MODULE_VERSION
static int mod_init(void);
-static int ob_force_bflag = -1;
+static unsigned int ob_force_bflag = (unsigned int) -1;
static str ob_key = {0, 0};
static cmd_export_t cmds[]=
@@ -75,8 +76,13 @@ struct module_exports exports=
static int mod_init(void)
{
- if (ob_force_bflag == -1)
- LM_INFO("force_outbound_bflag not set\n");
+ if (ob_force_bflag == (unsigned int) -1)
+ ob_force_bflag = 0;
+ else if (ob_force_bflag >= 8 * sizeof (ob_force_bflag)) {
+ LM_ERR("force_outbound_bflag (%d) too big!\n", ob_force_bflag);
+ return -1;
+ } else
+ ob_force_bflag = 1 << ob_force_bflag;
if (ob_key.s == 0)
{
@@ -102,6 +108,18 @@ int decode_flow_token(struct receive_info *rcv, str flow_token)
int use_outbound(struct sip_msg *msg)
{
+ /* If Outbound is forced return success without any further checks */
+ if (isbflagset(0, ob_force_bflag) > 0)
+ return 1;
+
+ /* Use Outbound when:
+ # It's an initial request (out-of-dialog INVITE, REGISTER,
+ SUBSCRIBE, or REFER), with
+ # A single Via:, and
+ # Top Route: points to us and has ;ob parameter _OR_ Contact: has
+ ;ob parameter _OR_ it's a REGISTER with ;+sip.instance
+ */
+
return 0;
}
@@ -109,7 +127,8 @@ int bind_ob(struct ob_binds *pxb)
{
if (pxb == NULL)
{
- LM_WARN("bind_outbound: Cannot load outbound API into NULL pointer\n");
+ LM_WARN("bind_outbound: Cannot load outbound API into NULL "
+ "pointer\n");
return -1;
}