[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);