diff options
author | Kristen Carlson Accardi <kristen@linux.intel.com> | 2010-04-02 16:45:24 -0700 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-04-02 19:03:56 -0500 |
commit | 3c3077f84716251b2fde90f4b0c914a029e4fc93 (patch) | |
tree | aa7b46cd994aaede1e1e68da8b9eb46ae66a7797 /gatchat/ppp_net.c | |
parent | ebc6e3b9dca6ce4c9d218423228b0bf710ab7454 (diff) | |
download | ofono-3c3077f84716251b2fde90f4b0c914a029e4fc93.tar.bz2 |
ppp: implement net close
Diffstat (limited to 'gatchat/ppp_net.c')
-rw-r--r-- | gatchat/ppp_net.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gatchat/ppp_net.c b/gatchat/ppp_net.c index f59cbbc6..04cbf7f8 100644 --- a/gatchat/ppp_net.c +++ b/gatchat/ppp_net.c @@ -64,8 +64,6 @@ void ppp_net_process_packet(struct ppp_net_data *data, guint8 *packet) /* * packets received by the tun interface need to be written to * the modem. So, just read a packet, write out to the modem - * - * TBD - how do we know we have a full packet? Do we care? */ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond, gpointer userdata) @@ -77,6 +75,9 @@ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond, struct ppp_header *ppp = (struct ppp_header *) buf; struct ppp_net_data *data = (struct ppp_net_data *) userdata; + if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) + return FALSE; + if (cond & G_IO_IN) { /* leave space to add PPP protocol field */ status = g_io_channel_read_chars(channel, buf + 2, MAX_PACKET, @@ -93,7 +94,8 @@ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond, void ppp_net_close(struct ppp_net_data *data) { - /* Not Implemented Yet */ + g_source_remove(data->watch); + g_io_channel_unref(data->channel); } void ppp_net_open(struct ppp_net_data *data) @@ -101,7 +103,6 @@ void ppp_net_open(struct ppp_net_data *data) int fd; struct ifreq ifr; GIOChannel *channel; - int signal_source; int err; if (data == NULL) @@ -138,7 +139,7 @@ void ppp_net_open(struct ppp_net_data *data) } data->channel = channel; g_io_channel_set_buffered(channel, FALSE); - signal_source = g_io_add_watch(channel, + data->watch = g_io_add_watch(channel, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, ppp_net_callback, (gpointer) data); } |