diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmceshared/inc/mceclientserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmceshared/inc/mceclientserver.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,537 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +*/ + + + + + + +#ifndef MCECLIENTSERVER_H +#define MCECLIENTSERVER_H + +#include +#include "mcedefs.h" + +_LIT( KMceServerName,"mceserver" ); +_LIT( KMceServerFilename, "mceserver" ); +_LIT( KMceServerSemaphoreName, "MceServerSemaphore" ); +_LIT( KMceServerPanicString, "MceServer" ); + +const TUid KServerUid3 = {0x1020E4C7}; + +#if (defined (__WINS__) || defined(__WINSCW__)) +static const TUint KServerMinHeapSize = 0x1000; // 4K +static const TUint KServerMaxHeapSize = 0x80000; // 512K +#endif + +class TMceCameraInfo; +class TMceFileInfo; + +// The server version. +// A version must be specifyed when creating a session with the server +const TUint KMceServerMajorVersionNumber=0; +const TUint KMceServerMinorVersionNumber=1; +const TUint KMceServerBuildVersionNumber=1; + +const TUint32 KMceNotAssigned = (TUint32)KMaxTUint32; +const TInt32 KMceNotAssignedInt = KMaxTInt32; +const TUint KMceSecToMicrosec = 1000000; +const TUint KMceSecToMillisec = 1000; + +// +// callbacks +enum TMceItcCallBack + { + EMceItcNotAssigned = KMaxTUint16, + EMceItcStateChanged = 1, + EMceItcObjectAdded = 2, + EMceItcSessionConnectionStateChanged = 3, + EMceItcSRReceived = 4, + EMceItcRRReceived = 5, + EMceItcInactivityTimeout = 6, + EMceItcFCMsgReceived = 7, + EMceItcFCErrorReceived = 8, + EMceItcNotifyReceived = 9, + EMceItcIncomingUpdate = 10, + EMceItcUpdateFailed = 11, + EMceItcActivity = 12, + EMceItcInProgress = 13, + EMceItcTranscodingInProgress = 14, + EMceItcTranscodingCompleted = 15, + EMceItcDtmfSendStarted = 16, + EMceItcDtmfSendCompleted = 17, + EMceItcDtmfSendError = 18, + EMceItcLinkCreated = 19, + EMceItcResponseReceived = 20, + EMceItcRequestReceived = 21 + }; + + +//data types +enum TMceItcDataType + { + //basics + EMceItcMsgTypeWriteString, + EMceItcMsgTypeReadString, + EMceItcMsgTypeTextArray, + //structs + EMceItcMsgTypeSIPData, + EMceItcMsgTypeSIPReply, + EMceItcMsgTypeMessageArray, + EMceItcMsgTypeEvent, + EMceItcMsgTypeSIPRequest, + //objects + EMceItcMsgTypeSession, + EMceItcMsgTypeStream, + EMceItcMsgTypeSink, + EMceItcMsgTypeSource, + EMceItcMsgTypeCodec, + EMceItcMsgTypeFC + }; + +enum TMceItcEventType + { + EMceItcEventTypeEither = -1, + EMceItcEventTypeSubscribe = 1, + EMceItcEventTypeRefer = 2 + }; + +typedef TPckgBuf TMceItcArgTInt; +typedef TPckgBuf TMceItcArgTUint32; +typedef TPckgBuf TMceItcArgTCameraInfo; +typedef TPckgBuf TMceItcArgTRect; +typedef TPckgBuf TMceItcArgTime; +typedef TPckgBuf TMceItcArgTFileInfo; + +typedef TUint32 TMceManagerType; +typedef TUint32 TMceCsSessionType; +typedef TUint32 TMceDialogType; + +const TMceCsSessionType KMceCSSIPSession = 1; +const TMceCsSessionType KMceCSSIPEvent = 2; + +const TMceDialogType KMceDlgTypeInvite = 1; +const TMceDialogType KMceDlgTypeRefer = 2; +const TMceDialogType KMceDlgTypeSubscribe = 3; + +/* + * media id + * + */ +class TMceMediaId + { +public: + + inline TMceMediaId(): iAppId( KMceNotAssigned ), iId( KMceNotAssigned ) + { + } + + inline TMceMediaId( TUint32 aId ): iAppId( 0 ), iId( aId ) + { + } + + inline TMceMediaId( TUid aAppUid, TUint32 aId ): iAppId( aAppUid.iUid ), iId( aId ) + { + } + + inline TBool operator==( const TMceMediaId aId ) const + { + return ( iAppId == aId.iAppId && + iId == aId.iId ); + + } + + inline TBool operator!=( const TMceMediaId aId ) const + { + return !( iAppId == aId.iAppId && + iId == aId.iId ); + } + + + inline TBool IsAssigned() const + { + return ( iAppId != KMceNotAssigned && + iId != KMceNotAssigned ); + } + + inline TUint64 Uint64() const + { + return MAKE_TUINT64( iAppId, iId ); + } + + +public: + + TUint32 iAppId; + TUint32 iId; + + }; + +#define KMceMediaIdNotAssigned TMceMediaId() + +const TInt KMceArrayIndexOriginator = 0; +const TInt KMceArrayIndexRecipient = 1; +const TInt KMceArrayIndexIAPId = 2; + +const TInt KMceArrayIndexEventHeader = 0; +const TInt KMceArrayIndexEventReferTo = 0; +const TInt KMceArrayIndexEventRemoteURI = 1; +const TInt KMceArrayIndexEventOriginator = 2; + +const TInt KMceIDsMaxIndex = 12; +const TInt KMceIDsLastReservedIndex = 9; + +#define MCEIDS_DEFINE_SPARE_INDEX_1( name )\ + const TInt name = KMceIDsLastReservedIndex + 1 + +#define MCEIDS_DEFINE_SPARE_INDEX_2( name )\ + const TInt name = KMceIDsLastReservedIndex + 2 + +#define MCEIDS_DEFINE_SPARE_INDEX_3( name )\ + const TInt name = KMceIDsLastReservedIndex + 3 + +//#define MCEIDS_DEFINE_SPARE_INDEX_4( name )\ +// const TInt name = KMceIDsLastReservedIndex + 4 + + +MCEIDS_DEFINE_SPARE_INDEX_1( KMceIdsIndexFCPort ); +MCEIDS_DEFINE_SPARE_INDEX_1( KMceIdsIndexTCId ); + +#define MCE_ENCODE_DOUBLE_STATE( state1, state2 ) \ +( ( (TUint8)state1 ) << 8 ) | (TUint8)state2 & 0x0000FFFF + +#define MCE_DECODE_DOUBLE_STATE( doubleState, state1, state2 ) \ +state2 = doubleState & 0x000000FF;\ +state1 = ( ( doubleState & 0x0000FFFF ) >> 8 ) & 0x000000FF + +#define MCE_IDS_ITC_CONTEXT( ids ) \ + reinterpret_cast( ids.iItcContext ) + +// A container for MCE IDs + +class TMceIds + { +public: + + inline TMceIds() + : iAppUID(KMceNotAssigned), + iManagerType( KMceNotAssigned ), + iSessionID(KMceNotAssigned), + iDialogID(KMceNotAssigned), + iDialogType(KMceNotAssigned), + iProfileID(KMceNotAssigned), + iCallbackID( KMceNotAssigned ), + iMsgType(KMceNotAssigned), + iState(KMceNotAssigned), + iTransactionID(KMceNotAssigned), + iSpare1(KMceNotAssigned), + iSpare2(KMceNotAssigned), + iSpare3(KMceNotAssigned), + iSecureFlag(EFalse), + iStatus( KErrNone ), + iMediaID(KMceMediaIdNotAssigned), + iSourceID(KMceMediaIdNotAssigned), + iSinkID(KMceMediaIdNotAssigned), + iCodecID(KMceMediaIdNotAssigned), + iItcContext( NULL ) {} + +/* inline TMceIds(const TMceIds& aIds) + : iAppUID(aIds.iAppUID), + iManagerType( aIds.iManagerType ), + iSessionID(aIds.iSessionID), + iDialogID(aIds.iDialogID), + iDialogType(aIds.iDialogType), + iProfileID( aIds.iProfileID), + iCallbackID(aIds.iCallbackID), + iMsgType(aIds.iMsgType), + iState(aIds.iState), + iSpare1(aIds.iSpare1), + iSpare2(aIds.iSpare2), + iSpare3(aIds.iSpare3), + iSecureFlag(aIds.iSecureFlag), + iStatus(aIds.iStatus), + iMediaID(aIds.iMediaID), + iSourceID(aIds.iSourceID), + iSinkID(aIds.iSinkID), + iCodecID(aIds.iCodecID), + iItcContext( aIds.iItcContext ) + { + Mem::Copy(this, &aIds, sizeof(TMceIds)); + } +*/ + + inline TBool IsAppUIDId() const + { + return ( + iAppUID != KMceNotAssigned && + iSessionID == KMceNotAssigned ); + } + + inline TBool IsSessionId() const + { + return ( + iSessionID != KMceNotAssigned && + iMediaID == KMceMediaIdNotAssigned ); + } + + inline TBool IsMediaId() const + { + return ( + iMediaID != KMceMediaIdNotAssigned && + ( iSourceID == KMceMediaIdNotAssigned && + iSinkID == KMceMediaIdNotAssigned && + iCodecID == KMceMediaIdNotAssigned ) ); + } + + inline TBool IsSourceId() const + { + return ( + iSourceID != KMceMediaIdNotAssigned && + iSinkID == KMceMediaIdNotAssigned && + iCodecID == KMceMediaIdNotAssigned ); + } + + inline TBool IsSinkId() const + { + return ( + iSinkID != KMceMediaIdNotAssigned && + iSourceID == KMceMediaIdNotAssigned && + iCodecID == KMceMediaIdNotAssigned ); + } + + inline TBool IsCodecId() const + { + return ( + iCodecID != KMceMediaIdNotAssigned && + iSourceID == KMceMediaIdNotAssigned && + iSinkID == KMceMediaIdNotAssigned ); + } + + inline void Set( TInt aIndex, TUint32 aValue ) + { + __ASSERT_ALWAYS( aIndex <= KMceIDsMaxIndex, + User::Panic( KMceServerPanicString, KErrArgument ) ); + TUint32* id = (TUint32*)this; + id = id + aIndex; + *id = aValue; + } + + inline TUint32 Get( TInt aIndex ) + { + __ASSERT_ALWAYS( aIndex <= KMceIDsMaxIndex, + User::Panic( KMceServerPanicString, KErrArgument ) ); + TUint32* id = (TUint32*)this; + id = id + aIndex; + return *id; + } + + + inline void Copy( const TMceIds& aIds ) + { + iAppUID = aIds.iAppUID != KMceNotAssigned ? aIds.iAppUID : iAppUID; + iManagerType = aIds.iManagerType != KMceNotAssigned ? aIds.iManagerType : iManagerType; + iSessionID = aIds.iSessionID != KMceNotAssigned ? aIds.iSessionID : iSessionID; + iDialogID = aIds.iDialogID != KMceNotAssigned ? aIds.iDialogID : iDialogID; + iDialogType = aIds.iDialogType != KMceNotAssigned ? aIds.iDialogType : iDialogType; + iProfileID = aIds.iProfileID != KMceNotAssigned ? aIds.iProfileID : iProfileID; + iCallbackID = aIds.iCallbackID; + iMsgType = aIds.iMsgType; + iState = aIds.iState; + iTransactionID = aIds.iTransactionID; + iSpare1 = aIds.iSpare1; + iSpare2 = aIds.iSpare2; + iSpare3 = aIds.iSpare3; + iSecureFlag= aIds.iSecureFlag; + iStatus = aIds.iStatus; + iMediaID = aIds.iMediaID; + iSourceID = aIds.iSourceID; + iSinkID = aIds.iSinkID; + iCodecID = aIds.iCodecID; + } + +public://data + + TUint32 iAppUID; //0 + TUint32 iManagerType;//1 + TUint32 iSessionID; //2 + TUint32 iDialogID; //3 + TUint32 iDialogType; //4 + TUint32 iProfileID; //5 + TUint32 iCallbackID; //6 + TUint32 iMsgType; //7 + TUint32 iState; //8 + TMceTransactionId iTransactionID; //9 KMceIDsLastReservedIndex + TUint32 iSpare1; //10 first spare index + TUint32 iSpare2; //11 + TUint32 iSpare3; //12 KMceIDsMaxIndex + TBool iSecureFlag; //13 + TInt iStatus; + TMceMediaId iMediaID; + TMceMediaId iSourceID; + TMceMediaId iSinkID; + TMceMediaId iCodecID; + const TAny* iItcContext; + }; + + +// A container for incoming buffer sizes +class TMceMessageBufSizes + { +public: + + inline TMceMessageBufSizes() + : iContextBufSize( KErrNotFound ), + iContentBufSize( KErrNotFound ) {} + + + inline TMceMessageBufSizes( TInt aContextBufSize, TInt aContentBufSize ) + : iContextBufSize( aContextBufSize ), + iContentBufSize( aContentBufSize ) {} + + inline TMceMessageBufSizes(const TMceMessageBufSizes& aSizes) + : iContextBufSize(aSizes.iContextBufSize), + iContentBufSize(aSizes.iContentBufSize) {} + + TInt iContextBufSize; + TInt iContentBufSize; + }; + + + +// Oper. codes used in passing IPC messages between C/S-client and C/S-server +// To these IPC messages are refered in MCE server security policy file +// mcecsplatsecpolicy.h +enum TMceItcFunctions + { + EMceItcSetAppUid, //0 (AlwaysPass) + EMceItcCreateSession, //1 (NetworkServices) + EMceItcDeleteSession, //2 (NetworkServices) + EMceItcSetDefaultHeaders, //3 (NetworkServices) + EMceItcGetDefaultHeaders, //4 (NetworkServices) + EMceItcEstablishSession, //5 (NetworkServices) + EMceItcTerminateSession, //6 (NetworkServices) + EMceItcAcceptSession, //7 (NetworkServices) + EMceItcRejectSession, //8 (NetworkServices) + EMceItcUpdate, //9 (NetworkServices) + EMceItcRing, //10 (NetworkServices) + EMceItcEnable, //11 (NetworkServices) + EMceItcDisable, //12 (NetworkServices) + EMceItcSendRR, //13 (NetworkServices) + EMceItcSendSR, //14 (NetworkServices) + EMceItcReceive, //15 (AlwaysPass) + EMceItcClientReadyToReceive, //16 (AlwaysPass) + EMceItcCancel, //17 (AlwaysPass) + EMceItcClientCancelReceive, //18 (AlwaysPass) + EMceItcInitFC, //19 (AlwaysPass) + EMceItcUpdateFC, //20 (AlwaysPass) + EMceItcSendFCMsg, //21 (NetworkServices) + EMceItcFCGetMediaLines, //22 (AlwaysPass) + EMceItcFCSetMediaLines, //23 (AlwaysPass) + EMceItcGetSupportedAudioCodecs, //24 (AlwaysPass) + EMceItcSubscribe, //25 (NetworkServices) + EMceItcSubscribeUpdate, //26 (NetworkServices) + EMceItcAcceptEvent, //27 (NetworkServices) + EMceItcRejectEvent, //28 (NetworkServices) + EMceItcRespondEvent, //29 (NetworkServices) + EMceItcTerminateEvent, //30 (NetworkServices) + EMceItcNotify, //31 (NetworkServices) + EMceItcReferEvent, //32 (NetworkServices) + EMceItcSetVolume, //33 (WriteDeviceData) + EMceItcVolume, //34 (AlwaysPass) + EMceItcMaxVolume, //35 (AlwaysPass) + EMceItcSetGain, //36 (WriteDeviceData) + EMceItcGain, //37 (AlwaysPass) + EMceItcMaxGain, //38 (AlwaysPass) + EMceItcEnableInactivityTimer, //39 (AlwaysPass) + EMceItcDisableInactivityTimer, //40 (AlwaysPass) + EMceItcGetSession, //41 (AlwaysPass) + EMceItcCameraInfo, //42 (MultimediaDD) + EMceItcCamerasAvailable, //43 (MultimediaDD) + EMceItcZoomFactor, //44 (MultimediaDD) + EMceItcDigitalZoomFactor, //45 (MultimediaDD) + EMceItcContrast, //46 (MultimediaDD) + EMceItcBrightness, //47 (MultimediaDD) + EMceItcExposure, //48 (MultimediaDD) + EMceItcWhiteBalance, //49 (MultimediaDD) + EMceItcDisplaysAvailable, //50 (AlwaysPass) + EMceItcDisplayRect, //51 (AlwaysPass) + EMceItcDisplayPriority, //52 (AlwaysPass) + EMceItcFileInfo, //53 (AlwaysPass) + EMceItcFilePosition, //54 (AlwaysPass) + EMceItcSetCameraIndex, //55 (AlwaysPass) + EMceItcSetZoomFactor, //56 (AlwaysPass) + EMceItcSetDigitalZoomFactor, //57 (AlwaysPass) + EMceItcSetContrast, //58 (AlwaysPass) + EMceItcSetBrightness, //59 (AlwaysPass) + EMceItcSetExposure, //60 (AlwaysPass) + EMceItcSetWhiteBalance, //61 (AlwaysPass) + EMceItcSetDisplayIndex, //62 (AlwaysPass) + EMceItcSetDisplayRect, //63 (AlwaysPass) + EMceItcSetDisplayPriority, //64 (AlwaysPass) + EMceItcSetAudioRouting, //65 (AlwaysPass) + EMceItcSetFilePosition, //66 (AlwaysPass) + EMceItcSetFastForward, //67 (AlwaysPass) + EMceItcSetFastRewind, //68 (AlwaysPass) + EMceItcGetSupportedVideoCodecs, //69 (AlwaysPass) + EMceItcAudioRouting, //70 (AlwaysPass) + EMceItcSetFileInfo, //71 (AlwaysPass) + EMceItcTranscode, //72 (AlwaysPass) + EMceItcCancelTranscode, //73 (AlwaysPass) + EMceItcDisplayRotation, //74 (AlwaysPass) + EMceItcSetDisplayRotation, //75 (AlwaysPass) + EMceItcCallInQueue, //76 (AlwaysPass) + EMceItcIsDtmfActive, //77 (AlwaysPass) + EMceItcStartDtmfTone, //78 (AlwaysPass) + EMceItcStopDtmfTone, //79 (AlwaysPass) + EMceItcSendDtmfTone, //80 (AlwaysPass) + EMceItcSendDtmfToneSequence, //81 (AlwaysPass) + EMceItcCancelSendDtmfToneSequence, //82 (AlwaysPass) + EMceItcRequestSend, // 83 (AlwaysPass) + EMceItcReplySend, // 84 (AlwaysPass) + EMceItcTranscodeWithSession // 85 (AlwaysPass) + }; + + +// Indexes used in ITC parameter array passed between C/S-client and C/S-server +// +// All the parameters except TMceItcArguments are packed into package buffers +// to enable ITC parameter in-out behaviour. +// +// NOTE: Remember to update the types in comments if the actual types change. +// +enum TMceItcArguments + { + EMceItcArgIds = 0, // Type: TMceIds + EMceItcArgContext = 1, + EMceItcArgAppUid = 1, // Type: TInt + EMceItcArgId = 1, // Type: TUint32 + EMceItcArgBufSizes = 1, // Type: TMceMessageBufSizes + EMceItcArgMessageContent = 2, // Type: TDes8/TDesC8 + }; + + +#define MCE_ENDPOINT_ITC_ALLOWED( endpoint )\ + ( (endpoint).Id().IsAssigned() &&\ + (endpoint).iStream &&\ + (endpoint).iStream->Session() &&\ + (endpoint).iStream->Session()->State() != CMceSession::EIdle &&\ + (endpoint).iStream->Session()->State() != CMceSession::EIncoming ) + + +#endif // MCECLIENTSERVER_H + +// End of File