---
src/emulator.c | 49 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 39 insertions(+), 10 deletions(-)
diff --git a/src/emulator.c b/src/emulator.c
index 9055909..d6b2b1b 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <string.h>
+#include <unistd.h>
#include <glib.h>
@@ -32,11 +33,7 @@
#include "common.h"
#include "gatserver.h"
#include "gatppp.h"
-
-#define DUN_SERVER_ADDRESS "192.168.1.1"
-#define DUN_PEER_ADDRESS "192.168.1.2"
-#define DUN_DNS_SERVER_1 "10.10.10.10"
-#define DUN_DNS_SERVER_2 "10.10.10.11"
+#include "private-network.h"
#define RING_TIMEOUT 3
@@ -55,6 +52,8 @@ struct ofono_emulator {
guint callsetup_source;
gboolean clip;
gboolean ccwa;
+ int pns_id;
+ struct ofono_private_network_settings *pns;
};
struct indicator {
@@ -99,6 +98,11 @@ static void ppp_disconnect(GAtPPPDisconnectReason reason, gpointer
user_data)
g_at_ppp_unref(em->ppp);
em->ppp = NULL;
+ if (em->pns_id > 0)
+ __ofono_private_network_release(em->pns_id);
+
+ em->pns_id = -1;
+
if (em->server == NULL)
return;
@@ -118,14 +122,19 @@ static gboolean setup_ppp(gpointer user_data)
g_at_server_suspend(em->server);
- em->ppp = g_at_ppp_server_new_from_io(io, DUN_SERVER_ADDRESS);
+ em->ppp = g_at_ppp_server_new_full(io, em->pns->server_ip, em->pns->fd);
if (em->ppp == NULL) {
+ close(em->pns->fd);
+ if (em->pns_id > 0)
+ __ofono_private_network_release(em->pns_id);
+ em->pns_id = -1;
g_at_server_resume(em->server);
return FALSE;
}
- g_at_ppp_set_server_info(em->ppp, DUN_PEER_ADDRESS,
- DUN_DNS_SERVER_1, DUN_DNS_SERVER_2);
+ g_at_ppp_set_server_info(em->ppp, em->pns->peer_ip,
+ em->pns->primary_dns,
+ em->pns->secondary_dns);
g_at_ppp_set_credentials(em->ppp, "", "");
g_at_ppp_set_debug(em->ppp, emulator_debug, "PPP");
@@ -136,6 +145,24 @@ static gboolean setup_ppp(gpointer user_data)
return FALSE;
}
+static gboolean setup_ppp_cb(void *data,
+ struct ofono_private_network_settings *pns)
+{
+ struct ofono_emulator *em = data;
+
+ if (pns == NULL) {
+ __ofono_private_network_release(em->pns_id);
+ g_at_server_send_final(em->server, G_AT_SERVER_RESULT_ERROR);
+ return FALSE;
+ }
+
+ em->pns = pns;
+ g_at_server_send_intermediate(em->server, "CONNECT");
+ em->source = g_idle_add(setup_ppp, em);
+
+ return TRUE;
+}
+
static gboolean dial_call(struct ofono_emulator *em, const char *dial_str)
{
char c = *dial_str;
@@ -143,8 +170,9 @@ static gboolean dial_call(struct ofono_emulator *em, const char
*dial_str)
DBG("dial call %s", dial_str);
if (c == '*' || c == '#' || c == 'T' || c == 't') {
- g_at_server_send_intermediate(em->server, "CONNECT");
- em->source = g_idle_add(setup_ppp, em);
+ if (__ofono_private_network_request(setup_ppp_cb, em,
+ &em->pns_id) == FALSE)
+ return FALSE;
}
return TRUE;
@@ -707,6 +735,7 @@ struct ofono_emulator *ofono_emulator_create(struct ofono_modem
*modem,
/* TODO: Check real local features */
em->l_features = 32;
em->events_mode = 3; /* default mode is forwarding events */
+ em->pns_id = -1;
em->atom = __ofono_modem_add_atom_offline(modem, atom_t,
emulator_remove, em);
--
1.7.1