Author: may
Date: Thu Aug 14 07:09:18 2014
New Revision: 420984

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=420984
Log:
add check_bind_npi, bind_ton, bind_npi paramters for bind operation

add src_ton/npi, dst_ton/npi message_data paramters (r/w)


Modified:
    team/may/smpp/branches/10/addons/res_smpp.c

Modified: team/may/smpp/branches/10/addons/res_smpp.c
URL: 
http://svnview.digium.com/svn/asterisk/team/may/smpp/branches/10/addons/res_smpp.c?view=diff&rev=420984&r1=420983&r2=420984
==============================================================================
--- team/may/smpp/branches/10/addons/res_smpp.c (original)
+++ team/may/smpp/branches/10/addons/res_smpp.c Thu Aug 14 07:09:18 2014
@@ -143,6 +143,9 @@
        char system_type[14];
        int seq;
        int enquire;
+       int bind_ton, bind_npi;
+       int addr_ton, addr_npi;
+       int check_bind:1;
        time_t lastenq, sentenq;
        char host[MAXHOSTNAMELEN];
        char connected_host[MAXHOSTNAMELEN];
@@ -422,7 +425,15 @@
                snprintf(tmp, sizeof(tmp), "%d", deliver->esm_class); \
                ast_msg_set_var(msg, "esm_class", tmp); \
                ast_base64encode(tmp, deliver->short_message, 
deliver->sm_length, sizeof(tmp)); \
-               ast_msg_set_var(msg, "base64_body", tmp);
+               ast_msg_set_var(msg, "base64_body", tmp); \
+               snprintf(tmp, sizeof(tmp), "%d", deliver->source_addr_ton); \
+               ast_msg_set_var(msg, "src_ton", tmp); \
+               snprintf(tmp, sizeof(tmp), "%d", deliver->source_addr_npi); \
+               ast_msg_set_var(msg, "src_npi", tmp); \
+               snprintf(tmp, sizeof(tmp), "%d", deliver->source_addr_ton); \
+               ast_msg_set_var(msg, "dst_npi", tmp); \
+               snprintf(tmp, sizeof(tmp), "%d", deliver->dest_addr_npi); \
+               ast_msg_set_var(msg, "dst_npi", tmp);
 
                FILL_MSG_HEADERS(msg, deliver, tmp);
                ast_msg_set_var(msg, "smpp_type", "MO");
@@ -596,6 +607,10 @@
                                ast_log(LOG_WARNING, "ESME %s already 
connected\n", smsc->name);
                                break;
                        }
+                       if (smsc->check_bind && ((smsc->bind_npi != 
bind.addr_npi) || (smsc->bind_ton != bind.addr_ton))) {
+                               ast_log(LOG_WARNING, "ESME %s haven't proper 
TON/NPI on BIND PDU\n", smsc->name);
+                               break;
+                       }
                        strncpy(smsc->connected_host, host, 
sizeof(smsc->connected_host));
                        smsc->socket = socket;
                        smsc->seq = 1;
@@ -720,12 +735,9 @@
        snprintf((char*)bind.password, sizeof(bind.password), "%s", 
smsc->password);
        snprintf((char*)bind.system_type, sizeof(bind.system_type), "%s", 
smsc->system_type);
        bind.interface_version = 0x34;
-       bind.addr_ton = 1;
-       bind.addr_npi = 1;
-       if (!strcmp(smsc->name, "astragsm")) {
-               bind.addr_ton = 0;
-               bind.addr_npi = 0;
-       }
+       bind.addr_ton = smsc->bind_ton;
+       bind.addr_npi = smsc->bind_npi;
+
        snprintf((char*)bind.address_range, sizeof(bind.address_range), "%s", 
"");
 
        ret = smpp34_pack(BIND_TRANSCEIVER, pdu, sizeof(pdu), &pdulen, (void 
*)&bind);
@@ -1243,6 +1255,10 @@
        if (smsc) {
                ast_copy_string(smsc->name, name, sizeof(smsc->name) - 1);
                ast_copy_string(smsc->system_id, name, sizeof(smsc->system_id) 
- 1);
+               smsc->bind_ton = 1;
+               smsc->bind_npi = 1;
+               smsc->addr_ton = 0;
+               smsc->addr_npi = 0;
                while (v) {
                        if (!strcasecmp(v->name, "system_id")) {
                                ast_copy_string(smsc->system_id, v->value, 
sizeof(smsc->system_id) - 1);
@@ -1261,7 +1277,7 @@
                                }
                        } else if (!strcasecmp(v->name, "port")) {
                                if ((smsc->port = atoi(v->value)) < 0) {
-                                       ast_log(LOG_ERROR, "Invalid smsc port: 
%s\n", v->value);
+                                       ast_log(LOG_ERROR, "Invalid smsc port: 
%s on %s\n", v->value, smsc->name);
                                        smsc = NULL;
                                        break;
                                }
@@ -1272,6 +1288,32 @@
                                }
                        } else if (!strcasecmp(v->name, "context")) {
                                ast_copy_string(smsc->context, v->value, 
sizeof(smsc->context));
+                       } else if (!strcasecmp(v->name, "bind_npi")) {
+                               if ((smsc->bind_npi = atoi(v->value)) < 0) {
+                                       ast_log(LOG_ERROR, "Invalid bind_npi: 
%s on %s\n", v->value, smsc->name);
+                                       smsc = NULL;
+                                       break;
+                               }
+                       } else if (!strcasecmp(v->name, "bind_ton")) {
+                               if ((smsc->bind_ton = atoi(v->value)) < 0) {
+                                       ast_log(LOG_ERROR, "Invalid bind_ton: 
%s on %s\n", v->value, smsc->name);
+                                       smsc = NULL;
+                                       break;
+                               }
+                       } else if (!strcasecmp(v->name, "addr_npi")) {
+                               if ((smsc->addr_npi = atoi(v->value)) < -1) {
+                                       ast_log(LOG_ERROR, "Invalid addr_npi: 
%s on %s\n", v->value, smsc->name);
+                                       smsc = NULL;
+                                       break;
+                               }
+                       } else if (!strcasecmp(v->name, "addr_ton")) {
+                               if ((smsc->bind_ton = atoi(v->value)) < -1) {
+                                       ast_log(LOG_ERROR, "Invalid addr_ton: 
%s on %s\n", v->value, smsc->name);
+                                       smsc = NULL;
+                                       break;
+                               }
+                       } else if (!strcasecmp(v->name, "check_bind_npi")) {
+                               smsc->check_bind = ast_true(v->value);
                        }
                        v = v->next;
                }
@@ -1443,14 +1485,20 @@
                if(ast_msg_get_var(message, "base64_body")) { \
                        submit.sm_length = 
ast_base64decode(submit.short_message, ast_msg_get_var(message, "base64_body"), 
\
                                                                
sizeof(submit.short_message) - 1); \
-               }
-
-
-
-               submit.source_addr_ton = 0;
-               submit.source_addr_npi = 0;
-               submit.dest_addr_ton = 0;
-               submit.dest_addr_npi = 0;
+               } \
+               if(ast_msg_get_var(message, "src_ton")) { \
+                       submit.source_addr_ton = atoi(ast_msg_get_var(message, 
"src_ton")); \
+               } \
+               if(ast_msg_get_var(message, "src_npi")) { \
+                       submit.source_addr_npi = atoi(ast_msg_get_var(message, 
"src_npi")); \
+               } \
+               if(ast_msg_get_var(message, "dst_ton")) { \
+                       submit.dest_addr_ton = atoi(ast_msg_get_var(message, 
"dst_ton")); \
+               } \
+               if(ast_msg_get_var(message, "dst_npi")) { \
+                       submit.dest_addr_npi = atoi(ast_msg_get_var(message, 
"dst_npi")); \
+               }
+
 
                snprintf((char*)submit.source_addr, sizeof(submit.source_addr), 
"%s", /* (from) ? */ from /*: msg->from */);
                snprintf((char*)submit.destination_addr, 
sizeof(submit.destination_addr), "%s", /* (to) ? */ tonum /* : msg->to */);
@@ -1471,6 +1519,15 @@
                }
 
                FILL_SMPP_HEADERS(message, submit);
+
+               if (smsc->addr_ton >= 0) {
+                       submit.source_addr_ton = smsc->addr_ton;
+                       submit.dest_addr_ton = smsc->addr_ton;
+               }
+               if (smsc->addr_npi >= 0) {
+                       submit.source_addr_npi = smsc->addr_npi;
+                       submit.dest_addr_npi = smsc->addr_npi;
+               }
 
                if (!submit.sm_length) {
                        submit.sm_length = strlen((char *)submit.short_message);
@@ -1487,11 +1544,6 @@
                deliver.command_status = ESME_ROK;
                deliver.sequence_number = sequence_number = smsc->seq++;
 
-               deliver.source_addr_ton = 0;
-               deliver.source_addr_npi = 0;
-               deliver.dest_addr_ton = 0;
-               deliver.dest_addr_npi = 0;
-
                snprintf((char*)deliver.source_addr, 
sizeof(deliver.source_addr), "%s", /* (from) ? */ from /*: msg->from */);
                snprintf((char*)deliver.destination_addr, 
sizeof(deliver.destination_addr), "%s", /* (to) ? */ tonum /* : msg->to */);
 
@@ -1511,6 +1563,15 @@
                }
 
                FILL_SMPP_HEADERS(message, deliver);
+
+               if (smsc->addr_ton >= 0) {
+                       deliver.source_addr_ton = smsc->addr_ton;
+                       deliver.dest_addr_ton = smsc->addr_ton;
+               }
+               if (smsc->addr_npi >= 0) {
+                       deliver.source_addr_npi = smsc->addr_npi;
+                       deliver.dest_addr_npi = smsc->addr_npi;
+               }
 
                if (!deliver.sm_length) {
                        deliver.sm_length = strlen((char 
*)deliver.short_message);


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to