Re: ModemManager [PATCH 2/2] Take 3 of: Improvements to SIM PIN handling - Add EnabledFacilityLocks property



> > > > > I guess I don't have a problem with merging them, although strictly
> > > > > speaking they refer to different things - locks vs. the PINs needed to
> > > > > unlock those locks.
> > > > > 
> > > > Yeah, you're totally right... but at the end the PIN/PUK codes are
> > > > directly related to facilities. E.g "SIM facility", has "PIN code" and
> > > > "PUK code". But it really seems broken to use the enum of codes as index
> > > > for facilities, not the best idea.
> > > > > 
> > > > > Two other points to consider regarding lock/PIN handling in the new
> > > > > API:
> > > > >       * PIN, PUK, PIN2, and PUK2 are PINs for SIM locks. The rest are
> > > > >         device locks, so having them belong to the *.Sim interface
> > > > >         doesn't seem completely right. But 3gpp gloms them all
> > > > >         together, so maybe we should just live with this.
> > > > 
> > > > In the 0.6 API they are not handled in the SIM interface. UnlockRetries
> > > > and PinRetryCounts are handled in the Modem interface, along with
> > > > UnlockRequired; and the EnabledFacilityLocks one is handled in the 3GPP
> > > > interface. Anyway, I'm not very convinced yet, on why we do keep
> > > > EnabledFacilityLocks in one interface and
> > > > UnlockRetries/PinRetryCounts/UnlockRequired in another one. Shouldn't we
> > > > have all in the 3GPP-specific interface? Are there CDMA-only modems with
> > > > facility locks?
> > > 
> > > In Russia and Korea there's RUIMs which are basically SIMs for CDMA and
> > > aren't 3GPP at all.  They may use the same basic interfaces, but there's
> > > a lot of Qualcomm-iness in there.  I kept the PIN/Lock stuff on the
> > > Modem interface so that we could more easily support these types of
> > > devices in the future.
> > > 
> > 
> > I see, good to know.
> > 
> > > > >       * Shouldn't we add an argument to EnablePin and ChangePin that
> > > > >         specifies the lock to which the operation should apply? This
> > > > >         would mirror the CLCK and CPWD AT commands, which take the
> > > > >         facility name as an argument. This would correct what seems to
> > > > >         be an oversight in the current API.
> > > > 
> > > > Not an oversight, just that the main use case is to be able to
> > > > Enable/Change the SIM PIN, and the idea was to keep it simple. But now
> > > > that we report if given facility locks are enabled or disabled, it could
> > > > make sense to also allow trying to enable/disable all reported ones. We
> > > > would need to move Enable() and Change() out from the SIM object and
> > > > back to some interface in the Modem object.
> > > > 
> > > > And now that you talk about EnablePin() and ChangePin(); the same logic
> > > > could be applied to SendPin() and SendPuk(). SendPin()/SendPuk() should
> > > > be used only when UnlockRequired says that there is something to unlock;
> > > > they are actually backed by the same CPIN command. So, UnlockRequired
> > > > may be saying "ph-sim-pin" (phone-specific PIN required), and we can
> > > > then use SendPin() to send that specific code to the modem. Therefore,
> > > > SendPin() is really not related to the SIM, but to UnlockRequired, and
> > > > so they ought to be in the same interface (in the 0.6 API, SendPin() and
> > > > SendPuk() are managed in the SIM object).
> > > 
> > > That makes some sense.  They were originally added when the world was a
> > > simpler place :)
> > > 
> > 
> > If we do move SendPin(), SendPuk, ChangePin(), EnablePin() out of the
> > SIM object, not sure if it is worth having it around.
> > 
> > > > 
> > > > And a new brainstorm here... given that we're going to break the DBus
> > > > API, we can try to rework and consolidate all related properties.
> > > > 
> > > > We could assume that each facility has 2 codes (PIN, PUK), and that the
> > > > PUK code will only be required once all PIN attempts have been used
> > > > (didn't look at any documentation, but that seems to me always the
> > > > case).
> > > 
> > > That looks to be the case, yes.  The non-call-barring CLCK facilities
> > > have corresponding lock codes that would be reported by +CPIN?.
> > > 
> > > > If we do assume this, we could then setup a "FacilityLocks" dictionary
> > > > with signature "a{ubuu}" where:
> > > >  * The uint32 in the first position identifies the facility.
> > > >  * The boolean in the second position tells whether the facility has a
> > > > lock.
> > > >  * The uint32 in the third position has the PIN retry count.
> > > >  * The uint32 in the fourth position has the PUK retry count.
> > > > 
> > > > Then, we could have UnlockRequired be just a uint32 where we identify
> > > > the 'facility' locked (as opposed to identifying which pin code we
> > > > need).
> > > 
> > > I assume you're suggesting we do an enum for facilities?  (which is
> > > fine)
> > > 
> > 
> > We already have that enum, MMModemGsmFacility is called in git master.
> > 
> > > > So, if we get "SIM" facility in UnlockRequired, we could then check the
> > > > corresponding entry in the FacilityLocks dictionary and see how many
> > > > retry counts we have for PIN and PUK. If retries for PIN is 0; it means
> > > > we need the PUK code, unless PUK retries is also 0, which would mean we
> > > > need to buy a new SIM card. Instead of just the key of the dictionary
> > > > entry, we could also have the UnlockRequired property be a (ubuu); which
> > > > would contain the whole entry of the dictionary.
> > > > 
> > 
> > I'm wondering if it would be a good idea to have a Modem.Lock interface,
> > with all this stuff (methods to send/enable/change PINs and PUKs,
> > facility lock enabled flags, pin retry counts, unlock-required value...)
> 
> Sure?  Though to keep it easier for clients to deal with I tried to keep
> the number of interfaces a minimum.  At least with most C bindings for
> D-Bus you need to keep separate C objects around for each interface
> which makes it annoying when listening to signals.  That's mainly a
> problem with dbus-glib which we all want to die die die; I'm not sure
> about dbus-c++ or gdbus or the Qt bindings.
> 

That is also the case for GDBus, one main object (the one given by the
GDBusObjectManagerServer) plus an additional object per interface. I've
been trying to merge all intefaces in the same set of methods for the
Modem object in libmm-glib, but I don't think it's worth the
complication, specially for properties and signals; so will probably
stick to one object per interface.

Regarding having a Lock interface, if we end up having
SendPin()/SendPuk()/ChangePin()/EnablePin() not only for SIM-PIN; well,
we do have enough lock-related features to have a new interface, don't
think it's a big deal.

-- 
Aleksander



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]