* [PATCH 0/3] gprs-provision: Add SPN to provision API
@ 2011-02-08 10:03 Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 1/3] gprs-provision: add SPN to provisioning API header Jukka Saunamaki
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Jukka Saunamaki @ 2011-02-08 10:03 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 677 bytes --]
Hello
This patchset adds Service Provider Name (SPN) into GPRS context provisioning API.
SPN is read (asynchronously) in the middle of gprs atom registration, if provisioning is needed.
--Jukka
Jukka Saunamaki (3):
gprs-provision: add SPN to provisioning API header
gprs,gprs-provision: add SPN to provisioning API
gprs-provision: update example with SPN
examples/provision.c | 8 +++--
include/gprs-provision.h | 2 +-
src/gprs-provision.c | 4 +-
src/gprs.c | 87 ++++++++++++++++++++++++++++++++++-----------
src/ofono.h | 2 +-
5 files changed, 74 insertions(+), 29 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] gprs-provision: add SPN to provisioning API header
2011-02-08 10:03 [PATCH 0/3] gprs-provision: Add SPN to provision API Jukka Saunamaki
@ 2011-02-08 10:03 ` Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 2/3] gprs,gprs-provision: add SPN to provisioning API Jukka Saunamaki
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Jukka Saunamaki @ 2011-02-08 10:03 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 607 bytes --]
---
include/gprs-provision.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/gprs-provision.h b/include/gprs-provision.h
index bc021a8..e9eec61 100644
--- a/include/gprs-provision.h
+++ b/include/gprs-provision.h
@@ -42,7 +42,7 @@ struct ofono_gprs_provision_data {
struct ofono_gprs_provision_driver {
const char *name;
int priority;
- int (*get_settings)(const char *mcc, const char *mnc,
+ int (*get_settings)(const char *mcc, const char *mnc, const char *spn,
struct ofono_gprs_provision_data **settings,
int *count);
};
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] gprs,gprs-provision: add SPN to provisioning API
2011-02-08 10:03 [PATCH 0/3] gprs-provision: Add SPN to provision API Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 1/3] gprs-provision: add SPN to provisioning API header Jukka Saunamaki
@ 2011-02-08 10:03 ` Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 3/3] gprs-provision: update example with SPN Jukka Saunamaki
2011-02-09 3:58 ` [PATCH 0/3] gprs-provision: Add SPN to provision API Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Jukka Saunamaki @ 2011-02-08 10:03 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 5986 bytes --]
---
src/gprs-provision.c | 4 +-
src/gprs.c | 87 +++++++++++++++++++++++++++++++++++++------------
src/ofono.h | 2 +-
3 files changed, 68 insertions(+), 25 deletions(-)
diff --git a/src/gprs-provision.c b/src/gprs-provision.c
index 3cd84e8..011d5a8 100644
--- a/src/gprs-provision.c
+++ b/src/gprs-provision.c
@@ -48,7 +48,7 @@ void __ofono_gprs_provision_free_settings(
}
ofono_bool_t __ofono_gprs_provision_get_settings(const char *mcc,
- const char *mnc,
+ const char *mnc, const char *spn,
struct ofono_gprs_provision_data **settings,
int *count)
{
@@ -65,7 +65,7 @@ ofono_bool_t __ofono_gprs_provision_get_settings(const char *mcc,
DBG("Calling provisioning plugin '%s'", driver->name);
- if (driver->get_settings(mcc, mnc, settings, count) < 0)
+ if (driver->get_settings(mcc, mnc, spn, settings, count) < 0)
continue;
return TRUE;
diff --git a/src/gprs.c b/src/gprs.c
index 5ea864c..bb1b173 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -97,6 +97,7 @@ struct ofono_gprs {
const struct ofono_gprs_driver *driver;
void *driver_data;
struct ofono_atom *atom;
+ struct ofono_sim_context *sim_context;
};
struct ofono_gprs_context {
@@ -2291,6 +2292,9 @@ static void gprs_remove(struct ofono_atom *atom)
if (gprs->driver && gprs->driver->remove)
gprs->driver->remove(gprs);
+ if (gprs->sim_context)
+ ofono_sim_context_free(gprs->sim_context);
+
g_free(gprs);
}
@@ -2627,14 +2631,14 @@ static void provision_context(const struct ofono_gprs_provision_data *ap,
gprs->contexts = g_slist_append(gprs->contexts, context);
}
-static void provision_contexts(struct ofono_gprs *gprs, struct ofono_sim *sim)
+static void provision_contexts(struct ofono_gprs *gprs, const char *mcc,
+ const char *mnc, const char *spn)
{
struct ofono_gprs_provision_data *settings;
int count;
int i;
- if (__ofono_gprs_provision_get_settings(ofono_sim_get_mcc(sim),
- ofono_sim_get_mnc(sim),
+ if (__ofono_gprs_provision_get_settings(mcc, mnc, spn,
&settings, &count) == FALSE) {
ofono_warn("Provisioning failed");
return;
@@ -2646,13 +2650,15 @@ static void provision_contexts(struct ofono_gprs *gprs, struct ofono_sim *sim)
__ofono_gprs_provision_free_settings(settings, count);
}
-void ofono_gprs_register(struct ofono_gprs *gprs)
+static void ofono_gprs_finish_register(struct ofono_gprs *gprs)
{
DBusConnection *conn = ofono_dbus_get_connection();
struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
const char *path = __ofono_atom_get_path(gprs->atom);
struct ofono_atom *netreg_atom;
- struct ofono_atom *sim_atom;
+
+ if (gprs->contexts == NULL) /* Automatic provisioning failed */
+ add_context(gprs, NULL, OFONO_GPRS_CONTEXT_TYPE_INTERNET);
if (!g_dbus_register_interface(conn, path,
OFONO_CONNECTION_MANAGER_INTERFACE,
@@ -2661,29 +2667,13 @@ void ofono_gprs_register(struct ofono_gprs *gprs)
ofono_error("Could not create %s interface",
OFONO_CONNECTION_MANAGER_INTERFACE);
+ gprs_unregister(gprs->atom);
return;
}
ofono_modem_add_interface(modem,
OFONO_CONNECTION_MANAGER_INTERFACE);
- sim_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
-
- if (sim_atom) {
- const char *imsi;
- struct ofono_sim *sim = __ofono_atom_get_data(sim_atom);
-
- imsi = ofono_sim_get_imsi(sim);
- gprs_load_settings(gprs, imsi);
-
- if (gprs->contexts == NULL)
- provision_contexts(gprs, sim);
-
- }
-
- if (gprs->contexts == NULL)
- add_context(gprs, NULL, OFONO_GPRS_CONTEXT_TYPE_INTERNET);
-
gprs->netreg_watch = __ofono_modem_add_atom_watch(modem,
OFONO_ATOM_TYPE_NETREG,
netreg_watch, gprs, NULL);
@@ -2697,6 +2687,59 @@ void ofono_gprs_register(struct ofono_gprs *gprs)
__ofono_atom_register(gprs->atom, gprs_unregister);
}
+static void sim_spn_read_cb(int ok, int length, int record,
+ const unsigned char *data,
+ int record_length, void *userdata)
+{
+ struct ofono_gprs *gprs = userdata;
+ char *spn = NULL;
+ struct ofono_atom *sim_atom;
+ struct ofono_sim *sim = NULL;
+
+ if (ok)
+ spn = sim_string_to_utf8(data + 1, length - 1);
+
+ sim_atom = __ofono_modem_find_atom(__ofono_atom_get_modem(gprs->atom),
+ OFONO_ATOM_TYPE_SIM);
+ if (sim_atom) {
+ sim = __ofono_atom_get_data(sim_atom);
+ provision_contexts(gprs, ofono_sim_get_mcc(sim),
+ ofono_sim_get_mnc(sim), spn);
+ }
+
+ g_free(spn);
+ ofono_gprs_finish_register(gprs);
+}
+
+void ofono_gprs_register(struct ofono_gprs *gprs)
+{
+ struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
+ struct ofono_atom *sim_atom;
+ struct ofono_sim *sim = NULL;
+
+ sim_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
+
+ if (sim_atom) {
+ const char *imsi;
+ sim = __ofono_atom_get_data(sim_atom);
+
+ imsi = ofono_sim_get_imsi(sim);
+ gprs_load_settings(gprs, imsi);
+ }
+
+ if (gprs->contexts == NULL && sim != NULL) {
+ /* Get Service Provider Name from SIM for provisioning */
+ gprs->sim_context = ofono_sim_context_create(sim);
+
+ if (ofono_sim_read(gprs->sim_context, SIM_EFSPN_FILEID,
+ OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
+ sim_spn_read_cb, gprs) >= 0)
+ return;
+ }
+
+ ofono_gprs_finish_register(gprs);
+}
+
void ofono_gprs_remove(struct ofono_gprs *gprs)
{
__ofono_atom_free(gprs->atom);
diff --git a/src/ofono.h b/src/ofono.h
index 6ba0187..0cdebf7 100644
--- a/src/ofono.h
+++ b/src/ofono.h
@@ -424,7 +424,7 @@ void __ofono_nettime_info_received(struct ofono_modem *modem,
#include <ofono/gprs-provision.h>
ofono_bool_t __ofono_gprs_provision_get_settings(const char *mcc,
- const char *mnc,
+ const char *mnc, const char *spn,
struct ofono_gprs_provision_data **settings,
int *count);
void __ofono_gprs_provision_free_settings(
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] gprs-provision: update example with SPN
2011-02-08 10:03 [PATCH 0/3] gprs-provision: Add SPN to provision API Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 1/3] gprs-provision: add SPN to provisioning API header Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 2/3] gprs,gprs-provision: add SPN to provisioning API Jukka Saunamaki
@ 2011-02-08 10:03 ` Jukka Saunamaki
2011-02-09 3:58 ` [PATCH 0/3] gprs-provision: Add SPN to provision API Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Jukka Saunamaki @ 2011-02-08 10:03 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1005 bytes --]
---
examples/provision.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/examples/provision.c b/examples/provision.c
index 356b0b3..546a161 100644
--- a/examples/provision.c
+++ b/examples/provision.c
@@ -37,6 +37,7 @@
#include <ofono/log.h>
static int example_provision_get_settings(const char *mcc, const char *mnc,
+ const char *spn,
struct ofono_gprs_provision_data **settings,
int *count)
{
@@ -44,10 +45,11 @@ static int example_provision_get_settings(const char *mcc, const char *mnc,
*count = 0;
*settings = NULL;
- ofono_debug("Finding settings for MCC %s, MNC %s",
- mcc, mnc);
+ ofono_debug("Finding settings for MCC %s, MNC %s, SPN '%s'",
+ mcc, mnc, spn);
- if (strcmp(mcc, "246") != 0 || strcmp(mnc, "81") != 0)
+ if (strcmp(mcc, "246") != 0 || strcmp(mnc, "81") != 0 ||
+ strcmp(spn, "oFono") != 0)
return -ENOENT;
ofono_debug("Creating example settings for phonesim");
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/3] gprs-provision: Add SPN to provision API
2011-02-08 10:03 [PATCH 0/3] gprs-provision: Add SPN to provision API Jukka Saunamaki
` (2 preceding siblings ...)
2011-02-08 10:03 ` [PATCH 3/3] gprs-provision: update example with SPN Jukka Saunamaki
@ 2011-02-09 3:58 ` Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2011-02-09 3:58 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 932 bytes --]
Hi Jukka,
On 02/08/2011 04:03 AM, Jukka Saunamaki wrote:
> Hello
>
> This patchset adds Service Provider Name (SPN) into GPRS context provisioning API.
> SPN is read (asynchronously) in the middle of gprs atom registration, if provisioning is needed.
>
> --Jukka
>
> Jukka Saunamaki (3):
> gprs-provision: add SPN to provisioning API header
> gprs,gprs-provision: add SPN to provisioning API
> gprs-provision: update example with SPN
>
> examples/provision.c | 8 +++--
> include/gprs-provision.h | 2 +-
> src/gprs-provision.c | 4 +-
> src/gprs.c | 87 ++++++++++++++++++++++++++++++++++-----------
> src/ofono.h | 2 +-
> 5 files changed, 74 insertions(+), 29 deletions(-)
All patches in this series have been applied, however I made one small
fix after patch 2. Let me know if I broke anything by any chance.
Regards,
-Denis
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-02-09 3:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-08 10:03 [PATCH 0/3] gprs-provision: Add SPN to provision API Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 1/3] gprs-provision: add SPN to provisioning API header Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 2/3] gprs,gprs-provision: add SPN to provisioning API Jukka Saunamaki
2011-02-08 10:03 ` [PATCH 3/3] gprs-provision: update example with SPN Jukka Saunamaki
2011-02-09 3:58 ` [PATCH 0/3] gprs-provision: Add SPN to provision API Denis Kenzior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.