Hi,
please see comments below...
Thanks,
Alex
Stanislav Sinyagin schrieb:
now it's attached
--- Stanislav Sinyagin <[EMAIL PROTECTED]> wrote:
Attached, please see the patch against CVS HEAD.
It shouldn't break any existing functionality, and I've tested it
with Perle IOLAN DS1 terminal server.
regards,
stan
--- Stanislav Sinyagin <[EMAIL PROTECTED]> wrote:
Here's the proposal for configuration options:
group = smsc
smsc = at
modemtype = auto
device = rawtcp
pin = 2345
rawtcp-host = 10.0.0.1
rawtcp-port = 10001
------------------------------------------------------------------------
? sendsms?username=tester&password=foobar&to=0794419087&text=Hello+world
Index: gw/smsc/smsc_at.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_at.c,v
retrieving revision 1.24
diff -u -r1.24 smsc_at.c
--- gw/smsc/smsc_at.c 6 May 2005 14:50:27 -0000 1.24
+++ gw/smsc/smsc_at.c 8 Jul 2005 15:36:23 -0000
@@ -100,8 +100,19 @@
octstr_get_cstr(privdata->name));
at2_close_device(privdata);
}
- privdata->fd = open(octstr_get_cstr(privdata->device),
- O_RDWR | O_NONBLOCK | O_NOCTTY);
+
+ if( privdata->is_serial ) {
+ privdata->fd = open(octstr_get_cstr(privdata->device),
+ O_RDWR | O_NONBLOCK | O_NOCTTY);
+ }
+ else {
+ if (strcmp(octstr_get_cstr(privdata->device), "rawtcp") == 0) {
+ privdata->fd = tcpip_connect_to_server(octstr_get_cstr(privdata->rawtcp_host),privdata->rawtcp_port, NULL);
don't use strcmp. you can use octstr_str_compare or
octstr_str_case_compare.
+ }
+ else {
+ gw_assert(0);
+ }
+ }
if (privdata->fd == -1) {
error(errno, "AT2[%s]: open failed! ERRNO=%d",
octstr_get_cstr(privdata->name), errno);
privdata->fd = -1;
@@ -121,6 +132,9 @@
if ((ret = at2_open_device1(privdata)) != 0)
return ret;
+ if(! privdata->is_serial)
+ return 0;
+
tcgetattr(privdata->fd, &tios);
kannel_cfmakeraw(&tios);
@@ -1002,6 +1016,9 @@
int ret;
int speed;
+ if(! privdata->is_serial)
+ return;
+
tcgetattr(privdata->fd, &tios);
switch (bps) {
@@ -1277,6 +1294,7 @@
{
PrivAT2data *privdata;
Octstr *modem_type_string;
+ long portno; /* has to be long because of cfg_get_integer */
privdata = gw_malloc(sizeof(PrivAT2data));
privdata->outgoing_queue = gw_prioqueue_create(sms_priority_compare);
@@ -1289,6 +1307,23 @@
error(0, "AT2[-]: 'device' missing in at2 configuration.");
goto error;
}
+ if (strcmp(octstr_get_cstr(privdata->device), "rawtcp") == 0) {
ditto, no strcmp please.
+ privdata->rawtcp_host = cfg_get(cfg, octstr_imm("rawtcp-host"));
+ if (privdata->rawtcp_host == NULL) {
+ error(0, "AT2[-]: 'rawtcp-host' missing in at2 configuration.");
+ goto error;
+ }
+
+ if (cfg_get_integer(&portno, cfg, octstr_imm("rawtcp-port")) == -1) {
+ error(0, "AT2[-]: 'rawtcp-port' missing in at2 configuration.");
+ goto error;
+ }
why do you introduce new config variables? why not just reuse already
available 'host'/'port'?
+ privdata->rawtcp_port = portno;
+ privdata->is_serial = 0;
+ }
+ else {
+ privdata->is_serial = 1;
+ }
privdata->name = cfg_get(cfg, octstr_imm("smsc-id"));
if (privdata->name == NULL) {
Index: gw/smsc/smsc_at.h
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_at.h,v
retrieving revision 1.9
diff -u -r1.9 smsc_at.h
--- gw/smsc/smsc_at.h 11 Feb 2005 15:35:48 -0000 1.9
+++ gw/smsc/smsc_at.h 8 Jul 2005 15:36:23 -0000
@@ -140,6 +140,9 @@
int sms_memory_usage;
List *pending_incoming_messages;
int max_error_count;
+ Octstr *rawtcp_host;
+ int rawtcp_port;
+ int is_serial; /* false if device is rawtcp */
} PrivAT2data;
Index: gwlib/cfg.def
===================================================================
RCS file: /home/cvs/gateway/gwlib/cfg.def,v
retrieving revision 1.111
diff -u -r1.111 cfg.def
--- gwlib/cfg.def 14 Apr 2005 11:58:57 -0000 1.111
+++ gwlib/cfg.def 8 Jul 2005 15:36:23 -0000
@@ -362,6 +362,8 @@
OCTSTR(denied-prefix-regex)
OCTSTR(preferred-prefix-regex)
OCTSTR(max-error-count)
+ OCTSTR(rawtcp-host)
+ OCTSTR(rawtcp-port)
)