summaryrefslogtreecommitdiffstats
path: root/gatchat/ppp_net.c
diff options
context:
space:
mode:
authorKristen Carlson Accardi <kristen@linux.intel.com>2010-04-02 16:45:24 -0700
committerDenis Kenzior <denkenz@gmail.com>2010-04-02 19:03:56 -0500
commit3c3077f84716251b2fde90f4b0c914a029e4fc93 (patch)
treeaa7b46cd994aaede1e1e68da8b9eb46ae66a7797 /gatchat/ppp_net.c
parentebc6e3b9dca6ce4c9d218423228b0bf710ab7454 (diff)
downloadofono-3c3077f84716251b2fde90f4b0c914a029e4fc93.tar.bz2
ppp: implement net close
Diffstat (limited to 'gatchat/ppp_net.c')
-rw-r--r--gatchat/ppp_net.c11
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);
}