From 42bed7b16a63e8601385388a552fcf317daa8c72 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Sun, 22 May 2011 08:10:09 -0500 Subject: emulator: Update to the new GAtPPP API --- src/emulator.c | 93 +++++++++++++++++----------------------------------------- 1 file changed, 27 insertions(+), 66 deletions(-) (limited to 'src/emulator.c') diff --git a/src/emulator.c b/src/emulator.c index 70d6037f..de9921ac 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -42,7 +42,6 @@ struct ofono_emulator { enum ofono_emulator_type type; GAtServer *server; GAtPPP *ppp; - guint source; gboolean slc; int l_features; int r_features; @@ -54,7 +53,6 @@ struct ofono_emulator { gboolean clip; gboolean ccwa; int pns_id; - struct ofono_private_network_settings *local_pns; }; struct indicator { @@ -90,29 +88,15 @@ static void ppp_connect(const char *iface, const char *local, DBG("Secondary DNS Server: %s\n", dns2); } -static void release_pns(struct ofono_emulator *em) +static void cleanup_ppp(struct ofono_emulator *em) { - g_free(em->local_pns->server_ip); - g_free(em->local_pns->peer_ip); - g_free(em->local_pns->primary_dns); - g_free(em->local_pns->secondary_dns); - g_free(em->local_pns); - - __ofono_private_network_release(em->pns_id); - em->pns_id = 0; -} - -static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data) -{ - struct ofono_emulator *em = user_data; - DBG(""); g_at_ppp_unref(em->ppp); em->ppp = NULL; - if (em->pns_id > 0) - release_pns(em); + __ofono_private_network_release(em->pns_id); + em->pns_id = 0; if (em->server == NULL) return; @@ -121,54 +105,31 @@ static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data) g_at_server_send_final(em->server, G_AT_SERVER_RESULT_NO_CARRIER); } -static void ppp_suspend(gpointer user_data) +static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer user_data) { struct ofono_emulator *em = user_data; - DBG(""); - - g_at_server_resume(em->server); + cleanup_ppp(em); } -static gboolean setup_ppp(gpointer user_data) +static void ppp_suspend(gpointer user_data) { struct ofono_emulator *em = user_data; - GAtIO *io; DBG(""); - em->source = 0; + g_at_server_resume(em->server); +} - io = g_at_server_get_io(em->server); +static void suspend_server(gpointer user_data) +{ + struct ofono_emulator *em = user_data; + GAtIO *io = g_at_server_get_io(em->server); g_at_server_suspend(em->server); - em->ppp = g_at_ppp_server_new_full(io, em->local_pns->server_ip, - em->local_pns->fd); - if (em->ppp == NULL) { - /* PPP stack hasn't closed fd */ - close(em->local_pns->fd); - if (em->pns_id > 0) - release_pns(em); - - g_at_server_resume(em->server); - g_at_server_send_final(em->server, - G_AT_SERVER_RESULT_NO_CARRIER); - return FALSE; - } - - g_at_ppp_set_server_info(em->ppp, em->local_pns->peer_ip, - em->local_pns->primary_dns, - em->local_pns->secondary_dns); - - g_at_ppp_set_credentials(em->ppp, "", ""); - g_at_ppp_set_debug(em->ppp, emulator_debug, "PPP"); - - g_at_ppp_set_connect_function(em->ppp, ppp_connect, em); - g_at_ppp_set_disconnect_function(em->ppp, ppp_disconnect, em); - g_at_ppp_set_suspend_function(em->ppp, ppp_suspend, em); - - return FALSE; + if (g_at_ppp_listen(em->ppp, io) == FALSE) + cleanup_ppp(em); } static void request_private_network_cb( @@ -176,24 +137,29 @@ static void request_private_network_cb( void *data) { struct ofono_emulator *em = data; + GAtIO *io = g_at_server_get_io(em->server); if (pns == NULL) goto error; - em->local_pns = g_try_new0(struct ofono_private_network_settings, 1); - if (em->local_pns == NULL) { + em->ppp = g_at_ppp_server_new_full(pns->server_ip, pns->fd); + if (em->ppp == NULL) { close(pns->fd); goto error; } - em->local_pns->fd = pns->fd; - em->local_pns->server_ip = g_strdup(pns->server_ip); - em->local_pns->peer_ip = g_strdup(pns->peer_ip); - em->local_pns->primary_dns = g_strdup(pns->primary_dns); - em->local_pns->secondary_dns = g_strdup(pns->secondary_dns); + g_at_ppp_set_server_info(em->ppp, pns->peer_ip, + pns->primary_dns, pns->secondary_dns); + + g_at_ppp_set_credentials(em->ppp, "", ""); + g_at_ppp_set_debug(em->ppp, emulator_debug, "PPP"); + + g_at_ppp_set_connect_function(em->ppp, ppp_connect, em); + g_at_ppp_set_disconnect_function(em->ppp, ppp_disconnect, em); + g_at_ppp_set_suspend_function(em->ppp, ppp_suspend, em); g_at_server_send_intermediate(em->server, "CONNECT"); - em->source = g_idle_add(setup_ppp, em); + g_at_io_set_write_done(io, suspend_server, em); return; @@ -760,11 +726,6 @@ static void emulator_unregister(struct ofono_atom *atom) DBG("%p", em); - if (em->source) { - g_source_remove(em->source); - em->source = 0; - } - if (em->callsetup_source) { g_source_remove(em->callsetup_source); em->callsetup_source = 0; -- cgit v1.2.3