1. Added reporting operator names in AuthReq.
2. Added retrieving operator names from AuthRsp and exporting them. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@237250 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
0078b3bc5c
commit
fb4870a74a
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue