From 12d97c18a0517013562b7286b7fefa5eabc32ec8 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 18 Mar 2010 16:05:01 -0500 Subject: Add support for IP based connections to gsmdial --- gatchat/gsmdial.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'gatchat/gsmdial.c') diff --git a/gatchat/gsmdial.c b/gatchat/gsmdial.c index e6028e0a..2087e706 100644 --- a/gatchat/gsmdial.c +++ b/gatchat/gsmdial.c @@ -29,6 +29,9 @@ #include #include #include +#include +#include +#include #include #include @@ -388,6 +391,49 @@ static int open_serial() return 0; } +static int open_ip() +{ + int sk, err; + struct sockaddr_in addr; + GAtSyntax *syntax; + GIOChannel *channel; + + sk = socket(PF_INET, SOCK_STREAM, 0); + if (sk < 0) + return -EINVAL; + + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(option_ip); + addr.sin_port = htons(option_port); + + err = connect(sk, (struct sockaddr *) &addr, sizeof(addr)); + if (err < 0) { + close(sk); + return err; + } + + channel = g_io_channel_unix_new(sk); + if (channel == NULL) { + close(sk); + return -ENOMEM; + } + + syntax = g_at_syntax_new_gsmv1(); + control = g_at_chat_new(channel, syntax); + g_io_channel_unref(channel); + g_at_syntax_unref(syntax); + + if (control == NULL) + return -ENOMEM; + + g_at_chat_ref(control); + modem = control; + g_at_chat_set_debug(control, gsmdial_debug, ""); + + return 0; +} + static GOptionEntry options[] = { { "ip", 'i', 0, G_OPTION_ARG_STRING, &option_ip, "Specify IP" }, @@ -448,11 +494,15 @@ int main(int argc, char **argv) if (ret < 0) goto out; } else { + int ret; + g_print("IP: %s\n", option_ip); g_print("Port: %d\n", option_port); + ret = open_ip(); g_free(option_ip); - goto out; + if (ret < 0) + goto out; } g_print("APN: %s\n", option_apn); -- cgit v1.2.3