1. Added reporting operator names in AuthReq.
authorTransNexus OSP Development <support@transnexus.com>
Mon, 4 Jan 2010 03:38:29 +0000 (03:38 +0000)
committerTransNexus OSP Development <support@transnexus.com>
Mon, 4 Jan 2010 03:38:29 +0000 (03:38 +0000)
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

apps/app_osplookup.c

index b4470f0..0ddcf1c 100644 (file)
@@ -312,40 +312,42 @@ struct osp_provider {
 
 /* Call ID */
 struct osp_callid {
 
 /* 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 {
 };
 
 /* 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 {
 };
 
 /* 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 */
 };
 
 /* 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_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)) {
        int error;
 
        if ((provider == NULL) || (reason == NULL) || (results == NULL)) {
@@ -961,6 +964,14 @@ static int osp_check_destination(
                results->npdi = 0;
        }
 
                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;
        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;
                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;
        }
 
                return OSP_ERROR;
        }
 
@@ -1025,6 +1039,9 @@ static int osp_check_destination(
                results->nprn[0] = '\0';
                results->npcic[0] = '\0';
                results->npdi = 0;
                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;
        }
                res = OSP_FAILED;
                break;
        }
@@ -1226,7 +1243,7 @@ static int osp_lookup(
        const char* calling,
        const char* called,
        const char* snetid,
        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)
        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;
        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->numdests = 0;
        results->outtimelimit = OSP_DEF_TIMELIMIT;
 
@@ -1291,6 +1311,10 @@ static int osp_lookup(
 
        OSPPTransactionSetNumberPortability(results->outhandle, np->rn, np->cic, np->npdi);
 
 
        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);
 
        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;
        unsigned int tokenlen;
        char token[OSP_SIZE_TOKSTR];
        OSPEFAILREASON reason;
+       OSPE_OPERATOR_NAME type;
        int error;
 
        if (results == NULL) {
        int error;
 
        if (results == NULL) {
@@ -1506,6 +1531,9 @@ static int osp_next(
        results->nprn[0] = '\0';
        results->npcic[0] = '\0';
        results->npdi = 0;
        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) {
        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 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 };
        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;
        np.rn = "";
        np.cic = "";
        np.npdi = 0;
+       for (type = OSPC_OPNAME_START; type < OSPC_OPNAME_NUMBER; type++) {
+               np.opname[type] = "";
+       }
 
        div.user = "";
        div.host = "";
 
        div.user = "";
        div.host = "";
@@ -2106,6 +2138,18 @@ static int osplookup_exec(
                        if (ast_true(ast_var_value(current))) {
                                np.npdi = 1;
                        }
                        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")) {
                } 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: 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);
        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;
                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';
                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);
        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);
        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;
        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;
        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;
                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';
                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);
        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);
        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);