diff options
author | Guillaume Zajac <guillaume.zajac@linux.intel.com> | 2011-05-04 17:39:01 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-05-08 23:03:22 -0500 |
commit | f1cbb783fc571f68c079c7d97f88278ea5b11af2 (patch) | |
tree | 5fa367c4cf5185ba1bcd9d92d868c66868ff619e /gatchat/gatppp.c | |
parent | d48c3091512f794a40e175038125bb56b78de1a7 (diff) | |
download | ofono-f1cbb783fc571f68c079c7d97f88278ea5b11af2.tar.bz2 |
gatppp: Add API for setting suspend callback
In situations where the PPP stream can be suspended by the peer, e.g. in
the server role using '+++'
Diffstat (limited to 'gatchat/gatppp.c')
-rw-r--r-- | gatchat/gatppp.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gatchat/gatppp.c b/gatchat/gatppp.c index 993b5ea2..c7768118 100644 --- a/gatchat/gatppp.c +++ b/gatchat/gatppp.c @@ -76,6 +76,8 @@ struct _GAtPPP { gpointer debug_data; gboolean sta_pending; guint ppp_dead_source; + GAtSuspendFunc suspend_func; + gpointer suspend_data; }; void ppp_debug(GAtPPP *ppp, const char *str) @@ -467,6 +469,28 @@ void g_at_ppp_set_debug(GAtPPP *ppp, GAtDebugFunc func, gpointer user_data) ppp->debug_data = user_data; } +static void ppp_proxy_suspend_net_interface(gpointer user_data) +{ + GAtPPP *ppp = user_data; + + ppp_net_suspend_interface(ppp->net); + + if (ppp->suspend_func) + ppp->suspend_func(ppp->suspend_data); +} + +void g_at_ppp_set_suspend_function(GAtPPP *ppp, GAtSuspendFunc func, + gpointer user_data) +{ + if (ppp == NULL) + return; + + ppp->suspend_func = func; + ppp->suspend_data = user_data; + g_at_hdlc_set_suspend_function(ppp->hdlc, + ppp_proxy_suspend_net_interface, ppp); +} + void g_at_ppp_shutdown(GAtPPP *ppp) { if (ppp->phase == PPP_PHASE_DEAD || ppp->phase == PPP_PHASE_TERMINATION) |