[PATCH] generic support for our-host smsc directive

"Angel Fradejas" <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi all,

Find attached a patch to add generic support for the "our-host" smsc config
directive. Until now it was only supported in emi2 and smpp, and not fully
(for example emi2_open_listening_socket() created the server socket without
explicit binding to a specific interface).

This patch adds support to SMSCConn based drivers:

    smsc_emi2.c    CMG UCP/EMI 4.0
    smsc_smasi.c   SM/ASI (for CriticalPath InVoke SMS Center 4.x)
    smsc_cgw.c     Sonera ContentGateway software
    smsc_http.c    HTTP-based relay and content gateways
    smsc_fake.c    Fake SMSC
    smsc_smpp.c    SMPP 3.4

I may add generic support to the old SMSCenter based drivers (cimd2, ois,
etc) if there's interest.

Please, consider committing to cvs.

Angel Fradejas
Mediafusión España, S.A.
[email protected]
www.mediafusion.es
Tel. +34 91 252 32 00
Fax +34 91 572 27 08
patch_generic_our_host.diff (application/octet-stream, 12 KB)
Index: gw/smscconn.c
===================================================================
RCS file: /home/cvs/gateway/gw/smscconn.c,v
retrieving revision 1.32
diff -u -r1.32 smscconn.c
--- gw/smscconn.c	6 Sep 2002 12:05:50 -0000	1.32
+++ gw/smscconn.c	26 Feb 2003 20:21:21 -0000
@@ -55,6 +55,7 @@
     GET_OPTIONAL_VAL(conn->denied_prefix, "denied-prefix");
     GET_OPTIONAL_VAL(conn->preferred_prefix, "preferred-prefix");
     GET_OPTIONAL_VAL(conn->unified_prefix, "unified-prefix");
+    GET_OPTIONAL_VAL(conn->our_host, "our-host");
 
     if (conn->allowed_smsc_id && conn->denied_smsc_id)
 	warning(0, "Both 'allowed-smsc-id' and 'denied-smsc-id' set, deny-list "
Index: gw/smscconn_p.h
===================================================================
RCS file: /home/cvs/gateway/gw/smscconn_p.h,v
retrieving revision 1.32
diff -u -r1.32 smscconn_p.h
--- gw/smscconn_p.h	6 Sep 2002 12:05:50 -0000	1.32
+++ gw/smscconn_p.h	26 Feb 2003 20:21:21 -0000
@@ -119,6 +119,8 @@
     Octstr *denied_prefix;
     Octstr *preferred_prefix;
     Octstr *unified_prefix;
+    
+    Octstr *our_host;
 
     /* XXX: move rest global data from Smsc here
      */
Index: gw/smsc/smsc_cgw.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_cgw.c,v
retrieving revision 1.3
diff -u -r1.3 smsc_cgw.c
--- gw/smsc/smsc_cgw.c	14 Nov 2002 02:29:25 -0000	1.3
+++ gw/smsc/smsc_cgw.c	26 Feb 2003 20:21:25 -0000
@@ -128,7 +128,7 @@
 static int cgw_send_loop(SMSCConn *conn, Connection *server);
 void cgw_check_acks(PrivData *privdata);
 int cgw_wait_command(PrivData *privdata, SMSCConn *conn, Connection *server, int timeout);
-static int cgw_open_listening_socket(PrivData *privdata);
+static int cgw_open_listening_socket(SMSCConn *conn, PrivData *privdata);
 static void cgw_listener(void *arg);
 static void cgw_receiver(SMSCConn *conn, Connection *server);
 static int cgw_handle_op(SMSCConn *conn, Connection *server, struct cgwop *cgwop);
@@ -436,7 +436,7 @@
         privdata->dlr[i] = 0;
     }
 
-    if (privdata->rport > 0 && cgw_open_listening_socket(privdata) < 0) {
+    if (privdata->rport > 0 && cgw_open_listening_socket(conn,privdata) < 0) {
         gw_free(privdata);
         privdata = NULL;
         goto error;
@@ -648,7 +648,7 @@
             wait = 1;
 
         server = conn_open_tcp_with_port(privdata->host, privdata->port,
-                                         privdata->our_port, NULL /* privdata->our_host */);
+                                         privdata->our_port, conn->our_host);
 
         if (privdata->shutdown) {
             conn_destroy(server);
@@ -883,12 +883,11 @@
     return cgwop;
 }
 
-static int cgw_open_listening_socket(PrivData *privdata)
+static int cgw_open_listening_socket(SMSCConn *conn, PrivData *privdata)
 {
     int s;
 
-    if ((s = make_server_socket(privdata->rport, NULL)) == -1) {
-        /* XXX add interface_name if required */
+    if ((s = make_server_socket(privdata->rport, (conn->our_host ? octstr_get_cstr(conn->our_host) : NULL))) == -1) {
         error(0, "smsc_cgw: could not create listening socket in port %d", privdata->rport);
         return -1;
     }
Index: gw/smsc/smsc_emi2.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_emi2.c,v
retrieving revision 1.9
diff -u -r1.9 smsc_emi2.c
--- gw/smsc/smsc_emi2.c	16 Feb 2003 14:34:45 -0000	1.9
+++ gw/smsc/smsc_emi2.c	26 Feb 2003 20:21:27 -0000
@@ -43,7 +43,7 @@
 				   * bind our end of send connection */
     int		rport;		  /* Receive-port to listen */
     Octstr	*allow_ip, *deny_ip;
-    Octstr	*host, *alt_host, *username, *password, *our_host;
+    Octstr	*host, *alt_host, *username, *password;
     Octstr	*my_number;	/* My number if we want to force one */
     int		unacked;	/* Sent messages not acked */
     struct {
@@ -249,7 +249,7 @@
 			    octstr_get_cstr(privdata->name));
 	    server = conn_open_tcp_with_port(privdata->host, privdata->port,
 					     privdata->our_port, 
-					     privdata->our_host);
+					     conn->our_host);
 	    if(do_alt_host)
 		alt_host=1;
 	    else
@@ -261,7 +261,7 @@
 	    server = conn_open_tcp_with_port(
 		(octstr_len(privdata->alt_host) ? privdata->alt_host : privdata->host),
 		(privdata->alt_port ? privdata->alt_port : privdata->port),
-		privdata->our_port, privdata->our_host);
+		privdata->our_port, conn->our_host);
 	    alt_host=0;
 	}
 	if (privdata->shutdown) {
@@ -1372,12 +1372,11 @@
 }
 
 
-static int emi2_open_listening_socket(PrivData *privdata)
+static int emi2_open_listening_socket(SMSCConn *conn, PrivData *privdata)
 {
     int s;
 
-    if ( (s = make_server_socket(privdata->rport, NULL)) == -1) {
-	    /* XXX add interface_name if required */
+    if ( (s = make_server_socket(privdata->rport, (conn->our_host ? octstr_get_cstr(conn->our_host) : NULL))) == -1) {
 	error(0, "EMI2[%s]: could not create listening socket in port %d",
 	      octstr_get_cstr(privdata->name), privdata->rport);
 	return -1;
@@ -1559,8 +1558,6 @@
 	goto error;
     }
 
-    privdata->our_host = cfg_get(cfg, octstr_imm("our-host"));
-
     if (cfg_get_integer(&our_port, cfg, octstr_imm("our-port")) == -1)
 	privdata->our_port = 0; /* 0 means use any port */
     else
@@ -1571,8 +1568,8 @@
 	privdata->name = octstr_create("");
 
 	/* Add our_host */
-	if(octstr_len(privdata->our_host)) {
-	    octstr_append(privdata->name, privdata->our_host);
+	if(octstr_len(conn->our_host)) {
+	    octstr_append(privdata->name, conn->our_host);
 	}
 
 	/* Add our_port */
@@ -1697,7 +1694,7 @@
     privdata->allow_ip = allow_ip;
     privdata->deny_ip = deny_ip;
 
-    if (privdata->rport > 0 && emi2_open_listening_socket(privdata) < 0) {
+    if (privdata->rport > 0 && emi2_open_listening_socket(conn,privdata) < 0) {
 	gw_free(privdata);
 	privdata = NULL;
 	goto error;
Index: gw/smsc/smsc_fake.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_fake.c,v
retrieving revision 1.2
diff -u -r1.2 smsc_fake.c
--- gw/smsc/smsc_fake.c	14 Nov 2002 02:29:25 -0000	1.2
+++ gw/smsc/smsc_fake.c	26 Feb 2003 20:21:27 -0000
@@ -31,12 +31,11 @@
 } PrivData;
 
 
-static int fake_open_connection(PrivData *privdata)
+static int fake_open_connection(SMSCConn *conn, PrivData *privdata)
 {
     int s;
 
-    if ((s = make_server_socket(privdata->port, NULL)) == -1) {
-	    /* XXX add interface_name if required */
+    if ((s = make_server_socket(privdata->port, (conn->our_host ? octstr_get_cstr(conn->our_host) : NULL))) == -1) {
         error(0, "smsc_fake: could not create listening socket in port %d",
 	          privdata->port);
         return -1;
@@ -399,7 +398,7 @@
     privdata->allow_ip = allow_ip;
     privdata->deny_ip = deny_ip;
 
-    if (fake_open_connection(privdata) < 0) {
+    if (fake_open_connection(conn, privdata) < 0) {
         gw_free(privdata);
         privdata = NULL;
         goto error;
Index: gw/smsc/smsc_http.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_http.c,v
retrieving revision 1.5
diff -u -r1.5 smsc_http.c
--- gw/smsc/smsc_http.c	28 Jan 2003 00:06:29 -0000	1.5
+++ gw/smsc/smsc_http.c	26 Feb 2003 20:21:27 -0000
@@ -479,7 +479,7 @@
     conn->queued = httpsmsc_queued;
     conn->send_msg = httpsmsc_send;
 
-    if (http_open_port(portno, ssl)==-1)
+    if (http_open_port_if(portno, ssl, conn->our_host)==-1)
 	goto error;
 
     conndata->port = portno;
Index: gw/smsc/smsc_smasi.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_smasi.c,v
retrieving revision 1.4
diff -u -r1.4 smsc_smasi.c
--- gw/smsc/smsc_smasi.c	18 Feb 2003 13:23:10 -0000	1.4
+++ gw/smsc/smsc_smasi.c	26 Feb 2003 20:21:28 -0000
@@ -790,7 +790,7 @@
  */
 static Connection *open_connection(SMASI *smasi) 
 {
-    Connection *conn = conn_open_tcp(smasi->host, smasi->port, NULL);
+    Connection *conn = conn_open_tcp_with_port(smasi->host, smasi->port, 0, smasi->conn->our_host);
 
     if (conn == NULL) {
         error(0, "SMASI[%s]: Couldn't connect to server.",
Index: gw/smsc/smsc_smpp.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_smpp.c,v
retrieving revision 1.25
diff -u -r1.25 smsc_smpp.c
--- gw/smsc/smsc_smpp.c	23 Feb 2003 11:35:34 -0000	1.25
+++ gw/smsc/smsc_smpp.c	26 Feb 2003 20:21:28 -0000
@@ -87,7 +87,6 @@
     Octstr *username; 
     Octstr *password; 
     Octstr *address_range; 
-    Octstr *our_host; 
     Octstr *my_number; 
     Octstr *service_type;
     int source_addr_ton; 
@@ -114,7 +113,7 @@
 static SMPP *smpp_create(SMSCConn *conn, Octstr *host, int transmit_port,  
     	    	    	 int receive_port, Octstr *system_type,  
                          Octstr *username, Octstr *password, 
-    	    	    	 Octstr *address_range, Octstr *our_host,  
+    	    	    	 Octstr *address_range,
                          int source_addr_ton, int source_addr_npi,  
                          int dest_addr_ton, int dest_addr_npi, 
                          int alt_dcs, int enquire_link_interval, 
@@ -144,7 +143,6 @@
     smpp->dest_addr_ton = dest_addr_ton; 
     smpp->dest_addr_npi = dest_addr_npi; 
     smpp->alt_dcs = alt_dcs;
-    smpp->our_host = octstr_duplicate(our_host); 
     smpp->my_number = octstr_duplicate(my_number); 
     smpp->service_type = octstr_duplicate(service_type);
     smpp->transmit_port = transmit_port; 
@@ -178,7 +176,6 @@
         octstr_destroy(smpp->system_type); 
         octstr_destroy(smpp->service_type); 
         octstr_destroy(smpp->address_range); 
-        octstr_destroy(smpp->our_host); 
         octstr_destroy(smpp->my_number);
         octstr_destroy(smpp->alt_charset);
         gw_free(smpp); 
@@ -584,7 +581,7 @@
     SMPP_PDU *bind; 
     Connection *conn; 
  
-    conn = conn_open_tcp(smpp->host, smpp->transmit_port, smpp->our_host ); 
+    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)); 
@@ -620,7 +617,7 @@
     SMPP_PDU *bind; 
     Connection *conn; 
      
-    conn = conn_open_tcp(smpp->host, smpp->transmit_port, smpp->our_host ); 
+    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)); 
@@ -654,7 +651,7 @@
     SMPP_PDU *bind; 
     Connection *conn; 
  
-    conn = conn_open_tcp(smpp->host, smpp->receive_port, smpp->our_host ); 
+    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)); 
@@ -1257,7 +1254,6 @@
     long source_addr_npi; 
     long dest_addr_ton; 
     long dest_addr_npi; 
-    Octstr *our_host; 
     Octstr *my_number; 
     Octstr *service_type;
     SMPP *smpp; 
@@ -1290,7 +1286,6 @@
     password = cfg_get(grp, octstr_imm("smsc-password")); 
     system_type = cfg_get(grp, octstr_imm("system-type")); 
     address_range = cfg_get(grp, octstr_imm("address-range")); 
-    our_host = cfg_get(grp, octstr_imm("our-host")); 
     my_number = cfg_get(grp, octstr_imm("my-number")); 
     service_type = cfg_get(grp, octstr_imm("service-type")); 
      
@@ -1388,7 +1383,7 @@
     alt_charset = cfg_get(grp, octstr_imm("alt-charset"));
 
     smpp = smpp_create(conn, host, port, receive_port, system_type,  
-    	    	       username, password, address_range, our_host, 
+    	    	       username, password, address_range,
                        source_addr_ton, source_addr_npi, dest_addr_ton,  
                        dest_addr_npi, alt_dcs, enquire_link_interval, 
                        max_pending_submits, reconnect_delay, 
@@ -1411,7 +1406,6 @@
     octstr_destroy(password); 
     octstr_destroy(system_type); 
     octstr_destroy(address_range); 
-    octstr_destroy(our_host); 
     octstr_destroy(my_number); 
     octstr_destroy(smsc_id);
     octstr_destroy(alt_charset);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.