ppp: Hide ppp_net definition in ppp_net.c
authorDenis Kenzior <denkenz@gmail.com>
Tue, 13 Apr 2010 19:42:59 +0000 (14:42 -0500)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 13 Apr 2010 19:42:59 +0000 (14:42 -0500)
gatchat/gatppp.c
gatchat/ppp.h
gatchat/ppp_net.c

index dab9367..b7c4cd3 100644 (file)
@@ -53,7 +53,7 @@ struct _GAtPPP {
        enum ppp_phase phase;
        struct pppcp_data *lcp;
        struct pppcp_data *ipcp;
-       struct ppp_net_data *net;
+       struct ppp_net *net;
        struct ppp_chap *chap;
        guint8 buffer[BUFFERSZ];
        int index;
@@ -91,7 +91,7 @@ void ppp_connect_cb(GAtPPP *ppp, GAtPPPConnectStatus success,
        if (ppp->connect_cb == NULL)
                return;
 
-       ppp->connect_cb(success, ppp->net->if_name,
+       ppp->connect_cb(success, ppp_net_get_interface(ppp->net),
                                ip, dns1, dns2,  ppp->connect_data);
 }
 
index 32542c9..9373242 100644 (file)
@@ -35,6 +35,7 @@ enum ppp_phase {
 };
 
 struct ppp_chap;
+struct ppp_net;
 
 struct ppp_header {
        guint16 proto;
@@ -73,13 +74,6 @@ static inline guint16 __get_unaligned_short(const void *p)
 #define ppp_proto(packet) \
        (get_host_short(packet + 2))
 
-struct ppp_net_data {
-       GAtPPP *ppp;
-       char *if_name;
-       GIOChannel *channel;
-       gint watch;
-};
-
 void ppp_debug(GAtPPP *ppp, const char *str);
 void ppp_enter_phase(GAtPPP *ppp, enum ppp_phase phase);
 void ppp_transmit(GAtPPP *ppp, guint8 *packet, guint infolen);
@@ -94,11 +88,6 @@ gboolean ppp_get_acfc(GAtPPP *ppp);
 struct pppcp_data * lcp_new(GAtPPP *ppp);
 void lcp_free(struct pppcp_data *lcp);
 void lcp_protocol_reject(struct pppcp_data *lcp, guint8 *packet, gsize len);
-struct ppp_net_data *ppp_net_new(GAtPPP *ppp);
-void ppp_net_open(struct ppp_net_data *data);
-void ppp_net_process_packet(struct ppp_net_data *data, guint8 *packet);
-void ppp_net_close(struct ppp_net_data *data);
-void ppp_net_free(struct ppp_net_data *data);
 struct pppcp_data *ipcp_new(GAtPPP *ppp);
 void ipcp_free(struct pppcp_data *data);
 void ppp_connect_cb(GAtPPP *ppp, GAtPPPConnectStatus success,
@@ -109,3 +98,10 @@ struct ppp_chap *ppp_chap_new(GAtPPP *ppp, guint8 method);
 void ppp_chap_free(struct ppp_chap *chap);
 void ppp_chap_process_packet(struct ppp_chap *chap, guint8 *new_packet);
 
+/* TUN / Network related functions */
+struct ppp_net *ppp_net_new(GAtPPP *ppp);
+void ppp_net_open(struct ppp_net *net);
+void ppp_net_process_packet(struct ppp_net *net, guint8 *packet);
+void ppp_net_close(struct ppp_net *net);
+void ppp_net_free(struct ppp_net *net);
+const char *ppp_net_get_interface(struct ppp_net *net);
index 04cbf7f..8b2fc8d 100644 (file)
 /* XXX should be maximum IP Packet size */
 #define MAX_PACKET 1500
 
-void ppp_net_process_packet(struct ppp_net_data *data, guint8 *packet)
+struct ppp_net {
+       GAtPPP *ppp;
+       char *if_name;
+       GIOChannel *channel;
+       gint watch;
+};
+
+void ppp_net_process_packet(struct ppp_net *net, guint8 *packet)
 {
        GError *error = NULL;
        GIOStatus status;
@@ -52,12 +59,12 @@ void ppp_net_process_packet(struct ppp_net_data *data, guint8 *packet)
         * since ppp_net_open can fail, we need to make sure
         * channel is valid
         */
-       if (data->channel == NULL)
+       if (net->channel == NULL)
                return;
 
        /* find the length of the packet to transmit */
        len = get_host_short(&packet[2]);
-       status = g_io_channel_write_chars(data->channel, (gchar *) packet,
+       status = g_io_channel_write_chars(net->channel, (gchar *) packet,
                                                len, &bytes_written, &error);
 }
 
@@ -68,12 +75,12 @@ void ppp_net_process_packet(struct ppp_net_data *data, guint8 *packet)
 static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond,
                                gpointer userdata)
 {
+       struct ppp_net *net = (struct ppp_net *) userdata;
        GIOStatus status;
        gchar buf[MAX_PACKET + 2];
        gsize bytes_read;
        GError *error = NULL;
        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;
@@ -84,7 +91,7 @@ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond,
                                &bytes_read, &error);
                if (bytes_read > 0) {
                        ppp->proto = htons(PPP_IP_PROTO);
-                       ppp_transmit(data->ppp, (guint8 *) buf, bytes_read);
+                       ppp_transmit(net->ppp, (guint8 *) buf, bytes_read);
                }
                if (status != G_IO_STATUS_NORMAL && status != G_IO_STATUS_AGAIN)
                        return FALSE;
@@ -92,20 +99,20 @@ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond,
        return TRUE;
 }
 
-void ppp_net_close(struct ppp_net_data *data)
+void ppp_net_close(struct ppp_net *net)
 {
-       g_source_remove(data->watch);
-       g_io_channel_unref(data->channel);
+       g_source_remove(net->watch);
+       g_io_channel_unref(net->channel);
 }
 
-void ppp_net_open(struct ppp_net_data *data)
+void ppp_net_open(struct ppp_net *net)
 {
        int fd;
        struct ifreq ifr;
        GIOChannel *channel;
        int err;
 
-       if (data == NULL)
+       if (net == NULL)
                return;
 
        /* open a tun interface */
@@ -124,7 +131,7 @@ void ppp_net_open(struct ppp_net_data *data)
                close(fd);
                return;
        }
-       data->if_name = strdup(ifr.ifr_name);
+       net->if_name = strdup(ifr.ifr_name);
 
        /* create a channel for reading and writing to this interface */
        channel = g_io_channel_unix_new(fd);
@@ -137,31 +144,36 @@ void ppp_net_open(struct ppp_net_data *data)
                g_io_channel_unref(channel);
                return;
        }
-       data->channel = channel;
+       net->channel = channel;
        g_io_channel_set_buffered(channel, FALSE);
-       data->watch = g_io_add_watch(channel,
+       net->watch = g_io_add_watch(channel,
                        G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
-                       ppp_net_callback, (gpointer) data);
+                       ppp_net_callback, net);
+}
+
+const char *ppp_net_get_interface(struct ppp_net *net)
+{
+       return net->if_name;
 }
 
-struct ppp_net_data *ppp_net_new(GAtPPP *ppp)
+struct ppp_net *ppp_net_new(GAtPPP *ppp)
 {
-       struct ppp_net_data *data;
+       struct ppp_net *net;
 
-       data = g_try_malloc0(sizeof(*data));
-       if (!data)
+       net = g_try_new0(struct ppp_net, 1);
+       if (net == NULL)
                return NULL;
 
-       data->ppp = ppp;
+       net->ppp = ppp;
 
-       return data;
+       return net;
 }
 
-void ppp_net_free(struct ppp_net_data *data)
+void ppp_net_free(struct ppp_net *net)
 {
        /* cleanup tun interface */
-       ppp_net_close(data);
+       ppp_net_close(net);
 
        /* free self */
-       g_free(data);
+       g_free(net);
 }