RMobileSmartCardEap Class Reference

class RMobileSmartCardEap : public RTelSubSessionBase

This sub-session opens under RMobilePhone.

RMobileSmartCardEap provides the client with access to a Smart Card Application's EAP-capability (if one exists).

(See ETSI TS 102.310 v6.2.0 and RFC3748)

To submit authentication challenges or requests, a client must use CAsyncSmartCardEapAuthentication in conjunction with this sub-session.

CAsyncSmartCardEapAuthentication

Inherits from

Public Member Functions
RMobileSmartCardEap()
IMPORT_C voidClose()
IMPORT_C voidGetAuthenticationStatus(TRequestStatus &, TEapAuthStatus &)
IMPORT_C voidGetEapKey(TRequestStatus &, const TEapKeyTag, TDes8 &)
IMPORT_C TIntGetEapMethodAccessStatus(TEapMethodAccessStatus &)
IMPORT_C voidGetUserIdentity(TRequestStatus &, TEapUserIdType, TDes8 &)
IMPORT_C voidInitialiseEapMethod(TRequestStatus &)
IMPORT_C TBoolIsEapMethodOwner()
IMPORT_C voidNotifyEapMethodAccessStatusChange(TRequestStatus &, TEapMethodAccessStatus &)
IMPORT_C TIntOpen(RMobilePhone &, const RMobilePhone::TAID &, const TEapType &)
IMPORT_C TIntReleaseEapMethod()
Protected Member Functions
IMPORT_C voidConstructL()
IMPORT_C voidDestruct()
Private Member Functions
RMobileSmartCardEap(const RMobileSmartCardEap &)
voidConvertBinToText(const TDesC8 &, TDes &)
TChar SeptChar(TInt)
Inherited Functions
RSubSessionBase::CloseSubSession(TInt)
RSubSessionBase::CreateAutoCloseSubSession(RSessionBase &,TInt,const TIpcArgs &)
RSubSessionBase::CreateSubSession(const RSessionBase &,TInt)
RSubSessionBase::CreateSubSession(const RSessionBase &,TInt,const TIpcArgs &)
RSubSessionBase::RSubSessionBase()
RSubSessionBase::Send(TInt)const
RSubSessionBase::Send(TInt,const TIpcArgs &)const
RSubSessionBase::SendReceive(TInt)const
RSubSessionBase::SendReceive(TInt,TRequestStatus &)const
RSubSessionBase::SendReceive(TInt,const TIpcArgs &)const
RSubSessionBase::SendReceive(TInt,const TIpcArgs &,TRequestStatus &)const
RSubSessionBase::Session()const
RSubSessionBase::SubSessionHandle()const
RTelSubSessionBase::Blank(const TInt,TReqPriorityType)const
RTelSubSessionBase::Blank(const TInt,TRequestStatus &,TReqPriorityType)const
RTelSubSessionBase::CancelAsyncRequest(TInt)const
RTelSubSessionBase::CancelReq(const TInt,const TInt)const
RTelSubSessionBase::CancelSubSession()const
RTelSubSessionBase::Get(const TInt,TDes16 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TDes8 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TDes8 &,TDes8 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TDes8 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TRequestStatus &,TDes16 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TRequestStatus &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TRequestStatus &,TDes8 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TRequestStatus &,TDes8 &,TDes8 &,TReqPriorityType)const
RTelSubSessionBase::Get(const TInt,TRequestStatus &,TDes8 &,TReqPriorityType)const
RTelSubSessionBase::RTelSubSessionBase()
RTelSubSessionBase::ResetSessionHandle()
RTelSubSessionBase::SessionHandle()const
RTelSubSessionBase::Set(const TInt,TRequestStatus &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,TRequestStatus &,const TDesC16 &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,TRequestStatus &,const TDesC8 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,TRequestStatus &,const TDesC8 &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,TRequestStatus &,const TDesC8 &,const TDesC8 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const RFile &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const TDesC16 &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const TDesC8 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const TDesC8 &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::Set(const TInt,const TDesC8 &,const TDesC8 &,TReqPriorityType)const
RTelSubSessionBase::SetAndGet(const TInt,TRequestStatus &,TDes8 &,const TDesC16 &,TReqPriorityType)const
RTelSubSessionBase::SetAndGet(const TInt,TRequestStatus &,const TDesC16 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::SetAndGet(const TInt,TRequestStatus &,const TDesC8 &,TDes16 &,TReqPriorityType)const
RTelSubSessionBase::SetAndGet(const TInt,TRequestStatus &,const TDesC8 &,TDes8 &,TReqPriorityType)const
RTelSubSessionBase::SetSessionHandle(RSessionBase &)
RTelSubSessionBase::SubSessionHandle()
Public Member Enumerations
enumTEapAuthStatus { ENoAuthStarted, EAuthenticating, EAuthenticated, EHeld }
enumTEapKeyTag { EEapKeyMSK = 0x80, EEapKeyEMSK = 0x81 }
enumTEapMethodAccessStatus { EEapMethodAvailable, EEapMethodInUseApplicationActive, EEapMethodInUseApplicationInactive, EEapMethodUnableToInitialise }
enumTEapUserIdType { EPermanentIdentity, EPseudonymIdentity }
Inherited Enumerations
RTelSubSessionBase:TReqPriorityType
Public Member Type Definitions
typedef TPckg< TEapKeyV6 > TEapKeyV6Pckg
typedef TBuf8< KEapTypeSize > TEapType
typedef TPckg< TEapUserIdentityV6 > TEapUserIdentityV6Pckg
Private Attributes
CMobileSmartCardEapPtrHolder *iMmPtrHolder
TBool iOwnsEapMethodLock
RSemaphore iSemaphore
Inherited Attributes
RTelSubSessionBase::iPtrHolder

Constructor & Destructor Documentation

RMobileSmartCardEap()

IMPORT_CRMobileSmartCardEap()

RMobileSmartCardEap(const RMobileSmartCardEap &)

RMobileSmartCardEap(const RMobileSmartCardEap &)[private]

Parameters

const RMobileSmartCardEap &

Member Functions Documentation

Close()

IMPORT_C voidClose()

ConstructL()

IMPORT_C voidConstructL()[protected]

ConvertBinToText(const TDesC8 &, TDes &)

voidConvertBinToText(const TDesC8 &aBinData,
TDes &aText
)[private]

Parameters

const TDesC8 & aBinData
TDes & aText

Destruct()

IMPORT_C voidDestruct()[protected]

GetAuthenticationStatus(TRequestStatus &, TEapAuthStatus &)

IMPORT_C voidGetAuthenticationStatus(TRequestStatus &aReqStatus,
TEapAuthStatus &aAuthStatus
)

Parameters

TRequestStatus & aReqStatus
TEapAuthStatus & aAuthStatus

GetEapKey(TRequestStatus &, const TEapKeyTag, TDes8 &)

IMPORT_C voidGetEapKey(TRequestStatus &aReqStatus,
const TEapKeyTagaRequestedKey,
TDes8 &aKey
)

Parameters

TRequestStatus & aReqStatus
const TEapKeyTag aRequestedKey
TDes8 & aKey

GetEapMethodAccessStatus(TEapMethodAccessStatus &)

IMPORT_C TIntGetEapMethodAccessStatus(TEapMethodAccessStatus &aEapMethodStatus)

Parameters

TEapMethodAccessStatus & aEapMethodStatus

GetUserIdentity(TRequestStatus &, TEapUserIdType, TDes8 &)

IMPORT_C voidGetUserIdentity(TRequestStatus &aReqStatus,
TEapUserIdTypeaRequestedIdType,
TDes8 &aUserId
)

Parameters

TRequestStatus & aReqStatus
TEapUserIdType aRequestedIdType
TDes8 & aUserId

InitialiseEapMethod(TRequestStatus &)

IMPORT_C voidInitialiseEapMethod(TRequestStatus &aReqStatus)

Parameters

TRequestStatus & aReqStatus

IsEapMethodOwner()

IMPORT_C TBoolIsEapMethodOwner()const

NotifyEapMethodAccessStatusChange(TRequestStatus &, TEapMethodAccessStatus &)

IMPORT_C voidNotifyEapMethodAccessStatusChange(TRequestStatus &aReqStatus,
TEapMethodAccessStatus &aEapMethodStatus
)

Parameters

TRequestStatus & aReqStatus
TEapMethodAccessStatus & aEapMethodStatus

Open(RMobilePhone &, const RMobilePhone::TAID &, const TEapType &)

IMPORT_C TIntOpen(RMobilePhone &aPhone,
const RMobilePhone::TAID &aAID,
const TEapType &aEapType
)

Parameters

RMobilePhone & aPhone
const RMobilePhone::TAID & aAID
const TEapType & aEapType

ReleaseEapMethod()

IMPORT_C TIntReleaseEapMethod()

SeptChar(TInt)

TChar SeptChar(TIntaDigit)[private]

Parameters

TInt aDigit

Member Enumerations Documentation

Enum TEapAuthStatus

Authentication status of the EAP supporting UICC application (See section 7.2 of ETSI TS 102.310 v6.2.0). One of these values is returned on completion of an RMobileSmartCardEap::GetAuthenticationStatus() request.

RMobileSmartCardEap::GetAuthenticationStatus()

Enumerators

ENoAuthStarted

No authentication started

EAuthenticating

Authenticating

EAuthenticated

Authentication complete

EHeld

Held (authentication failure)

Enum TEapKeyTag

TEapKeyV6 should be used to request one of (currently) two keys available on the EF_EAPKEYS of the UICC application (see section 7.1 of ETSI TS 102.310 v6.2.0). This enumeration type should be used in RMobileSmartCardEap::GetEapKey() to specify the key to be retrieved.

RMobileSmartCardEap::TEapKeyV6

RMobileSmartCardEap::GetEapKey()

Enumerators

EEapKeyMSK = 0x80

Used to request Master Session Key.

EEapKeyEMSK = 0x81

Used to request Extended Master Session Key.

Enum TEapMethodAccessStatus

Status of the DF_EAP this subsession refers to. The status is basically an indication of whether the DF is in use by another sub- session client instance.

NotifyEapMethodAccessStatusChange() will give a notification when the status changes.

Status will change when the first client calls InitialiseEapMethod() on this sub-session. When the same client calls ReleaseEapMethod() (or Close()), the status will change again. This allows mutually exclusive access to the DF_EAP. All other RMobileSmartCardEap hanles will get an error if they attempt to make requests that access the same DF_EAP.

RMobileSmartCardEap::NotifyEapMethodAccessStatusChange()

RMobileSmartCardEap::ReleaseEapMethod()

RMobileSmartCardEap::InitialiseEapMethod()

Enumerators

EEapMethodAvailable

AID/DF_EAP has been reset, and the DF_EAP has not been initialised by any other instance of RMobileSmartCardEap.

EEapMethodInUseApplicationActive

Another instance of RMobileSmartCardEap has initialised first and taken ownership of the DF_EAP. The DF_EAP is currently active and EAP requests can be made.

EEapMethodInUseApplicationInactive

This instance of RMobileSmartCardEap still owns the lock on the DF_EAP, but the application has been deactivated elsewhere. The client should re-initialise before making further EAP requests.

RMobileSmartCardEap::InitialiseEapMethod()

EEapMethodUnableToInitialise

Lock on the DF_EAP has been released, but another DF_EAP method is in use under the same AID, thus, cannot reset/initialise this subsessions EAP method. Client can only post a notification and wait till status changes to EEapMethodAvailable.

RMobileSmartCardEap::NotifyEapMethodAccessStatusChange()

Enum TEapUserIdType

TEapUserIdType should be used to request an identity from EF_PUId or EF_Ps, when making an RMobileSmartCardEap::GetUserIdentity() request. (See sections 7.3 and 7.4, respectively, of ETSI TS 102.310 v6.2.0, and RFC2486 - The Network Access Identifier).

RMobileSmartCardEap::GetUserIdentity()

RMobileSmartCardEap::TEapUserIdentityV6

Enumerators

EPermanentIdentity

Identity is permanent type

EPseudonymIdentity

Identity is pseudonym type

Member Type Definitions Documentation

Typedef TEapKeyV6Pckg

typedef TPckg< TEapKeyV6 >TEapKeyV6Pckg

A typedef'd packaged TEapKeyV6 for passing through a generic API method.

Typedef TEapType

typedef TBuf8< KEapTypeSize >TEapType

A typedef'd buffer to hold the EAP type for the subsequent authentication that will be carried out on the Smart Card Application.

The value specified must correspond to the pre-allocated type identifiers for various EAPs (see http://www.iana.org/assignments/eap-numbers). Some known values are given in etelmm.h.

The type must be specified in hexadecimal format, where each character represents one semi-octet.

KETelSmartCardEapTypeMD5

KETelSmartCardEapTypeTLS

KETelSmartCardEapTypeSIM

KETelSmartCardEapTypeAKA

KETelSmartCardEapTypeTTLS

RMobileSmartCardEap::Open()

Typedef TEapUserIdentityV6Pckg

typedef TPckg< TEapUserIdentityV6 >TEapUserIdentityV6Pckg

A typedef'd packaged TEapUserIdentityV6 for passing through a generic API method.

Member Data Documentation

CMobileSmartCardEapPtrHolder * iMmPtrHolder

CMobileSmartCardEapPtrHolder *iMmPtrHolder[private]

Pointer Holder for the RMobileSmartCardEap sub-session requests.

TBool iOwnsEapMethodLock

TBool iOwnsEapMethodLock[private]

True if this object is the first to request InitialiseEapMethod() on its <AID,EAPType> when the status is EEapMethodAvailable. I.e. True only for the instance of RMobileSmartCardEap that successfully passes the Wait() on iSemaphore.

RSemaphore iSemaphore

RSemaphore iSemaphore[private]

Semaphore is actually owned by TSY, and used by all instances of RMobileSmartCardEap to stop multiple access to the same EAP method on any one application.