Hi all,
As some SMPP Servers requires this feature,
here is the patch.
Comments please ?
regards
--- gateway.orig/gw/smsc/smsc_smpp.c2012-09-27 11:17:34.588403041 +0200
+++ gateway/gw/smsc/smsc_smpp.c 2012-10-10 11:27:16.195102206 +0200
@@ -149,6 +149,8 @@
int source_addr_npi;
int dest_addr_ton;
int dest_addr_npi;
+int our_port;
+int our_receiver_port;
long bind_addr_ton;
long bind_addr_npi;
int transmit_port;
@@ -213,7 +215,7 @@
static SMPP *smpp_create(SMSCConn *conn, Octstr *host, int transmit_port,
- int receive_port, Octstr *system_type,
+ int receive_port, int our_port, int
our_receiver_port, Octstr *system_type,
Octstr *username, Octstr *password,
Octstr *address_range,
int source_addr_ton, int source_addr_npi,
@@ -238,6 +240,8 @@
counter_increase(smpp-message_id_counter);
smpp-host = octstr_duplicate(host);
smpp-system_type = octstr_duplicate(system_type);
+smpp-our_port = our_port;
+smpp-our_receiver_port = our_receiver_port;
smpp-username = octstr_duplicate(username);
smpp-password = octstr_duplicate(password);
smpp-address_range = octstr_duplicate(address_range);
@@ -686,7 +690,7 @@
case 0x00: /* default SMSC alphabet */
/*
* try to convert from something interesting if specified so
- * unless it was specified binary, ie. UDH indicator was detected
+ * unless it was specified binary, i.e. UDH indicator was detected
*/
if (smpp-alt_charset msg-sms.coding != DC_8BIT) {
if (charset_convert(msg-sms.msgdata,
octstr_get_cstr(smpp-alt_charset), SMPP_DEFAULT_CHARSET) != 0)
@@ -1127,7 +1131,12 @@
conn = conn_open_ssl(smpp-host, smpp-transmit_port,
smpp-ssl_client_certkey_file, smpp-conn-our_host);
else
#endif
+
+if (smpp-our_port 0)
+conn = conn_open_tcp_with_port(smpp-host, smpp-transmit_port,
smpp-our_port, smpp-conn-our_host );
+else
conn = conn_open_tcp(smpp-host, smpp-transmit_port,
smpp-conn-our_host);
+
if (conn == NULL) {
error(0, SMPP[%s]: Couldn't connect to server.,
octstr_get_cstr(smpp-conn-id));
@@ -1175,7 +1184,12 @@
conn = conn_open_ssl(smpp-host, smpp-transmit_port,
smpp-ssl_client_certkey_file, smpp-conn-our_host);
else
#endif
+
+if (smpp-our_port 0)
+ conn = conn_open_tcp_with_port(smpp-host, smpp-transmit_port,
smpp-our_port, smpp-conn-our_host );
+else
conn = conn_open_tcp(smpp-host, smpp-transmit_port,
smpp-conn-our_host);
+
if (conn == NULL) {
error(0, SMPP[%s]: Couldn't connect to server.,
octstr_get_cstr(smpp-conn-id));
@@ -1221,7 +1235,12 @@
conn = conn_open_ssl(smpp-host, smpp-receive_port,
smpp-ssl_client_certkey_file, smpp-conn-our_host);
else
#endif
+
+if (smpp-our_receiver_port 0)
+conn = conn_open_tcp_with_port(smpp-host, smpp-receive_port,
smpp-our_receiver_port, smpp-conn-our_host);
+else
conn = conn_open_tcp(smpp-host, smpp-receive_port,
smpp-conn-our_host);
+
if (conn == NULL) {
error(0, SMPP[%s]: Couldn't connect to server.,
octstr_get_cstr(smpp-conn-id));
@@ -2242,6 +2261,8 @@
long source_addr_npi;
long dest_addr_ton;
long dest_addr_npi;
+long our_port;
+long our_receiver_port;
Octstr *my_number;
Octstr *service_type;
SMPP *smpp;
@@ -2269,6 +2290,12 @@
port = 0;
if (cfg_get_integer(receive_port, grp, octstr_imm(receive-port)) == -1)
receive_port = 0;
+
+if (cfg_get_integer(our_port, grp, octstr_imm(our-port)) == -1)
+our_port = 0;
+if (cfg_get_integer(our_receiver_port, grp,
octstr_imm(our-receiver-port)) == -1)
+our_receiver_port = 0;
+
cfg_get_bool(transceiver_mode, grp, octstr_imm(transceiver-mode));
username = cfg_get(grp, octstr_imm(smsc-username));
password = cfg_get(grp, octstr_imm(smsc-password));
@@ -2403,7 +2430,7 @@
esm_class = ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
}
-smpp = smpp_create(conn, host, port, receive_port, system_type,
+smpp = smpp_create(conn, host, port, receive_port, our_port,
our_receiver_port, system_type,
username, password, address_range,
source_addr_ton, source_addr_npi, dest_addr_ton,
dest_addr_npi, enquire_link_interval,
--- gateway.orig/gwlib/cfg.def 2012-10-10 11:29:23.525226267 +0200
+++ gateway/gwlib/cfg.def 2012-10-10 11:30:55.042102636 +0200
@@ -337,6 +337,7 @@
OCTSTR(validityperiod)
OCTSTR(our-port)
OCTSTR(receive-port)
+OCTSTR(our-receiver-port)
OCTSTR(connect-allow-ip)
OCTSTR(system-id)
OCTSTR(system-type)