summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gatchat/gatppp.c39
-rw-r--r--gatchat/gatppp.h3
2 files changed, 34 insertions, 8 deletions
diff --git a/gatchat/gatppp.c b/gatchat/gatppp.c
index 2446d4e3..4205a795 100644
--- a/gatchat/gatppp.c
+++ b/gatchat/gatppp.c
@@ -396,7 +396,7 @@ void g_at_ppp_unref(GAtPPP *ppp)
g_free(ppp);
}
-GAtPPP *g_at_ppp_new(GIOChannel *modem)
+static GAtPPP *ppp_init_common(GAtHDLC *hdlc)
{
GAtPPP *ppp;
@@ -404,12 +404,7 @@ GAtPPP *g_at_ppp_new(GIOChannel *modem)
if (!ppp)
return NULL;
- ppp->hdlc = g_at_hdlc_new(modem);
-
- if (ppp->hdlc == NULL) {
- g_free(ppp);
- return NULL;
- }
+ ppp->hdlc = g_at_hdlc_ref(hdlc);
ppp->ref_count = 1;
@@ -429,3 +424,33 @@ GAtPPP *g_at_ppp_new(GIOChannel *modem)
return ppp;
}
+
+GAtPPP *g_at_ppp_new(GIOChannel *modem)
+{
+ GAtHDLC *hdlc;
+ GAtPPP *ppp;
+
+ hdlc = g_at_hdlc_new(modem);
+ if (hdlc == NULL)
+ return NULL;
+
+ ppp = ppp_init_common(hdlc);
+ g_at_hdlc_unref(hdlc);
+
+ return ppp;
+}
+
+GAtPPP *g_at_ppp_new_from_io(GAtIO *io)
+{
+ GAtHDLC *hdlc;
+ GAtPPP *ppp;
+
+ hdlc = g_at_hdlc_new_from_io(io);
+ if (hdlc == NULL)
+ return NULL;
+
+ ppp = ppp_init_common(hdlc);
+ g_at_hdlc_unref(hdlc);
+
+ return ppp;
+}
diff --git a/gatchat/gatppp.h b/gatchat/gatppp.h
index a9252378..7631fe58 100644
--- a/gatchat/gatppp.h
+++ b/gatchat/gatppp.h
@@ -43,7 +43,8 @@ typedef void (*GAtPPPConnectFunc)(GAtPPPConnectStatus success,
const char *dns1, const char *dns2,
gpointer user_data);
-GAtPPP * g_at_ppp_new(GIOChannel *modem);
+GAtPPP *g_at_ppp_new(GIOChannel *modem);
+GAtPPP *g_at_ppp_new_from_io(GAtIO *io);
void g_at_ppp_open(GAtPPP *ppp);
void g_at_ppp_set_connect_function(GAtPPP *ppp, GAtPPPConnectFunc callback,
gpointer user_data);