From 8c69320c8772dc57c4da33005af6feae4f06b11d Mon Sep 17 00:00:00 2001 From: TransNexus OSP Development Date: Thu, 3 Dec 2009 03:56:14 +0000 Subject: Added custom info support. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@232738 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_osplookup.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c index 2599abf6f..95447711c 100644 --- a/apps/app_osplookup.c +++ b/apps/app_osplookup.c @@ -273,6 +273,7 @@ enum osp_authpolicy { #define OSP_DEF_DESTINATIONS ((unsigned int)5) /* OSP default max number of destinations */ #define OSP_DEF_TIMELIMIT ((unsigned int)0) /* OSP default duration limit, no limit */ #define OSP_DEF_PROTOCOL OSP_PROT_SIP /* OSP default destination protocol, SIP */ +#define OSP_MAX_CUSTOMINFO ((unsigned int)8) /* OSP max number of custom info */ /* OSP Provider */ struct osp_provider { @@ -1154,6 +1155,7 @@ static int osp_create_callid( * \param snetid Source network ID * \param np NP parameters * \param div SIP Diversion header parameters + * \param cinfo Custom info * \param results Lookup results * \return 1 Found , 0 No route, -1 Error */ @@ -1166,6 +1168,7 @@ static int osp_lookup( const char* snetid, struct osp_npparam* np, struct osp_diversion* div, + const char* cinfo[], struct osp_results* results) { int res; @@ -1223,6 +1226,14 @@ static int osp_lookup( osp_convert_inout(div->host, host, sizeof(host)); OSPPTransactionSetDiversion(results->outhandle, div->user, host); + if (cinfo != NULL) { + for (i = 0; i < OSP_MAX_CUSTOMINFO; i++) { + if (!ast_strlen_zero(cinfo[i])) { + OSPPTransactionSetCustomInfo(results->outhandle, i, cinfo[i]); + } + } + } + callidnum = 0; callids[0] = NULL; for (i = 0; i < OSP_CALLID_MAXNUM; i++) { @@ -1921,6 +1932,8 @@ static int osplookup_exec( const char* snetid = ""; struct osp_npparam np; struct osp_diversion div; + unsigned int i; + const char* cinfo[OSP_MAX_CUSTOMINFO] = { NULL }; char buffer[OSP_TOKSTR_SIZE]; struct osp_results results; const char* status; @@ -2000,6 +2013,22 @@ static int osplookup_exec( div.user = ast_var_value(current); } else if (!strcasecmp(ast_var_name(current), "OSPINDIVHOST")) { div.host = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO1")) { + cinfo[0] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO2")) { + cinfo[1] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO3")) { + cinfo[2] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO4")) { + cinfo[3] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO5")) { + cinfo[4] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO6")) { + cinfo[5] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO7")) { + cinfo[6] = ast_var_value(current); + } else if (!strcasecmp(ast_var_name(current), "OSPINCUSTOMINFO8")) { + cinfo[7] = ast_var_value(current); } } ast_debug(1, "OSPLookup: source device '%s'\n", srcdev); @@ -2011,12 +2040,17 @@ static int osplookup_exec( ast_debug(1, "OSPLookup: OSPINNPDI '%d'\n", np.npdi); ast_debug(1, "OSPLookup: OSPINDIVUSER '%s'\n", div.user); ast_debug(1, "OSPLookup: OSPINDIVHOST'%s'\n", div.host); + for (i = 0; i < OSP_MAX_CUSTOMINFO; i++) { + if (!ast_strlen_zero(cinfo[i])) { + ast_debug(1, "OSPLookup: OSPINCUSTOMINFO%d '%s'\n", i, cinfo[i]); + } + } if ((cres = ast_autoservice_start(chan)) < 0) { return -1; } - if ((res = osp_lookup(provider, callidtypes, srcdev, chan->cid.cid_num, args.exten, snetid, &np, &div, &results)) > 0) { + if ((res = osp_lookup(provider, callidtypes, srcdev, chan->cid.cid_num, args.exten, snetid, &np, &div, cinfo, &results)) > 0) { status = AST_OSP_SUCCESS; } else { results.tech[0] = '\0'; -- cgit v1.2.3