aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_osplookup.c
diff options
context:
space:
mode:
authortransnexus <transnexus@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-04 03:38:29 +0000
committertransnexus <transnexus@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-04 03:38:29 +0000
commitc2bd29204f9189c0c214618020ecc35bad8337d7 (patch)
treee3323f5ef123e4b307ca45b788db40d2642aa438 /apps/app_osplookup.c
parent484fd7c9a49b243186766f91cba601ff867de997 (diff)
1. Added reporting operator names in AuthReq.
2. Added retrieving operator names from AuthRsp and exporting them. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@237250 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_osplookup.c')
-rw-r--r--apps/app_osplookup.c133
1 files changed, 107 insertions, 26 deletions
diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c
index b4470f0c3..0ddcf1cbc 100644
--- a/apps/app_osplookup.c
+++ b/apps/app_osplookup.c
@@ -312,40 +312,42 @@ struct osp_provider {
/* Call ID */
struct osp_callid {
- unsigned char buf[OSP_SIZE_NORSTR]; /* Call ID string */
- unsigned int len; /* Call ID length */
+ unsigned char buf[OSP_SIZE_NORSTR]; /* Call ID string */
+ unsigned int len; /* Call ID length */
};
-/* Number Portability Parameters */
-struct osp_npparam {
- const char* rn; /* Rounding number */
- const char* cic; /* Carrier Identification Code */
- int npdi; /* NP Database Dip Indicator */
+/* Number Portability Data */
+struct osp_npdata {
+ const char* rn; /* Rounding Number */
+ const char* cic; /* Carrier Identification Code */
+ int npdi; /* NP Database Dip Indicator */
+ const char* opname[OSPC_OPNAME_NUMBER]; /* Operator Names */
};
/* SIP Diversion Header Parameters */
struct osp_diversion {
- const char* user; /* Diversion header user info */
- const char* host; /* Diversion header host info */
+ const char* user; /* Diversion header user info */
+ const char* host; /* Diversion header host info */
};
/* OSP Application In/Output Results */
struct osp_results {
- int inhandle; /* Inbound transaction handle */
- int outhandle; /* Outbound transaction handle */
- unsigned int intimelimit; /* Inbound duration limit */
- unsigned int outtimelimit; /* Outbound duration limit */
- char tech[OSP_SIZE_TECHSTR]; /* Outbound Asterisk TECH string */
- char dest[OSP_SIZE_NORSTR]; /* Outbound destination IP address */
- char calling[OSP_SIZE_NORSTR]; /* Outbound calling number, may be translated */
- char called[OSP_SIZE_NORSTR]; /* Outbound called number, may be translated */
- char token[OSP_SIZE_TOKSTR]; /* Outbound OSP token */
- char networkid[OSP_SIZE_NORSTR]; /* Outbound network ID */
- char nprn[OSP_SIZE_NORSTR]; /* Outbound NP routing number */
- char npcic[OSP_SIZE_NORSTR]; /* Outbound NP carrier identification code */
- int npdi; /* Outbound NP database dip indicator */
- unsigned int numdests; /* Number of remain outbound destinations */
- struct osp_callid outcallid; /* Outbound call ID */
+ int inhandle; /* Inbound transaction handle */
+ int outhandle; /* Outbound transaction handle */
+ unsigned int intimelimit; /* Inbound duration limit */
+ unsigned int outtimelimit; /* Outbound duration limit */
+ char tech[OSP_SIZE_TECHSTR]; /* Outbound Asterisk TECH string */
+ char dest[OSP_SIZE_NORSTR]; /* Outbound destination IP address */
+ char calling[OSP_SIZE_NORSTR]; /* Outbound calling number, may be translated */
+ char called[OSP_SIZE_NORSTR]; /* Outbound called number, may be translated */
+ char token[OSP_SIZE_TOKSTR]; /* Outbound OSP token */
+ char networkid[OSP_SIZE_NORSTR]; /* Outbound network ID */
+ char nprn[OSP_SIZE_NORSTR]; /* Outbound NP routing number */
+ char npcic[OSP_SIZE_NORSTR]; /* Outbound NP carrier identification code */
+ int npdi; /* Outbound NP database dip indicator */
+ char opname[OSPC_OPNAME_NUMBER][OSP_SIZE_NORSTR]; /* Outbound Operator names */
+ unsigned int numdests; /* Number of remain outbound destinations */
+ struct osp_callid outcallid; /* Outbound call ID */
};
/* OSP Call Leg */
@@ -924,6 +926,7 @@ static int osp_check_destination(
OSPE_DEST_OSPENABLED enabled;
OSPE_DEST_PROTOCOL protocol;
char dest[OSP_SIZE_NORSTR];
+ OSPE_OPERATOR_NAME type;
int error;
if ((provider == NULL) || (reason == NULL) || (results == NULL)) {
@@ -961,6 +964,14 @@ static int osp_check_destination(
results->npdi = 0;
}
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ error = OSPPTransactionGetOperatorName(results->outhandle, type, sizeof(results->opname[type]), results->opname[type]);
+ if (error != OSPC_ERR_NO_ERROR) {
+ ast_debug(1, "OSP: Unable to get operator name of type '%d', error '%d'\n", type, error);
+ results->opname[type][0] = '\0';
+ }
+ }
+
if ((error = OSPPTransactionGetDestProtocol(results->outhandle, &protocol)) != OSPC_ERR_NO_ERROR) {
ast_debug(1, "OSP: Unable to get destination protocol, error '%d'\n", error);
*reason = OSPC_FAIL_NORMAL_UNSPECIFIED;
@@ -969,6 +980,9 @@ static int osp_check_destination(
results->nprn[0] = '\0';
results->npcic[0] = '\0';
results->npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results->opname[type][0] = '\0';
+ }
return OSP_ERROR;
}
@@ -1025,6 +1039,9 @@ static int osp_check_destination(
results->nprn[0] = '\0';
results->npcic[0] = '\0';
results->npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results->opname[type][0] = '\0';
+ }
res = OSP_FAILED;
break;
}
@@ -1226,7 +1243,7 @@ static int osp_lookup(
const char* calling,
const char* called,
const char* snetid,
- struct osp_npparam* np,
+ struct osp_npdata* np,
struct osp_diversion* div,
const char* cinfo[],
struct osp_results* results)
@@ -1268,6 +1285,9 @@ static int osp_lookup(
results->nprn[0] = '\0';
results->npcic[0] = '\0';
results->npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results->opname[type][0] = '\0';
+ }
results->numdests = 0;
results->outtimelimit = OSP_DEF_TIMELIMIT;
@@ -1291,6 +1311,10 @@ static int osp_lookup(
OSPPTransactionSetNumberPortability(results->outhandle, np->rn, np->cic, np->npdi);
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ OSPPTransactionSetOperatorName(results->outhandle, type, np->opname[type]);
+ }
+
osp_convert_inout(div->host, host, sizeof(host));
OSPPTransactionSetDiversion(results->outhandle, div->user, host);
@@ -1490,6 +1514,7 @@ static int osp_next(
unsigned int tokenlen;
char token[OSP_SIZE_TOKSTR];
OSPEFAILREASON reason;
+ OSPE_OPERATOR_NAME type;
int error;
if (results == NULL) {
@@ -1506,6 +1531,9 @@ static int osp_next(
results->nprn[0] = '\0';
results->npcic[0] = '\0';
results->npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results->opname[type][0] = '\0';
+ }
results->outtimelimit = OSP_DEF_TIMELIMIT;
if ((res = osp_get_provider(name, &provider)) <= 0) {
@@ -2026,7 +2054,8 @@ static int osplookup_exec(
struct ast_var_t* current;
const char* srcdev = "";
const char* snetid = "";
- struct osp_npparam np;
+ struct osp_npdata np;
+ OSPE_OPERATOR_NAME type;
struct osp_diversion div;
unsigned int i;
const char* cinfo[OSP_MAX_CUSTOMINFO] = { NULL };
@@ -2080,6 +2109,9 @@ static int osplookup_exec(
np.rn = "";
np.cic = "";
np.npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ np.opname[type] = "";
+ }
div.user = "";
div.host = "";
@@ -2106,6 +2138,18 @@ static int osplookup_exec(
if (ast_true(ast_var_value(current))) {
np.npdi = 1;
}
+ } else if (!strcasecmp(ast_var_name(current), "OSPINSPID")) {
+ np.opname[OSPC_OPNAME_SPID] = ast_var_value(current);
+ } else if (!strcasecmp(ast_var_name(current), "OSPINOCN")) {
+ np.opname[OSPC_OPNAME_OCN] = ast_var_value(current);
+ } else if (!strcasecmp(ast_var_name(current), "OSPINSPN")) {
+ np.opname[OSPC_OPNAME_SPN] = ast_var_value(current);
+ } else if (!strcasecmp(ast_var_name(current), "OSPINALTSPN")) {
+ np.opname[OSPC_OPNAME_ALTSPN] = ast_var_value(current);
+ } else if (!strcasecmp(ast_var_name(current), "OSPINMCC")) {
+ np.opname[OSPC_OPNAME_MCC] = ast_var_value(current);
+ } else if (!strcasecmp(ast_var_name(current), "OSPINMNC")) {
+ np.opname[OSPC_OPNAME_MNC] = ast_var_value(current);
} else if (!strcasecmp(ast_var_name(current), "OSPINTOHOST")) {
ast_copy_string(results.dest, ast_var_value(current), sizeof(results.dest));
} else if (!strcasecmp(ast_var_name(current), "OSPINDIVUSER")) {
@@ -2137,6 +2181,12 @@ static int osplookup_exec(
ast_debug(1, "OSPLookup: OSPINNPRN '%s'\n", np.rn);
ast_debug(1, "OSPLookup: OSPINNPCIC '%s'\n", np.cic);
ast_debug(1, "OSPLookup: OSPINNPDI '%d'\n", np.npdi);
+ ast_debug(1, "OSPLookup: OSPINSPID '%s'\n", np.opname[OSPC_OPNAME_SPID]);
+ ast_debug(1, "OSPLookup: OSPINOCN '%s'\n", np.opname[OSPC_OPNAME_OCN]);
+ ast_debug(1, "OSPLookup: OSPINSPN '%s'\n", np.opname[OSPC_OPNAME_SPN]);
+ ast_debug(1, "OSPLookup: OSPINALTSPN '%s'\n", np.opname[OSPC_OPNAME_ALTSPN]);
+ ast_debug(1, "OSPLookup: OSPINMCC '%s'\n", np.opname[OSPC_OPNAME_MCC]);
+ ast_debug(1, "OSPLookup: OSPINMNC '%s'\n", np.opname[OSPC_OPNAME_MNC]);
ast_debug(1, "OSPLookup: OSPINTOHOST '%s'\n", results.dest);
ast_debug(1, "OSPLookup: OSPINDIVUSER '%s'\n", div.user);
ast_debug(1, "OSPLookup: OSPINDIVHOST'%s'\n", div.host);
@@ -2162,6 +2212,9 @@ static int osplookup_exec(
results.nprn[0] = '\0';
results.npcic[0] = '\0';
results.npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results.opname[type][0] = '\0';
+ }
results.numdests = 0;
results.outtimelimit = OSP_DEF_TIMELIMIT;
results.outcallid.buf[0] = '\0';
@@ -2193,6 +2246,18 @@ static int osplookup_exec(
snprintf(buffer, sizeof(buffer), "%d", results.npdi);
pbx_builtin_setvar_helper(chan, "OSPOUTNPDI", buffer);
ast_debug(1, "OSPLookup: OSPOUTNPDI'%s'\n", buffer);
+ pbx_builtin_setvar_helper(chan, "OSPOUTSPID", results.opname[OSPC_OPNAME_SPID]);
+ ast_debug(1, "OSPLookup: OSPOUTSPID '%s'\n", results.opname[OSPC_OPNAME_SPID]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTOCN", results.opname[OSPC_OPNAME_OCN]);
+ ast_debug(1, "OSPLookup: OSPOUTOCN '%s'\n", results.opname[OSPC_OPNAME_OCN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTSPN", results.opname[OSPC_OPNAME_SPN]);
+ ast_debug(1, "OSPLookup: OSPOUTSPN '%s'\n", results.opname[OSPC_OPNAME_SPN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTALTSPN", results.opname[OSPC_OPNAME_ALTSPN]);
+ ast_debug(1, "OSPLookup: OSPOUTALTSPN '%s'\n", results.opname[OSPC_OPNAME_ALTSPN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTMCC", results.opname[OSPC_OPNAME_MCC]);
+ ast_debug(1, "OSPLookup: OSPOUTMCC '%s'\n", results.opname[OSPC_OPNAME_MCC]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTMNC", results.opname[OSPC_OPNAME_MNC]);
+ ast_debug(1, "OSPLookup: OSPOUTMNC '%s'\n", results.opname[OSPC_OPNAME_MNC]);
pbx_builtin_setvar_helper(chan, "OSPOUTTOKEN", results.token);
ast_debug(1, "OSPLookup: OSPOUTTOKEN size '%zd'\n", strlen(results.token));
snprintf(buffer, sizeof(buffer), "%d", results.numdests);
@@ -2261,6 +2326,7 @@ static int ospnext_exec(
struct varshead* headp;
struct ast_var_t* current;
struct osp_results results;
+ OSPE_OPERATOR_NAME type;
char buffer[OSP_SIZE_TOKSTR];
unsigned int callidtypes = OSP_CALLID_UNDEF;
const char* status;
@@ -2341,6 +2407,9 @@ static int ospnext_exec(
results.nprn[0] = '\0';
results.npcic[0] = '\0';
results.npdi = 0;
+ for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+ results.opname[type][0] = '\0';
+ }
results.numdests = 0;
results.outtimelimit = OSP_DEF_TIMELIMIT;
results.outcallid.buf[0] = '\0';
@@ -2369,6 +2438,18 @@ static int ospnext_exec(
snprintf(buffer, sizeof(buffer), "%d", results.npdi);
pbx_builtin_setvar_helper(chan, "OSPOUTNPDI", buffer);
ast_debug(1, "OSPLookup: OSPOUTNPDI'%s'\n", buffer);
+ pbx_builtin_setvar_helper(chan, "OSPOUTSPID", results.opname[OSPC_OPNAME_SPID]);
+ ast_debug(1, "OSPLookup: OSPOUTSPID '%s'\n", results.opname[OSPC_OPNAME_SPID]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTOCN", results.opname[OSPC_OPNAME_OCN]);
+ ast_debug(1, "OSPLookup: OSPOUTOCN '%s'\n", results.opname[OSPC_OPNAME_OCN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTSPN", results.opname[OSPC_OPNAME_SPN]);
+ ast_debug(1, "OSPLookup: OSPOUTSPN '%s'\n", results.opname[OSPC_OPNAME_SPN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTALTSPN", results.opname[OSPC_OPNAME_ALTSPN]);
+ ast_debug(1, "OSPLookup: OSPOUTALTSPN '%s'\n", results.opname[OSPC_OPNAME_ALTSPN]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTMCC", results.opname[OSPC_OPNAME_MCC]);
+ ast_debug(1, "OSPLookup: OSPOUTMCC '%s'\n", results.opname[OSPC_OPNAME_MCC]);
+ pbx_builtin_setvar_helper(chan, "OSPOUTMNC", results.opname[OSPC_OPNAME_MNC]);
+ ast_debug(1, "OSPLookup: OSPOUTMNC '%s'\n", results.opname[OSPC_OPNAME_MNC]);
pbx_builtin_setvar_helper(chan, "OSPOUTTOKEN", results.token);
ast_debug(1, "OSPNext: OSPOUTTOKEN size '%zd'\n", strlen(results.token));
snprintf(buffer, sizeof(buffer), "%d", results.numdests);