Hi Oleg,
<snip>
+static int gprs_provision(const char *mcc, const char *mnc,
+ const char *spn,
+ struct ofono_gprs_provision_data **settings,
+ int *count)
+{
+ int i;
+ struct parser_data *data;
+ *settings = NULL;
+
+ DBG("Provisioning for MCC %s, MNC %s, SPN '%s'",
+ mcc, mnc, spn);
+
+ data = g_try_new0(struct parser_data, 1);
+ if (data == NULL)
+ return -ENOMEM;
+
+ lookup_apn(mcc, mnc, NULL, data);
What I wonder is what is the overhead of the XML parser right now (e.g.
how long it takes on reasonable embedded hardware). If this takes a
while, then it might be better to pre-parse the mobile-provider-info db
during plugin initialization and not every time gprs_provision is
called. Otherwise we run the risk of hanging the daemon while the
provision settings are being looked up.
+
+ *count = data->count;
+
+ DBG("settings count: %d", *count);
+
+ if (!*count) {
+ g_free(data);
+ return -ENOENT;
+ }
+
+ *settings = g_try_new0(struct ofono_gprs_provision_data, *count);
+ if (*settings == NULL)
+ return -ENOMEM;
+
+ for (i = 0; i < *count; i++) {
+ (*settings)[i] = *(data->settings[i]);
+
+ (*settings)[i].proto = OFONO_GPRS_PROTO_IP;
+ (*settings)[i].type = OFONO_GPRS_CONTEXT_TYPE_INTERNET;
+
+ DBG("Name: %s", (*settings)[i].name);
+ DBG("APN: %s", (*settings)[i].apn);
+ DBG("Username: %s", (*settings)[i].username);
+ DBG("Password: %s", (*settings)[i].password);
+ }
+
+ g_free(data);
+
+ return 0;
+}
+
<snip>
Regards,
-Denis