[asterisk-commits] may: branch may/smpp r401116 - /team/may/smpp/branches/10/addons/res_smpp.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Oct 16 20:28:51 CDT 2013


Author: may
Date: Wed Oct 16 20:28:49 2013
New Revision: 401116

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=401116
Log:
adjust size of login data fields
process errors on msg processing


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=401116&r1=401115&r2=401116
==============================================================================
--- team/may/smpp/branches/10/addons/res_smpp.c (original)
+++ team/may/smpp/branches/10/addons/res_smpp.c Wed Oct 16 20:28:49 2013
@@ -15,10 +15,16 @@
 // todo
 // data coding scheme +
 // message-id +
-// bind_resp failed
+// bind_resp failed +
 // locking +
 // memory leaks & valgrind testing +
 // many other things ;)
+// tlv??
+// dlr??
+// ton/npi params
+// empty system_id in bind_resp (unpack failed, libsmpp error??)
+// 0.0.0.0 in 'smpp show peers' if esme allowed to connect from any
+// must be connected ip instead
 
 #include "asterisk.h"
 #include <pthread.h>
@@ -93,9 +99,9 @@
 
 struct smpp_smsc {
 	char name[256];
-	char system_id[16];
-	char password[9];
-	char system_type[13];
+	char system_id[17];
+	char password[10];
+	char system_type[14];
 	int seq;
 	int enquire;
 	time_t lastenq;
@@ -216,14 +222,17 @@
 	enq = unpack;
 	enq_resp = unpack;
 
-	if ((uint32_t)submit_sm_resp->command_id == (uint32_t) SUBMIT_SM_RESP && submit_sm_resp->command_status == ESME_ROK) {
+	if ((uint32_t)submit_sm_resp->command_id == (uint32_t) SUBMIT_SM_RESP) {
 		sequence_number = submit_sm_resp->sequence_number;
 		AST_LIST_LOCK(&smsc->respq);
 		AST_LIST_TRAVERSE(&smsc->respq, resp, next) {
 			ast_mutex_lock(&resp->lock);
 			if (resp->sequence_number == sequence_number) {
-				resp->delivered = 1;
-				snprintf((char *)resp->message_id, sizeof(resp->message_id), "%s", submit_sm_resp->message_id);
+				if (submit_sm_resp->command_status == ESME_ROK) {
+					resp->delivered = 1;
+					snprintf((char *)resp->message_id, sizeof(resp->message_id), "%s",
+						submit_sm_resp->message_id);
+				}
 				ast_mutex_unlock(&resp->lock);
 				break;
 			}
@@ -235,13 +244,15 @@
 		}
 		AST_LIST_UNLOCK(&smsc->respq);
 
-	} else if ((uint32_t)deliver_sm_resp->command_id == (uint32_t) DELIVER_SM_RESP && deliver_sm_resp->command_status == ESME_ROK) {
+	} else if ((uint32_t)deliver_sm_resp->command_id == (uint32_t) DELIVER_SM_RESP) {
 		sequence_number = deliver_sm_resp->sequence_number;
 		AST_LIST_LOCK(&smsc->respq);
 		AST_LIST_TRAVERSE(&smsc->respq, resp, next) {
 			ast_mutex_lock(&resp->lock);
 			if (resp->sequence_number == sequence_number) {
-				resp->delivered = 1;
+				if (deliver_sm_resp->command_status == ESME_ROK) {
+					resp->delivered = 1;
+				}
 				ast_mutex_unlock(&resp->lock);
 				break;
 			}
@@ -290,12 +301,12 @@
 
 		ast_msg_set_var(msg, "smpp_source", smsc->name);
 
-		ast_msg_queue(msg);
+		res = ast_msg_queue(msg);
 
 		memset(&sm_resp, 0, sizeof(sm_resp));
 		sm_resp.command_length = 0;
 		sm_resp.command_id = DELIVER_SM_RESP;
-		sm_resp.command_status = ESME_ROK;
+		sm_resp.command_status = (res != -1) ? ESME_ROK : ESME_RUNKNOWNERR;
 		sm_resp.sequence_number = sequence_number;
 		snprintf((char*)sm_resp.message_id, sizeof(sm_resp.message_id), "%s", "");
 
@@ -331,12 +342,12 @@
 
 		ast_msg_set_var(msg, "smpp_source", smsc->name);
 
-		ast_msg_queue(msg);
+		res = ast_msg_queue(msg);
 
 		memset(&sm_resp, 0, sizeof(sm_resp));
 		sm_resp.command_length = 0;
 		sm_resp.command_id = SUBMIT_SM_RESP;
-		sm_resp.command_status = ESME_ROK;
+		sm_resp.command_status = (res != -1) ? ESME_ROK : ESME_RUNKNOWNERR;
 		sm_resp.sequence_number = sequence_number;
 		snprintf((char*)sm_resp.message_id, sizeof(sm_resp.message_id), "%s", messageid);
 
@@ -442,7 +453,7 @@
 
 			if (smsc->socket) {
 				ast_log(LOG_WARNING, "ESME %s already connected\n", smsc->name);
-				return NULL;
+				break;
 			}
 			smsc->socket = socket;
 			smsc->seq = 1;
@@ -566,7 +577,7 @@
 	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 = 2;
+	bind.addr_ton = 1;
 	bind.addr_npi = 1;
 	snprintf((char*)bind.address_range, sizeof(bind.address_range), "%s", "");
 




More information about the asterisk-commits mailing list