On 02/21/2012 09:20 AM, Jussi Kukkonen wrote:
I'm looking at how I'm creating and using internet contexts to make
sure I'm not missing any problem cases, and I feel like I don't have
much feedback on what is happening and what possibly scenarios I
should be ready for. Dennis explained the ConnectionManager "life
time" last week which helped a lot (thanks) but I'm still struggling.
I've listed some steps that may happen from user/GUI point of view and
the questions I have (some are connman related but I think this is
still the better list):
* Modem with ConnectionManager appears
A ConnectionContext may have been created automatically or not. Under
what circumstances does this happen? E.g. If the mobile broadband db
contains several plans for a MNC/MCC does ofono try them until one
works or is the selection left to user? Are there checks to make sure
the created context is valid for the network?
Actually this is really rather straight forward.
1. oFono obtains the IMSI from the Sim Card, this is a unique identifier
of the subscriber.
2. If the IMSI has not been seen before (e.g. a new never before sim
card is inserted) proceed to step 2a.
2a. oFono obtains MCC/MNC & SPN from the SIM file system, and asks any
provisioning plugins to provide context information. The contract
between the provisioning plugin and oFono is that the information
provided must be unique. E.g. if there are any conflicts, or multiple
matches for a given mcc/mnc/spn then provisioning should fail.
Successful provisioning results in a set of contexts being created
before ConnectionManager interface is registered.
2b. If provisioning fails or mcc/mnc information is not known (e.g.
inadequate modem driver support) then a single, default, empty context
3. If the IMSI has been seen before, then any contexts created
previously are loaded from the IMSI-keyed storage. This includes the
unprovisioned 'default, empty context' if it hasn't been provisioned
So to sum up, from a UI point of view, you only need to care about
provisioning if the UI detects a single, empty context of type
'internet' with empty APN/username/password.
And no, there is absolutely no way to know whether a given context
settings are valid, but a good indication would be that a context
* If a ConnectionContext does not appear, UI/user may create one.
using ConnectionManager.AddContext() and
Are there checks at this point to ensure that the created context is
valid and should work? If not, is there anythign I can do to check
* Connman exposes a cellular service
What are the conditions for this to happen? If connman exposes a
service, should that "Just work" (with normal caveats about internet
connections) or does it appear for any context that has been created?
Connman only cares about internet contexts, and its services are
populated from the same ConnectionManager context list. There are no
further filtering rules other than the context type.
* Finally, user can connect the cellular service exposed by connman
If the connection with a cellular service fails, is there anything
else than "Error=connect-failed" to work with? What are the potential
not at this time
reasons for this -- is it just the normal issues with any network
connection, or can e.g. broken APN settings be a reason for failure at
Yes, broken APN settings can and do cause connection failures.
In case background helps to understand it, this uncertainty came to be
from two issues (possibly related ones):
1. a tester is telling me nothing happens when he selects his plan
using dawati networks panel (ofono is 1.0 so automatic context
creation does not work), in other words the service isn't appearing in
connman. Now, I know how to start digging to the specific problem in
this case, but I'd like to make sure I'm handling all the relevant
error cases... What are the possible points of failure in this? Is it
just the method calls in ConnectionManager and ConnectionContext plus
Connman Service.Error after trying to connect to the service?
If the service isn't appearing, then likely the context is not being
2. I've been testing ofono 1.4 and it seems I can succesfully
context with any values of APN/username/password and a connman service
will appear. Is this supposed to happen? (Calling Connect() on this
service will timeout and in the end set "Error=connect-failed", which
is to be expected)
Yes, this is supposed to happen. It is rather unfortunate that the user
has to know this information, however at this time we have not heard /
seen any standard for provisioning context settings other than the
widely used approach of consulting an external database. This approach
still requires user intervention a lot of times due to varying carrier