diff -r 675a964f4eb5 -r 35751d3474b7 cryptomgmtlibs/securitycommonutils/inc/scscommon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptomgmtlibs/securitycommonutils/inc/scscommon.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,243 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Information shared between SCS client and server implementations, +* and with the subclass implementations, but not with the client API user. +* +*/ + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef SCSCOMMON_H +#define SCSCOMMON_H + +#include + +#ifndef BULLSEYE_OFF +#ifdef _BullseyeCoverage +#define BULLSEYE_OFF "BullseyeCoverage save off"; +#define BULLSEYE_RESTORE "BullseyeCoverage restore"; +#else +#define BULLSEYE_OFF +#define BULLSEYE_RESTORE +#endif +#endif + +namespace ScsImpl + { + /** + Bit position of SCS code in function code. + + Do not change - Some of the codes based off this definition + ARE public. + */ + const TInt KScsFunctionPos = 24; + + /** + Mask used to extract SCS commands. + + Do not change - Some of the codes based off this definition + ARE public. + */ + const TInt KScsFunctionMask = 0xFF000000; + + enum TScsFunction + /** + Bits 31:24 of the function code are reserved for SCS fields. + The values below should be or'd into the code that is sent to + the server, on the client side. + + The recognized values intentionally exclude zero, to ensure + that a field is added on the client side. + */ + { + /** + Function should be handled by session's DoServiceL. + + This value is effectively PUBLIC because the range used is + described by defines in scsserver.h (used for configuring + server security). + */ + ECallSessionFunc = 1 << KScsFunctionPos, + + /** + The SCS sends the lower bits of the function code to the subsession's + (not the session's) ServiceL implementation. + + The session's implementation of [Do]ServiceL is not involved. + + This value is effectively PUBLIC because the range used is + described by defines in scsserver.h (used for configuring + server security). + */ + ECallSubsessionFunc = 2 << KScsFunctionPos, + + /** + This message is send with no function identifier or + IPC arguments just before the session is closed. Although + not necessary, it will cancel any outstanding requests on + the session or its subsessions with KErrCancel, so if the + client has any outstanding requests they will still get + completed. + */ + EPreCloseSession = 3 << KScsFunctionPos, + + /** + Cancel an asynchronous session-relative function. The low + bits of the function code should be the same as the original + function code. E.g. if the function was set up with + ENoScsFunction | X then it would be cancelled with ECancelSessionFunction | X. + + The session's implementation of [Do]ServiceL is not involved. + */ + ECancelSessionFunc = 4 << KScsFunctionPos, + + /** + Tells the server that this function will create a new subsession. + The low bits can be interpreted by the implementation to indicate + a type of subsession. + */ + ECreateSubsession = 5 << KScsFunctionPos, + /** + This SCS code should be used on its own. Any information in the + lower bits will be ignored. + */ + ECloseSubsession = 6 << KScsFunctionPos, + + /** + Similar to ECancelSessionFunction, this cancels an asynchronous + request on a subsession object. The request will be completed with + KErrCancel. + + The subsession's implementation of ServiceL is not involved. + + @see ECancelSessionFunction + */ + ECancelSubsessionFunc = 7 << KScsFunctionPos, + + /** + Only supported in debug builds, this function starts a server-side + heap mark with __UHEAP_MARK and sets a deterministic failure rate. + This function should only be used by RScsClientBase::SetServerHeapFail. + + @see EUHeapResetFail + @see RScsClientBase::SetServerHeapFail + */ + EUHeapSetFail = 8 << KScsFunctionPos, + + /** + Only supported in debug builds, this function ends the server-side + heap mark set up with EUHeapSetFail, with __UHEAP_MARKEND, and resets + the heap failure rate. This function should only be used by + RScsClientBase::ResetServerHeapFail. + + @see EUHeapSetFail + @see RScsClientBase::ResetServerHeapFail + */ + EUHeapResetFail = 9 << KScsFunctionPos, + + /** + Intended for debug use, but also present in production builds. + + Returns the PID of the server. This is a number, not a + handle, so does not impact security. + + */ + EGetServerPid = 10 << KScsFunctionPos, + + /** + Intended for debug use, but also present in production builds. + + This call causes a server which has an inactivity shutdown + timer to shutdown immediately the next time it is + idle. This is just adjusts the timing of existing + functionality, so is not believed to impact security. + + If the server has a shutdown timer, then a flag is set + which causes the server to immediately exit the next time + it becomes idle. + + If the server does not have a shutdown timer, then the + calls fails with KErrNotSupported. + */ + EShutdownAsap = 11 << KScsFunctionPos, + + /** + This value is not used by the server implementation. It is provided + for test code to confirm the server handles an uncrecognized instruction + correctly, by failing with KErrNotSupported. + */ + EScsUnused = 0x20 << KScsFunctionPos + }; + + inline void ExtractScsAndImplFunctions(const RMessage2& aMessage, TScsFunction* aScsFunc, TInt* aImplFunc); + inline TBool ScsFieldUsed(TInt aFunction); + + /** + SCS clients are panicked with this category when invalid + input to the server is detected. + + @see TClientPanic + */ + _LIT(KScsClientPanicCat, "SCS-Client"); + + enum TScsClientPanic + /** + Reasons why the SCS server might panic its clients. + + @see KScsClientPanicCat + */ + { + EScsClBadDesc = 0, ///< Client provided a bad descriptor as an IPC argument. + EScsClBadHandle = 1, ///< Client passed a bad subsession handle. + EScsClAsyncAlreadyQueued = 2, ///< Client attempted to requeue an outstanding request. + + /** No-arg session-relative function identifier used reserved SCS bits. */ + EScsClNoArgsSessUsedScs = 4, + + /** Arg session-relative function identifier used reserved SCS bits. */ + EScsClArgsSessUsedScs = 5, + + /** Arg session-relative async function identifier used reserved SCS bits. */ + EScsClArgsSessAsyncUsedScs = 6, + + /** Session-relative cancel function identifier used reserved SCS bits. */ + EScsClCancelSessUsedScs = 7, + + /** No-arg subsession-relative function identifier used reserved SCS bits. */ + EScsClNoArgsSubsessUsedScs = 16, + + /** Arg subsession-relative function identifier used reserved SCS bits. */ + EScsClArgsSubsessUsedScs = 17, + + /** Arg subsession-relative async function identifier used reserved SCS bits. */ + EScsClArgsSubsessAsyncUsedScs = 18, + + /* Subsesion-relative cancel function identifier used reserved SCS bits. */ + EScsClCancelSubsessUsedScs = 19 + }; + + // defined only in client-side implementation + void ClientSidePanic(ScsImpl::TScsClientPanic aReason); + } // namespace ScsImpl + +#include + +#endif // #ifndef SCSCOMMON_H +