# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1283260008 -10800 # Node ID 5c72fd91570dee9f27d3a01fe5d5e126e7edf803 # Parent 8116cc9433110e4ab83f1732299ac0ae5c821df3 Revision: 201029 Kit: 201035 diff -r 8116cc943311 -r 5c72fd91570d group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2010 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: Build information for srvdiscovery +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES +#include "../upnp/group/bld.inf" +#include "../services/group/bld.inf" +#include "../servicediscoveryandcontrol/pnp/group/bld.inf" + + +PRJ_TESTMMPFILES \ No newline at end of file diff -r 8116cc943311 -r 5c72fd91570d layers.sysdef.xml --- a/layers.sysdef.xml Mon Mar 15 12:43:29 2010 +0200 +++ b/layers.sysdef.xml Tue Aug 31 16:06:48 2010 +0300 @@ -1,13 +1,14 @@ - + + ]> - - - - - - - - - + + + + + + + + + \ No newline at end of file diff -r 8116cc943311 -r 5c72fd91570d package_definition.xml --- a/package_definition.xml Mon Mar 15 12:43:29 2010 +0200 +++ b/package_definition.xml Tue Aug 31 16:06:48 2010 +0300 @@ -1,15 +1,46 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d package_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_map.xml Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,1 @@ + diff -r 8116cc943311 -r 5c72fd91570d services/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/group/bld.inf Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,27 @@ +/** +* Copyright (c) 2010 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: This file provides the information required for building the +* whole of terminalmodeservice_plat and terminalmodeservice. +* +*/ + + +// Export domain headers +#include "../terminalmodeservice_plat/group/bld.inf" + + +// terminalmodeservice +#include "../terminalmodeservice/group/bld.inf" + +// End of file diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/bwins/terminalmodeserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/bwins/terminalmodeserviceu.def Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,28 @@ +EXPORTS + ?SetResourceStatusL@CUpnpRemotableApp@@QAEXABVTDesC8@@@Z @ 1 NONAME ; void CUpnpRemotableApp::SetResourceStatusL(class TDesC8 const &) + ?StopL@CUpnpTmServer@@QAEXXZ @ 2 NONAME ; void CUpnpTmServer::StopL(void) + ?NewL@CUpnpTmServer@@SAPAV1@AAVCUpnpTmServerDeviceInfo@@AAVMUpnpTmServerObserver@@@Z @ 3 NONAME ; class CUpnpTmServer * CUpnpTmServer::NewL(class CUpnpTmServerDeviceInfo &, class MUpnpTmServerObserver &) + ?AddTmInfoElementL@CUpnpTmInfoElement@@QAEXABVTDesC8@@0@Z @ 4 NONAME ; void CUpnpTmInfoElement::AddTmInfoElementL(class TDesC8 const &, class TDesC8 const &) + ?SetXmlSignatureL@CUpnpTmServer@@QAEXABVTDesC8@@@Z @ 5 NONAME ; void CUpnpTmServer::SetXmlSignatureL(class TDesC8 const &) + ?SetAppDescriptionL@CUpnpRemotableApp@@QAEXABVTDesC8@@@Z @ 6 NONAME ; void CUpnpRemotableApp::SetAppDescriptionL(class TDesC8 const &) + ?RegisterAppL@CUpnpTmServer@@QAEXPAVCUpnpRemotableApp@@@Z @ 7 NONAME ; void CUpnpTmServer::RegisterAppL(class CUpnpRemotableApp *) + ?NewL@CUpnpTerminalModeIcon@@SAPAV1@ABVTDesC16@@HHHABVTDesC8@@@Z @ 8 NONAME ; class CUpnpTerminalModeIcon * CUpnpTerminalModeIcon::NewL(class TDesC16 const &, int, int, int, class TDesC8 const &) + ?NewL@CUpnpTmClientIconPref@@SAPAV1@I@Z @ 9 NONAME ; class CUpnpTmClientIconPref * CUpnpTmClientIconPref::NewL(unsigned int) + ?SetDeviceInfoL@CUpnpTmServerDeviceInfo@@QAEXABVTDesC8@@@Z @ 10 NONAME ; void CUpnpTmServerDeviceInfo::SetDeviceInfoL(class TDesC8 const &) + ?AddDeviceIconL@CUpnpTmServerDeviceInfo@@QAEXPAVCUpnpTerminalModeIcon@@@Z @ 11 NONAME ; void CUpnpTmServerDeviceInfo::AddDeviceIconL(class CUpnpTerminalModeIcon *) + ?UpdateAppListL@CUpnpTmServer@@QAEXABV?$RArray@I@@@Z @ 12 NONAME ; void CUpnpTmServer::UpdateAppListL(class RArray const &) + ?AddIconL@CUpnpRemotableApp@@QAEXPAVCUpnpTerminalModeIcon@@@Z @ 13 NONAME ; void CUpnpRemotableApp::AddIconL(class CUpnpTerminalModeIcon *) + ?CreateTmInfoElementL@CUpnpRemotableApp@@QAEAAVCUpnpTmInfoElement@@W4TTerminalModeInfoType@2@@Z @ 14 NONAME ; class CUpnpTmInfoElement & CUpnpRemotableApp::CreateTmInfoElementL(enum CUpnpTmInfoElement::TTerminalModeInfoType) + ?UnRegisterApp@CUpnpTmServer@@QAEHI@Z @ 15 NONAME ; int CUpnpTmServer::UnRegisterApp(unsigned int) + ?StartL@CUpnpTmServer@@QAEXXZ @ 16 NONAME ; void CUpnpTmServer::StartL(void) + ?NewL@CUpnpRemotableApp@@SAPAV1@IABVTDesC8@@@Z @ 17 NONAME ; class CUpnpRemotableApp * CUpnpRemotableApp::NewL(unsigned int, class TDesC8 const &) + ?UpdateUnusedProfileIdsL@CUpnpTmServer@@QAEXABV?$RArray@I@@@Z @ 18 NONAME ; void CUpnpTmServer::UpdateUnusedProfileIdsL(class RArray const &) + ?GetRemotableApp@CUpnpTmServer@@QAEAAVCUpnpRemotableApp@@IAAH@Z @ 19 NONAME ; class CUpnpRemotableApp & CUpnpTmServer::GetRemotableApp(unsigned int, int &) + ?UpdateAppStatusL@CUpnpTmServer@@QAEXABV?$RArray@I@@@Z @ 20 NONAME ; void CUpnpTmServer::UpdateAppStatusL(class RArray const &) + ?UnRegisterApps@CUpnpTmServer@@QAEHABV?$RArray@I@@@Z @ 21 NONAME ; int CUpnpTmServer::UnRegisterApps(class RArray const &) + ?RegisterAppsL@CUpnpTmServer@@QAEXABV?$RPointerArray@VCUpnpRemotableApp@@@@@Z @ 22 NONAME ; void CUpnpTmServer::RegisterAppsL(class RPointerArray const &) + ?NewL@CUpnpTmServerDeviceInfo@@SAPAV1@K@Z @ 23 NONAME ; class CUpnpTmServerDeviceInfo * CUpnpTmServerDeviceInfo::NewL(unsigned long) + ?SetBtAddressL@CUpnpTmServerDeviceInfo@@QAEXABVTDesC8@@@Z @ 24 NONAME ; void CUpnpTmServerDeviceInfo::SetBtAddressL(class TDesC8 const &) + ?SetMimeTypeL@CUpnpTmClientIconPref@@QAEXABVTDesC8@@@Z @ 25 NONAME ; void CUpnpTmClientIconPref::SetMimeTypeL(class TDesC8 const &) + ?SetAllowedProfileIdListL@CUpnpRemotableApp@@QAEXABV?$RArray@I@@@Z @ 26 NONAME ; void CUpnpRemotableApp::SetAllowedProfileIdListL(class RArray const &) + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/eabi/terminalmodeserviceu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/eabi/terminalmodeserviceu.def Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,66 @@ +EXPORTS + _ZN13CUpnpTmServer12RegisterAppLEP17CUpnpRemotableApp @ 1 NONAME + _ZN13CUpnpTmServer13RegisterAppsLERK13RPointerArrayI17CUpnpRemotableAppE @ 2 NONAME + _ZN13CUpnpTmServer13UnRegisterAppEj @ 3 NONAME + _ZN13CUpnpTmServer14UnRegisterAppsERK6RArrayIjE @ 4 NONAME + _ZN13CUpnpTmServer14UpdateAppListLERK6RArrayIjE @ 5 NONAME + _ZN13CUpnpTmServer15GetRemotableAppEjRi @ 6 NONAME + _ZN13CUpnpTmServer16SetXmlSignatureLERK6TDesC8 @ 7 NONAME + _ZN13CUpnpTmServer16UpdateAppStatusLERK6RArrayIjE @ 8 NONAME + _ZN13CUpnpTmServer23UpdateUnusedProfileIdsLERK6RArrayIjE @ 9 NONAME + _ZN13CUpnpTmServer4NewLER23CUpnpTmServerDeviceInfoR21MUpnpTmServerObserver @ 10 NONAME + _ZN13CUpnpTmServer5StopLEv @ 11 NONAME + _ZN13CUpnpTmServer6StartLEv @ 12 NONAME + _ZN17CUpnpRemotableApp18SetAppDescriptionLERK6TDesC8 @ 13 NONAME + _ZN17CUpnpRemotableApp18SetResourceStatusLERK6TDesC8 @ 14 NONAME + _ZN17CUpnpRemotableApp20CreateTmInfoElementLEN18CUpnpTmInfoElement21TTerminalModeInfoTypeE @ 15 NONAME + _ZN17CUpnpRemotableApp24SetAllowedProfileIdListLERK6RArrayIjE @ 16 NONAME + _ZN17CUpnpRemotableApp4NewLEjRK6TDesC8 @ 17 NONAME + _ZN17CUpnpRemotableApp8AddIconLEP21CUpnpTerminalModeIcon @ 18 NONAME + _ZN18CUpnpTmInfoElement17AddTmInfoElementLERK6TDesC8S2_ @ 19 NONAME + _ZN21CUpnpTerminalModeIcon4NewLERK7TDesC16iiiRK6TDesC8 @ 20 NONAME + _ZN21CUpnpTmClientIconPref12SetMimeTypeLERK6TDesC8 @ 21 NONAME + _ZN21CUpnpTmClientIconPref4NewLEj @ 22 NONAME + _ZN23CUpnpTmServerDeviceInfo13SetBtAddressLERK6TDesC8 @ 23 NONAME + _ZN23CUpnpTmServerDeviceInfo14AddDeviceIconLEP21CUpnpTerminalModeIcon @ 24 NONAME + _ZN23CUpnpTmServerDeviceInfo14SetDeviceInfoLERK6TDesC8 @ 25 NONAME + _ZN23CUpnpTmServerDeviceInfo4NewLEm @ 26 NONAME + _ZTI13CUpnpTmServer @ 27 NONAME + _ZTI17CUpnpRemotableApp @ 28 NONAME + _ZTI17CUpnpTmServerImpl @ 29 NONAME + _ZTI18CUpnpAppFilterInfo @ 30 NONAME + _ZTI18CUpnpTmIconMapping @ 31 NONAME + _ZTI18CUpnpTmInfoElement @ 32 NONAME + _ZTI19CUpnpTmServerDevice @ 33 NONAME + _ZTI21CUpnpTerminalModeIcon @ 34 NONAME + _ZTI21CUpnpTmClientIconPref @ 35 NONAME + _ZTI22CUpnpRemotableAppStore @ 36 NONAME + _ZTI22CUpnpSvgImageConverter @ 37 NONAME + _ZTI22CUpnpTmFilteredAppList @ 38 NONAME + _ZTI23CUpnpTmAppServerService @ 39 NONAME + _ZTI23CUpnpTmServerDeviceInfo @ 40 NONAME + _ZTI25CUpnpIconConversionActive @ 41 NONAME + _ZTI27CUpnpTmClientProfileService @ 42 NONAME + _ZTI28CUpnpTmServerDeviceXmlParser @ 43 NONAME + _ZTI29CUpnpIconFileServeTransaction @ 44 NONAME + _ZTI32CUpnpTmServerDescriptionProvider @ 45 NONAME + _ZTV13CUpnpTmServer @ 46 NONAME + _ZTV17CUpnpRemotableApp @ 47 NONAME + _ZTV17CUpnpTmServerImpl @ 48 NONAME + _ZTV18CUpnpAppFilterInfo @ 49 NONAME + _ZTV18CUpnpTmIconMapping @ 50 NONAME + _ZTV18CUpnpTmInfoElement @ 51 NONAME + _ZTV19CUpnpTmServerDevice @ 52 NONAME + _ZTV21CUpnpTerminalModeIcon @ 53 NONAME + _ZTV21CUpnpTmClientIconPref @ 54 NONAME + _ZTV22CUpnpRemotableAppStore @ 55 NONAME + _ZTV22CUpnpSvgImageConverter @ 56 NONAME + _ZTV22CUpnpTmFilteredAppList @ 57 NONAME + _ZTV23CUpnpTmAppServerService @ 58 NONAME + _ZTV23CUpnpTmServerDeviceInfo @ 59 NONAME + _ZTV25CUpnpIconConversionActive @ 60 NONAME + _ZTV27CUpnpTmClientProfileService @ 61 NONAME + _ZTV28CUpnpTmServerDeviceXmlParser @ 62 NONAME + _ZTV29CUpnpIconFileServeTransaction @ 63 NONAME + _ZTV32CUpnpTmServerDescriptionProvider @ 64 NONAME + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/group/bld.inf Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,30 @@ +/** +* Copyright (c) 2010 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: This file provides the information required for building the +* whole of a TM Service and its test component. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../rom/terminalmodeservice.iby CORE_MW_LAYER_IBY_EXPORT_PATH(terminalmodeservice.iby) + +PRJ_MMPFILES +terminalmodeservice.mmp + +PRJ_TESTMMPFILES +#include "../tsrc/upnptmservertest/group/bld.inf" diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/group/terminalmodeservice.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/group/terminalmodeservice.mmp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,77 @@ +/** +* Copyright (c) 2010 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: This is the project specification file for Terminal Mode Service. +* +*/ + + +TARGET terminalmodeservice.dll +TARGETTYPE dll +UID 0x1000008d 0x2002D1B8 + +CAPABILITY CAP_GENERAL_DLL + +USERINCLUDE ../inc +USERINCLUDE ../traces + +MW_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE upnptmserver.cpp +SOURCE upnptmserverimpl.cpp +SOURCE upnptmserverdeviceinfo.cpp +SOURCE upnpremotableapp.cpp +SOURCE upnptminfoelement.cpp +SOURCE upnptmserverdescriptionprovider.cpp +SOURCE upnpterminalmodeicon.cpp +SOURCE upnptmclienticonpref.cpp +SOURCE upnptmserverdevice.cpp +SOURCE upnptmserverdevicexmlparser.cpp +SOURCE upnptmappserverservice.cpp +SOURCE upnptmclientprofileservice.cpp +SOURCE upnpremotableappstore.cpp +SOURCE upnptmfilteredapplist.cpp +SOURCE upnptmiconmapping.cpp +SOURCE upnpappfilterinfo.cpp +SOURCE upnpiconfileservetransaction.cpp +SOURCE upnpsvgimageconverter.cpp +SOURCE upnpiconconversionactive.cpp + +LIBRARY upnpserviceframework.lib +LIBRARY dlnawebserver.lib +LIBRARY upnpipserversutils.lib +LIBRARY upnpconnectionmanagersession.lib +LIBRARY insock.lib +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY xmlframework.lib +LIBRARY charconv.lib +LIBRARY bafl.lib +LIBRARY etelmm.lib +LIBRARY etel.lib +LIBRARY esock.lib +LIBRARY svgengine.lib +LIBRARY imageconversion.lib +LIBRARY fbscli.lib +LIBRARY gdi.lib + +DEFFILE terminalmodeservice.def + +#ifdef ENABLE_ABIV2_MODE +DEBUGGABLE_UDEBONLY +#endif + +SMPSAFE + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpappfilterinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpappfilterinfo.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,103 @@ +/** +* Copyright (c) 2010 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: CUpnpAppFilterInfo class declaration +* +*/ + +#ifndef __UPNPAPPFILTERINFO_H__ +#define __UPNPAPPFILTERINFO_H__ + +// Include Files +#include +#include "terminalmodeconsts.h" + +// Literals +_LIT8(KProtocolId, "protocolID"); +_LIT8(KFormat, "format"); +_LIT8(KRemotingDirection, "direction"); +_LIT8(KAppCategory, "appCategory"); +_LIT8(KTrustLevel, "trustLevel"); +_LIT8(KContCategory, "contentCategory"); +_LIT8(KContentRules, "contentRules"); +_LIT8(KAudioType, "audioType"); + +/** + * This class stores the parsed information provided in the AppListingFilter + * input argument of the GetApplicationList action. + * Provides internal setter and getter methods. + * Maintains a structure which holds the information such as which all optional + * elements are needed in the response and which all applications should go + * in the response. + */ +class CUpnpAppFilterInfo : public CBase + { +public: + static CUpnpAppFilterInfo* NewL(); + ~CUpnpAppFilterInfo(); + + /* + * Method is used to set the value for each key provided in the filter string as an input + * Returns error if the there is a mismatch of the key or key is not as per the GetApplicationList schema + * The default parameter( aDisplayInfoFlag ) is provided only to distinguish the child element "trustLevel" ( child element) + * of displayInfo element from "trustLevel" of appInfo element. + */ + void SetFilterInfoL( const TDesC8& aKey, const TDesC8& aValue, + TTerminalModeErrorCode& aErr, TBool aDisplayInfoFlag = EFalse ); + // inlined Getter methods + inline const TDesC8& AppName()const; + inline const TDesC8& AppDescription()const; + inline const TDesC8& MimeType()const; + inline const TDesC8& Width()const; + inline const TDesC8& Height()const; + inline const TDesC8& Depth()const; + inline const TDesC8& AllowedProfileIdList()const; + inline const TDesC8& ProtocolId()const; + inline const TDesC8& Format()const; + inline const TDesC8& Direction()const; + inline const TDesC8& AppCategory()const; + inline const TDesC8& AppTrustLevel()const; + inline const TDesC8& ContentCategory()const; + inline const TDesC8& ContentRules()const; + inline const TDesC8& ContentTrustLevel()const; + inline const TDesC8& AudioType()const; + inline const TDesC8& ResourceStatus()const; + inline const TDesC8& Signature()const; + +private: + CUpnpAppFilterInfo( ); + +private: + HBufC8* iAppName; + HBufC8* iAppDesc; + HBufC8* iMimeType; + HBufC8* iWidth; + HBufC8* iHeight; + HBufC8* iDepth; + HBufC8* iAllowedIdList; + HBufC8* iProtocolId; + HBufC8* iFormat; + HBufC8* iDirection; + HBufC8* iAppCategory; + HBufC8* iAppTrustLevel; + HBufC8* iContCategory; + HBufC8* iContentRules; + HBufC8* iContTrustLevel; + HBufC8* iAudioType; + HBufC8* iRscStatus; + HBufC8* iSignature; + }; + +#include "upnpappfilterinfo.inl" + +#endif //__UPNPAPPFILTERINFO_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpappfilterinfo.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpappfilterinfo.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,275 @@ +/** +* Copyright (c) 2010 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 __UPNPAPPFILTERINFO_INL__ +#define __UPNPAPPFILTERINFO_INL__ + + +// ----------------------------------------------------------------------------- +// CAppFilterInfo::AppName +// @return Returns the application name +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AppName()const + { + if ( iAppName ) + { + return *iAppName; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::AppDescription +// @return Returns the app description +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AppDescription()const + { + if ( iAppDesc ) + { + return *iAppDesc; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::MimeType +// @return Returns the mimetype of the icon +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::MimeType()const + { + if ( iMimeType ) + { + return *iMimeType; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Width +// @param[out] aFlag True or false +// @return Returns the width value of the icon +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Width()const + { + if ( iWidth ) + { + return *iWidth; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Height +// @param[out] aFlag True or false +// @return Returns the height value of the icon +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Height()const + { + if ( iHeight ) + { + return *iHeight; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Depth +// @return Returns the depth value of the icon +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Depth()const + { + if ( iDepth ) + { + return *iDepth; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::AllowedProfileId +// @return Returns the depth value of the icon +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AllowedProfileIdList()const + { + if ( iAllowedIdList ) + { + return *iAllowedIdList; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::ProtocolId +// @return Returns the protocol name +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::ProtocolId()const + { + if ( iProtocolId ) + { + return *iProtocolId; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Format +// @return Returns the format of remoting info element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Format()const + { + if ( iFormat ) + { + return *iFormat; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Direction +// @return Returns the direction of remoting info +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Direction()const + { + if ( iDirection) + { + return *iDirection; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::AppCategory +// @return Returns the category of application for appInfo element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AppCategory()const + { + if ( iAppCategory ) + { + return *iAppCategory; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::AppTrustLevel +// @return Returns the trust level of application for appInfo element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AppTrustLevel()const + { + if ( iAppTrustLevel ) + { + return *iAppTrustLevel; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::ContentCategory +// @return Returns the category of the content for display info element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::ContentCategory()const + { + if ( iContCategory ) + { + return *iContCategory; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::ContentCategory +// @return Returns the content rules for display info element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::ContentRules()const + { + if ( iContentRules ) + { + return *iContentRules; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::ContentTrustLevel +// @return Returns the trust level of the for display info element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::ContentTrustLevel()const + { + if ( iContTrustLevel ) + { + return *iContTrustLevel; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::AudioType +// @return Returns the type of audio for audio info element +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::AudioType()const + { + if ( iAudioType ) + { + return *iAudioType; + } + return KNullDesC8(); + } +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::ResourceStatus +// @return Returns the protocol name +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::ResourceStatus()const + { + if ( iRscStatus ) + { + return *iRscStatus; + } + return KNullDesC8(); + } + +// ----------------------------------------------------------------------------- +// CUpnpAppFilterInfo::Signature +// @return Returns the protocol name +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpAppFilterInfo::Signature()const + { + if ( iSignature ) + { + return *iSignature; + } + return KNullDesC8(); + } + +#endif //__UPNPAPPFILTERINFO_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpiconconversionactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpiconconversionactive.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,51 @@ +/** +* Copyright (c) 2010 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: CUpnpIconConversionActive class declaration. +* +*/ + +#ifndef __UPNPICONCONVERSIONACTIVE_H__ +#define __UPNPICONCONVERSIONACTIVE_H__ + +// Include Files +#include + +/** + * Class encapsulates an active object (AO) which handles the actual image conversion + * in the new thread created. + */ +class CUpnpIconConversionActive: public CActive + { +public: + static CUpnpIconConversionActive* NewL( RFile& aBitmapFile ); + ~CUpnpIconConversionActive(); + + void Convert( CFbsBitmap& aBitmap ); + TInt FetchError(); + void RunL(); + void DoCancel(); + +private : + CUpnpIconConversionActive(); + void ConstructL( RFile& aBitmapFile ); + +private: + /** + * CImageEncoder class provides functions that convert image data held + * in CFbsBitmap objects into well know formats( "bitmap" in this case ) + */ + CImageEncoder* iEncoder; + }; + +#endif //__UPNPICONCONVERSIONACTIVE_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpiconfileservetransaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpiconfileservetransaction.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,49 @@ +/** +* Copyright (c) 2010 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: CUpnpIconFileServeTransaction class declaration +* +*/ + +#ifndef __UPNPICONFILESERVETRANSACTION_H_ +#define __UPNPICONFILESERVETRANSACTION_H_ + +#include + +/** +* Class derives from CUpnpHttpServerTransaction base class. It sets the actual filepath +* which have to be served for http-get request +*/ +class CUpnpIconFileServeTransaction: public CUpnpHttpServerTransaction + { +public: + ~CUpnpIconFileServeTransaction(); + + static CUpnpIconFileServeTransaction* NewL( const TDesC& aOutFilePath, RFs& aIconSession ); + +public: + virtual void OnCallbackL( TUpnpHttpServerEvent aEvent ); + +protected: + CUpnpIconFileServeTransaction( RFs& aIconSession ); + void ConstructL( const TDesC& aOutFilePath ); + +private: + void DoCallbackL( TUpnpHttpServerEvent aEvent ); + +private: + RBuf iOutFilePath; + RFs& iIconFileSession ; + }; + +#endif // __UPNPICONFILESERVETRANSACTION_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpremotableappstore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpremotableappstore.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,46 @@ +/** +* Copyright (c) 2010 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: CUpnpRemotableAppStore class declaration +* +*/ + +#ifndef __UPNPREMOTABLEAPPSTORE_H__ +#define __UPNPREMOTABLEAPPSTORE_H__ + +#include "upnpremotableapp.h" + +/** +* Container class for all the remotable applications which have been registered +* with the terminal mode service. It provides an easy access to the list of remotable apps +*/ +class CUpnpRemotableAppStore : public CBase + { +public: + static CUpnpRemotableAppStore* NewL(); + void AddRemotableAppL( CUpnpRemotableApp* aApp ); + TInt RemoveRemotableApp( TUint aAppId ); + ~CUpnpRemotableAppStore(); + CUpnpRemotableApp& FetchRemotableApp( TInt aAppIndex )const; + const RArray& AppIdArray()const; + +private: + CUpnpRemotableAppStore(); + +private: + RPointerArray iRemotableAppArray; + RArray iAppIdArray; + }; + + +#endif // __UPNPREMOTABLEAPPSTORE_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnpsvgimageconverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnpsvgimageconverter.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,71 @@ +/** +* Copyright (c) 2010 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: CUpnpSvgImageConverter class declaration. +* +*/ + +#ifndef __UPNPSVGIMAGECONVERTER_H__ +#define __UPNPSVGIMAGECONVERTER_H__ + +// Include Files +#include + +/** + * CUpnpSvgImageConverter class acts as an intermediate between the invoker and the + * actual converter.Class encapsulates svg to bitmap conversion process. + * Does all the pre-processing needed before invoking actual conversion API. + * It takes svg file as an input and provides bmp ( converted ) file as an output. + * This class is responsible for creating a new thread and allocating resources to it. + * The icon file conversion happens in the new thread being created. + */ +class CUpnpSvgImageConverter : public CBase + { +public: + /** + * Two-phased constructor + * @param aIconWidth width of the requested icon + * @param aIconHeight height of the requested icon + */ + static CUpnpSvgImageConverter* NewL( TInt aIconWidth, TInt aIconHeight ); + /** + * Prepares the DOM for given SVG file, creates a new thread and returns + * the converted icon(bmp) file path + */ + void ConvertToBitmapL( const TDesC& aSvgFile, RBuf& aBitmapFile ); + ~CUpnpSvgImageConverter(); + CFbsBitmap& BitmapObject()const; + //static thread method serving as thread's main function + static TInt ImageConverter( TAny* aParam ); + //Leaving variant of thread function + static void ImageConverterL( CUpnpSvgImageConverter& aSvgConverter ); + +private: + // Constructors + CUpnpSvgImageConverter( ); + void ConstructL( TInt aIconWidth, TInt aIconHeight ); + // Thread creation method + void StartThreadL( ); + // "Getter" method to fetch file path + const TDesC& Filepath( )const; + +private: + RFbsSession iFbsSession; + RFs iFileSession; + CFbsBitmap* iMask; + CSvgEngineInterfaceImpl* iSvgModule; + RBuf iBitMapFilePath; + CFbsBitmap* iBitmap; + }; + +#endif // __UPNPSVGIMAGECONVERTER_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmappserverservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmappserverservice.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,110 @@ +/** +* Copyright (c) 2010 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: CUpnpTmAppServerService class declaration +* +*/ + +#ifndef __UPNPTMAPPSERVERSERVICE_H__ +#define __UPNPTMAPPSERVERSERVICE_H__ + + +// Include Files +#include +#include +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CUPnPTmServerDevice; +class CUpnpTmServerImpl; + + +// CLASS DECLARATION + +/** +* TerminalMode Application Server Service class. It encapsulates all the major actions +* needed for accessing and controlling the remotable apps from the Control Point. +* +*/ + +class CUpnpTmAppServerService: public CUpnpServiceImplementation, + public MUpnpHttpServerTransactionCreator, + public MUpnpHttpServerObserver + { +public: // Constructors and destructors + + /** + * Two-phased constructor. + * @param aService Parent service + */ + static CUpnpTmAppServerService* NewL( CUpnpDevice& aUpnpDevice, const TDesC& aDescriptionPath , + CUpnpTmServerImpl& aTmServerImpl ); + + /** + * Destructor function called automatically from the destructor of a + * derived class + **/ + ~CUpnpTmAppServerService(); + +public: //from CUpnpServiceImplementation + /** + * This functions is a entry point for actions. See coments in base class + */ + void ActionReceivedLD( CUpnpAction* aAction ); + void AppStatusUpdateEventL( const TDesC8& aStatusUpdateBuffer ); + void AppListUpdateEventL( const TDesC8& aListUpdateBuffer ); + +public: //from MUpnpHttpServerTransactionCreator + void NewTransactionL( const TDesC8& aMethod, const TDesC8& aUri, + const TInetAddr& aSender, CUpnpHttpServerTransaction*& aResultTrans ); + +private: //From MUpnpHttpServerObserver + void HttpEventLD( CUpnpHttpMessage* aMessage ); + +private: + TUpnpErrorCode GetAppListActionL( CUpnpAction* aAction ); + TUpnpErrorCode LaunchAppActionL( CUpnpAction* aAction ); + TUpnpErrorCode TerminateAppActionL( CUpnpAction* aAction ); + TUpnpErrorCode GetAppStatusActionL( CUpnpAction* aAction ); + +private: // Constructors + + /** + * C++ default constructor. + */ + CUpnpTmAppServerService( CUpnpDevice& aUpnpDevice, CUpnpTmServerImpl& aTmServerImpl ); + + /** + * Second phase of the constructor. + * Initialises a DOM tree. + * By default Symbian 2nd phase constructor is private. + * @param service Parent service + */ + void ConstructL(const TDesC& aDescriptionPath ); + + void ConstructHttpL( ); + TInt ConvertDescriptorToInt( const TDesC8& aDes, TUint& aErr ); + +private: + CUpnpHttpServerSession* iHttpServerSession; + CUpnpDevice& iUpnpDevice; + CUpnpTmServerImpl& iTmServerImpl; + }; + +#endif // __UPNPTMAPPSERVERSERVICE_H__ + +// End Of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmclientprofileservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmclientprofileservice.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,93 @@ +/** +* Copyright (c) 2010 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: CUpnpTmClientProfileService class declaration +* +*/ + +#ifndef __UPNPTMCLIENTPROFILESERVICE_H__ +#define __UPNPTMCLIENTPROFILESERVICE_H__ + + +// Include Files +#include +#include +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CUPnPTmServerDevice; +class CUpnpTmServerImpl; + +// CLASS DECLARATION + +/** + * TerminalMode Client Profile Service class. It encapsulates all the actions related to the client + * profile and their related state variables. + */ +class CUpnpTmClientProfileService: public CUpnpServiceImplementation + { +public: // Constructors and destructors + /** + * Two-phased constructor. + * @param aService Parent service + */ + static CUpnpTmClientProfileService* NewL( CUpnpDevice& aUpnpDevice, const TDesC& aDescriptionPath , + CUpnpTmServerImpl& aTmServerImpl ); + + /** + * Destructor function called automatically from the destructor of a + * derived class + **/ + ~CUpnpTmClientProfileService(); + +public: //from CUpnpServiceImplementation + /** + * This functions is a entry point for actions. See coments in base class + */ + void ActionReceivedLD( CUpnpAction* aAction ); + + void UnUsedProfileIdEventL(const TDesC8& aUnusedProfileIdBuffer); + +private: + // Actions supported by the client profile service + TUpnpErrorCode GetMaxNumProfilesActionL( CUpnpAction* aAction ); + TUpnpErrorCode SetClientProfileActionL( CUpnpAction* aAction ); + TUpnpErrorCode GetClientProfileActionL( CUpnpAction* aAction ); + +private: // Constructors + /** + * C++ default constructor. + */ + CUpnpTmClientProfileService( CUpnpDevice& aUpnpDevice, + CUpnpTmServerImpl& aTmServerImp ); + /** + * Second phase of the constructor. + * Initialises a DOM tree. + * By default Symbian 2nd phase constructor is private. + * @param service Parent service + */ + void ConstructL(const TDesC& aDescriptionPath ); + +private: + CUpnpHttpServerSession* iHttpServerSession; + CUpnpDevice& iUpnpDevice; + CUpnpTmServerImpl& iTmServerImpl; + }; + +#endif // __UPNPTMCLIENTPROFILESERVICE_H__ + +// End Of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmfilteredapplist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmfilteredapplist.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,66 @@ +/** +* Copyright (c) 2010 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: CUpnpTmFilteredAppList class declaration +* +*/ + +#ifndef __UPNPTMFILTEREDAPPLIST_H__ +#define __UPNPTMFILTEREDAPPLIST_H__ + + +//System Includes +#include + +//User Includes +#include "upnpterminalmodeicon.h" +#include "upnpremotableappstore.h" +#include "upnpappfilterinfo.h" + +//Forward Declaration +class CUpnpTmServerImpl; + + +/** + * Constructs the filtered GetApplicationList action Response. + * Applies the AppListingFilter criteria while creating the soap + * response buffer. + * + */ +class CUpnpTmFilteredAppList : public CBase + { +public: + static CUpnpTmFilteredAppList* NewL( CUpnpTmServerImpl& aTmServerImpl ); + + ~CUpnpTmFilteredAppList(); + void ParseAppFilterStringL( const TDesC8& aAppFilter, TTerminalModeErrorCode& aErr ); + void ConstructFilteredGetAppListResponseL( TInt aAppIndex ); + const TDesC8& SignatureElement()const; + +private: + CUpnpTmFilteredAppList( CUpnpTmServerImpl& aTmServerImpl ); + void ConstructL( ); + + TBool TerminalModeInfoMatchingL( const CUpnpTmInfoElement& aTmInfoElement )const; + TBool TmInfoElementMatchingL( const CUpnpTmInfoElement& aTmInfoElement,TInt aIndex )const; + void IconMatchingL( TInt aAppIndex ); + void ConstructFilteredResponseL( TInt aAppIndex ); + TBool IconLookUp( CUpnpTerminalModeIcon& aIcon ); + const TDesC8& RemoveWhiteSpace( TPtrC8& aData ); + +private: + CUpnpAppFilterInfo* iFilterInfo; + CUpnpTmServerImpl& iTmServerImpl; + }; + +#endif // __UPNPTMFILTEREDAPPLIST_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmiconmapping.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmiconmapping.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,58 @@ +/** +* Copyright (c) 2010 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: CUpnpTmIconMapping class declaration. +* +*/ + +#ifndef __UPNPTMICONMAPPING_H__ +#define __UPNPTMICONMAPPING_H__ + +// Include Files +#include +#include +#include "upnptmclienticonpref.h" + +// Constants +const TInt KExpectedMaxIconParms = 20; + +/** + * Class maintains a mapping between application icon filepath and its URL. It also + * determines whether the conversion is needed for a particular requested + * application icon( http request ) and finalizes the dimensions of the icon which needs + * to be served + */ +class CUpnpTmIconMapping : public CBase + { +public: + static CUpnpTmIconMapping* NewL( ); + ~CUpnpTmIconMapping(); + +public: + void AddIconFileInfoL( const TDesC8& aUrl, const TDesC& aPath, TInt aWidth, TInt aHeight ); + TInt GetSvgIconPath( const TDesC8& aUrl,RBuf& aSvgFilePath ); + TBool IsConversionNeeded( TInt aIndex, const CUpnpTmClientIconPref& aClientIconPref, + TInt& aIconWidth, TInt& aIconHeight ); + +private: + CUpnpTmIconMapping(); + void ConstructL(); + +private: + CDesC8Array* iFileUrlArray; + CDesCArray* iFilePathArray; + RArray iWidthArray; + RArray iHeightArray; + }; + +#endif // __UPNPTMICONMAPPING_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmserverdescriptionprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmserverdescriptionprovider.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,76 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDescriptionProvider class declaration +* +*/ + +#ifndef __UPNPTMSERVERDESCRIPTIONPROVIDER_H__ +#define __UPNPTMSERVERDESCRIPTIONPROVIDER_H__ + +// Include Files +#include +#include +#include +#include +#include + +const TUint KForwardSlash = '/'; + +/** + * CUpnpTmServerDescriptionProvider + * Provides description of device and its services, and icons. + */ +class CUpnpTmServerDescriptionProvider : public CBase, + public MUpnpDeviceDescriptionProvider + { +public: + // Destructor. + ~CUpnpTmServerDescriptionProvider(); + + // Two-phased constructor. + static CUpnpTmServerDescriptionProvider* NewL(); + +private: // from MUpnpDeviceDescriptionProvider + + virtual TInt OnDeviceDescription( CUpnpDeviceDescriptionRequest& aRequest ); + + virtual TInt OnServiceDescription( CUpnpDeviceDescriptionRequest& aRequest ); + + virtual TInt OnIcon( CUpnpDeviceDescriptionRequest& aRequest ); + + virtual TInt GetFile( const TDesC8& aUri, RFile& aFile ); + +private: + // Constructor for performing 1st stage construction + CUpnpTmServerDescriptionProvider(); + + //Default constructor for performing 2nd stage construction + void ConstructL(); + + /** + * Main function to service requests. + * @param aRequest request to service + * @return error code + */ + TInt OnRequest( CUpnpDeviceDescriptionRequest& aRequest ); + + void OnRequestL( const TDesC8& aUrlPath, const TDesC8& aFileName ); + +private: + // File server session used to open file + RFs iFs; + TBuf iFilePath; + }; + +#endif // __UPNPTMSERVERDESCRIPTIONPROVIDER_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmserverdevice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmserverdevice.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,75 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDevice class declaration +* +*/ + +#ifndef __UPNPTMSERVERDEVICE_H__ +#define __UPNPTMSERVERDEVICE_H__ + +// System Includes +#include +#include +#include + +// User Includes +#include "upnptmappserverservice.h" +#include "upnptmclientprofileservice.h" +#include "upnptmserverdevicexmlparser.h" +#include "upnptmserverdescriptionprovider.h" + + +// CLASS DECLARATION + +// UPnP Terminal Mode Server Device container. + +class CUpnpTmServerDevice : public CBase + { +public: + // Two-phased constructor. + static CUpnpTmServerDevice* NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + CUpnpTmServerImpl& aTmServerImpl ); + // Destructor. + ~CUpnpTmServerDevice(); + +public: + // Starts TM Server - Device, Service + void StartTmServerDeviceL(); + // Stops TM Server - Device, Service + void StopTmServerDeviceL(); + //Event handling methods invoked by CUpnpTmServerImpl object + void AppStatusUpdateL( const TDesC8& aStatusEventBuffer ); + void AppListUpdateL( const TDesC8& aListEventBuffer ); + void UnUsedProfileIdUpdateL( const TDesC8& aUnusedProfileIdBuffer ); + +private: + // Constructor + CUpnpTmServerDevice(); + // Perform the second phase construction of a CUpnpTmServerDevice object + void ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo,CUpnpTmServerImpl& aTmServerImpl ); + +private: + // iDevice TerminalMode Server Device + CUpnpDeviceImplementation* iDevice; + CUpnpTmAppServerService* iTmAppServerService; + CUpnpTmClientProfileService* iTmClientProfileService; + // Provides files for description part + CUpnpTmServerDescriptionProvider* iDescriptionProvider; + // Services device description + CUpnpDeviceDescriptionStore* iDescriptionStore; + CUpnpTmServerDeviceXmlParser* iXmlParser; + TBool iIsStarted; + }; + +#endif //__UPNPTMSERVERDEVICE_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmserverdevicexmlparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmserverdevicexmlparser.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,97 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDeviceXmlParser class declaration +* +*/ + +#ifndef __UPNPTMSERVERDEVICEXMLPARSER_H__ +#define __UPNPTMSERVERDEVICEXMLPARSER_H__ + +// System Includes +#include +#include +#include +#include +#include +#include + +// User Include +#include "upnptmserverdeviceinfo.h" + +// Constants +const TUint KBufSize = 20480; +const TUint KMaxBufLength = 255; +const TUint KDirectorySeparator = '\\'; + +using namespace Xml; + +/** + * This class takes the root device content as xml formatted buffer which serves as placeholders + * for many element values as an input and then constructs the complete device description + * xml file and service xml files which are published over the network + */ +class CUpnpTmServerDeviceXmlParser: public CBase, + public MContentHandler + { +public: + static CUpnpTmServerDeviceXmlParser* NewL( CUpnpTmServerDeviceInfo& aDeviceInfo ); + ~CUpnpTmServerDeviceXmlParser(); + void StartL(); + inline const TDesC& DevicePath(); + inline const TDesC& AppServerSrvPath(); + inline const TDesC& ClientProfileSrvPath(); + inline const TDesC8& DescriptionUri(); + +private: + CUpnpTmServerDeviceXmlParser( CUpnpTmServerDeviceInfo& aDeviceInfo ); + void ConstructL( ); + void DeleteDirectory(); + +private: // From MContentHandler + void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode); + void OnEndDocumentL(TInt aErrorCode); + void OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode); + void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode); + void OnContentL(const TDesC8& aBytes, TInt aErrorCode); + void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode); + void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode); + void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode); + void OnSkippedEntityL(const RString& aName, TInt aErrorCode); + void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode); + inline void OnError(TInt aErrorCode); + inline TAny* GetExtendedInterface(const TInt32 aUid); + +private: + RBuf8 iAppServerSrvDescription; + RBuf8 iClientProfSrvDescription; + RBuf8 iReadBuf; + RBuf8 iDeviceDescription; + CParser* iParser; + RBuf iDescFilePath; + RBuf iAppServerSrvFilePath; + RBuf iClientProfSrvFilePath; + RBuf8 iDescriptionUri; + RFs iFs; + RBuf iDeviceDir; + RBuf iIconDirectory; + RMobilePhone iPhone; + RTelServer iEtelSrv; + RMobilePhone::TMobilePhoneIdentityV1 iPhoneId; + CUpnpTmServerDeviceInfo& iDeviceInfo; + CFileMan* iFileMan; + }; + +#include "upnptmserverdevicexmlparser.inl" + +#endif //__UPNPTMSERVERDEVICEXMLPARSER_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmserverdevicexmlparser.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmserverdevicexmlparser.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,79 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDeviceXmlParser INL file. +* +*/ + +#ifndef __UPNPTMSERVERDEVICEXMLPARSER_INL__ +#define __UPNPTMSERVERDEVICEXMLPARSER_INL__ + + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnError +// ----------------------------------------------------------------------------- +// +inline void CUpnpTmServerDeviceXmlParser::OnError(TInt /*aErrorCode*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::GetExtendedInterface +// ----------------------------------------------------------------------------- +// +inline TAny* CUpnpTmServerDeviceXmlParser::GetExtendedInterface(const TInt32 /*aUid*/) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::DevicePath +// @return Returns the device description filepath +// ----------------------------------------------------------------------------- +// +inline const TDesC& CUpnpTmServerDeviceXmlParser::DevicePath() + { + return iDescFilePath; + } + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::AppServerSrvPath +// @return Returns TmAppServerService filepath +// ----------------------------------------------------------------------------- +// +inline const TDesC& CUpnpTmServerDeviceXmlParser::AppServerSrvPath() + { + return iAppServerSrvFilePath; + } + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::ClientProfileSrvPath +// @return Returns TmClientProfileService filepath +// ----------------------------------------------------------------------------- +// +inline const TDesC& CUpnpTmServerDeviceXmlParser::ClientProfileSrvPath() + { + return iClientProfSrvFilePath; + } + +// ----------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::DescriptionUri +// @return Returns the device description URI +// ----------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTmServerDeviceXmlParser::DescriptionUri() + { + return iDescriptionUri; + } + +#endif // __UPNPREMOTEUIDEVICEXMLPARSER_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/inc/upnptmserverimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/inc/upnptmserverimpl.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,130 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerImpl class declaration +* +*/ + +#ifndef __UPNPTMSERVERIMPL_H__ +#define __UPNPTMSERVERIMPL_H__ + +// System Includes +#include +#include +#include + +// User Includes +#include "upnptmserver.h" +#include "upnptminfoelement.h" +#include "upnptmserverdevice.h" +#include "upnpremotableappstore.h" +#include "upnptmfilteredapplist.h" +#include "upnptmiconmapping.h" +#include "upnpsvgimageconverter.h" + +//Literals +_LIT8(KStartApp, "<app>"); +_LIT8(KEndApp, "</app>"); +_LIT8(KStartIconList, "<iconList>"); +_LIT8(KEndIconList, "</iconList>"); +_LIT8(KStartNameDesc, "<description>"); +_LIT8(KEndNameDesc, "</description>"); +_LIT8(KWildCard, "*"); +_LIT8(KAtToken, "@"); + +//Constants +const TUint KActionBufferLength = 1000; + +/** + * Implementation class ( body ) for CUpnpTmServer class + * + */ +class CUpnpTmServerImpl : public CBase + { +public: + static CUpnpTmServerImpl* NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + MUpnpTmServerObserver& aTmServerObserver ); + + virtual ~CUpnpTmServerImpl(); + + void RegisterAppL( CUpnpRemotableApp* aRemotableApp ); + void RegisterAppsL(const RPointerArray& aRemotableAppList); + TInt UnRegisterApp( TUint aAppId ); + TInt UnRegisterApps( const RArray& aAppIdArray ); + + void SetXmlSignatureL( const TDesC8& aSignature ); + const TDesC8& XmlSignature()const; + // Start and Stop methods + void StartDeviceL(); + void StopDeviceL(); + CUpnpRemotableApp& GetRemotableApp( TUint aAppId, TInt& aErr ); + void GenerateUrlComponents( CUpnpHttpServerSession& aHttpServerSession ); + const TDesC8& ConvertIntToDescriptor( TInt aIntVal ); + +public: + //Action handling methods + const TDesC8& GetApplicationListL( const TDesC8& aAppListFilter, + TUint aProfileId, TTerminalModeErrorCode& aErr ); + TTerminalModeErrorCode LaunchApp( TUint aAppId, TUint aProfileId, RBuf8& aUrl ); + TTerminalModeErrorCode TerminateApp( TUint aAppId, TUint aProfileId ); + void GetAppStatusL( const TDesC8& aAppIdBuffer,RBuf8& aStatusType, + TTerminalModeErrorCode& aErr ); + TTerminalModeErrorCode GetMaxNumProfiles( TUint& aNumMaxProfiles ); + TTerminalModeErrorCode SetClientProfile( TUint aProfileId, const TDesC8& aInputClientProfile, + RBuf8& aResultProfile ); + TTerminalModeErrorCode GetClientProfile( TUint aProfileId, RBuf8& aClientProfile ); + + //Event Notification methods + void UpdateAppStatusL( const RArray& aUpdatedAppIdList ); + void UpdateAppListL( const RArray& aUpdatedAppIdList ); + void UpdateUnusedProfileIdsL( const RArray& aUnusedProfileIdList ); + + // Application icon fetching method + void GetIconInfoL( const TDesC8& aUrl, CUpnpHttpServerTransaction*& aResultTrans ); + +private: + CUpnpTmServerImpl( MUpnpTmServerObserver& aTmServerObserver ); + void ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo ); + void RestoreIap(); + + void AppendDataL( const TDesC8& aData ); + TTerminalModeErrorCode AuthorizeApp( TUint aAppId ); + void ConstructActionResponseBufferL( TInt aAppIndex ); + void ConstructLeadingSoapBufferL( TInt aAppIndex ); + void SetRemotableAppIconInfoL( const CUpnpTerminalModeIcon& aTmIcon ); + void SetAllowedProfileIdListL( TInt aAppIndex ); + void SetTerminalModeInfoElementL( const CUpnpTmInfoElement& aTmInfoElement ); + void SetResourceStatusL( TInt aAppIndex ); + void CreateGetAppStatusResponseL( TUint aAppId, TTerminalModeErrorCode& aErr ); + void CreateEventMessageL( const RArray& aIdList ); + friend class CUpnpTmFilteredAppList; + +private: + CUpnpTmServerDevice* iTmServerDevice; + MUpnpTmServerObserver& iTmServerObserver; + RBuf8 iResponseBuf; + TBuf8 iAddrBuf; + TBuf8 iPortBuf; + RBuf8 iXmSignature; + CUpnpRemotableAppStore* iAppStore; + RFs iIconFileSession; + CUpnpTmFilteredAppList* iFilteredAppList; + TBuf8 iBufVal; + CUpnpSettings* iIapSetting; + TInt iIapId; // Original IAP ID used by DLNA + TUint iProfileId; + // Mapping between application icon filepath and its URL + CUpnpTmIconMapping* iIconMapping; + }; + +#endif // __UPNPTMSERVERIMPL_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/rom/terminalmodeservice.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/rom/terminalmodeservice.iby Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,29 @@ +/** +* Copyright (c) 2010 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: IBY file for Terminal Mode Service subsystem +* +*/ + + +#ifndef __TERMINALMODESERVICE_IBY__ +#define __TERMINALMODESERVICE_IBY__ + + +file=ABI_DIR\BUILD_DIR\terminalmodeservice.dll \sys\bin\terminalmodeservice.dll + + + +#endif // __TERMINALMODESERVICE_IBY__ + +// End of File \ No newline at end of file diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpappfilterinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpappfilterinfo.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,254 @@ +/** +* Copyright (c) 2010 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: CUpnpAppFilterInfo class implementation +* +*/ + + +// INCLUDE FILES +#include "upnpappfilterinfo.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpappfilterinfoTraces.h" +#endif + +//Literals +_LIT8(KAppName, "name"); +_LIT8(KAppDesc, "description"); +_LIT8(KMimeType, "mimetype"); +_LIT8(KWidth, "width"); +_LIT8(KHeight, "height"); +_LIT8(KDepth, "depth"); +_LIT8(KAllowedProfileIds, "allowedProfileIDs"); +_LIT8(KRscStatus, "resourceStatus"); +_LIT8(KSignature, "signature"); + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpAppFilterInfo::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpAppFilterInfo* CUpnpAppFilterInfo::NewL( ) + { + OstTraceFunctionEntry0( CUPNPAPPFILTERINFO_NEWL_ENTRY ); + return ( new (ELeave) CUpnpAppFilterInfo() ); + } + +// --------------------------------------------------------------------------------- +// CUpnpAppFilterInfo::CUpnpAppFilterInfo +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpAppFilterInfo::CUpnpAppFilterInfo( ) + { + iAppName = NULL; + iAppDesc = NULL; + iMimeType = NULL; + iWidth = NULL; + iHeight = NULL; + iDepth = NULL; + iAllowedIdList = NULL; + iProtocolId = NULL; + iFormat = NULL; + iDirection = NULL; + iAppCategory = NULL; + iAppTrustLevel = NULL; + iContCategory = NULL; + iContentRules = NULL; + iContTrustLevel = NULL; + iAudioType = NULL; + iRscStatus = NULL; + iSignature = NULL; + } + +// --------------------------------------------------------------------------------- +// CUpnpAppFilterInfo::~CUpnpAppFilterInfo +// C++ default destructor +// --------------------------------------------------------------------------------- +// +CUpnpAppFilterInfo::~CUpnpAppFilterInfo() + { + OstTraceFunctionEntry0( CUPNPAPPFILTERINFO_CUPNPAPPFILTERINFO_ENTRY ); + delete iAppName; + delete iAppDesc; + delete iMimeType; + delete iWidth; + delete iHeight; + delete iDepth; + delete iAllowedIdList; + delete iProtocolId; + delete iFormat; + delete iDirection; + delete iAppCategory; + delete iAppTrustLevel; + delete iContCategory; + delete iContentRules; + delete iContTrustLevel; + delete iAudioType; + delete iRscStatus; + delete iSignature; + OstTraceFunctionExit0( CUPNPAPPFILTERINFO_CUPNPAPPFILTERINFO_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpAppFilterInfo::SetFilterInfoL +// It compares the key with the individual elements and if it matches with none then it +// returns invalid argument as an error. +// @param aKey Key name +// @param aValue Value of the key +// @param aDisplayInfoFlag True if info type is displayInfo, false otherwise. +// Default is false. It is used to distinguish "trustLevel" element +// of appInfo and displayInfo. +// @param aErr Terminal Mode error code +// --------------------------------------------------------------------------------- +// +void CUpnpAppFilterInfo::SetFilterInfoL( const TDesC8& aKey, const TDesC8& aValue, + TTerminalModeErrorCode& aErr, TBool aDisplayInfoFlag ) + { + OstTraceFunctionEntry0( CUPNPAPPFILTERINFO_SETFILTERINFOL_ENTRY ); + aErr = ETerminalModeInvalidArgument; + if ( aKey.Compare(KAppName) == KErrNone ) + { + delete iAppName; + iAppName = NULL; + iAppName = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KAppDesc) == KErrNone ) + { + delete iAppDesc; + iAppDesc = NULL; + iAppDesc = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KMimeType) == KErrNone ) + { + delete iMimeType; + iMimeType = NULL; + iMimeType = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KWidth) == KErrNone ) + { + delete iWidth; + iWidth = NULL; + iWidth = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KHeight) == KErrNone ) + { + delete iHeight; + iHeight = NULL; + iHeight = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KDepth) == KErrNone ) + { + delete iDepth; + iDepth = NULL; + iDepth = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KAllowedProfileIds) == KErrNone ) + { + delete iAllowedIdList; + iAllowedIdList = NULL; + iAllowedIdList = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KProtocolId) == KErrNone ) + { + delete iProtocolId; + iProtocolId = NULL; + iProtocolId = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KFormat) == KErrNone ) + { + delete iFormat; + iFormat = NULL; + iFormat = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KRemotingDirection) == KErrNone ) + { + delete iDirection; + iDirection = NULL; + iDirection = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KAppCategory) == KErrNone ) + { + delete iAppCategory; + iAppCategory = NULL; + iAppCategory = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if (( aKey.Compare(KTrustLevel) == KErrNone ) && ( !aDisplayInfoFlag )) + { + delete iAppTrustLevel; + iAppTrustLevel = NULL; + iAppTrustLevel = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KContCategory) == KErrNone ) + { + delete iContCategory; + iContCategory = NULL; + iContCategory = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KContentRules) == KErrNone ) + { + delete iContentRules; + iContentRules = NULL; + iContentRules = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if (( aKey.Compare(KTrustLevel) == KErrNone ) && ( aDisplayInfoFlag )) + { + delete iContTrustLevel; + iContTrustLevel = NULL; + iContTrustLevel = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KAudioType) == KErrNone ) + { + delete iAudioType; + iAudioType = NULL; + iAudioType = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KRscStatus) == KErrNone ) + { + delete iRscStatus; + iRscStatus = NULL; + iRscStatus = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + else if ( aKey.Compare(KSignature) == KErrNone ) + { + delete iSignature; + iSignature = NULL; + iSignature = aValue.AllocL(); + aErr = ETerminalModeSuccess; + } + OstTraceFunctionExit0( CUPNPAPPFILTERINFO_SETFILTERINFOL_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpiconconversionactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpiconconversionactive.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,132 @@ +/** +* Copyright (c) 2010 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: CUpnpIconConversionActive class implementation. +* +*/ + +#include "upnpiconconversionactive.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpiconconversionactiveTraces.h" +#endif + +// Literal +_LIT8(KBmpMimeType, "image/bmp"); + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpIconConversionActive* CUpnpIconConversionActive::NewL( RFile& aBitmapFile ) + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_NEWL_ENTRY ); + CUpnpIconConversionActive* self = new (ELeave) CUpnpIconConversionActive( ); + CleanupStack::PushL(self); + self->ConstructL( aBitmapFile ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::CUpnpIconConversionActive +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------------- +// +CUpnpIconConversionActive::CUpnpIconConversionActive( ) + :CActive(EPriorityStandard) + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_CUPNPICONCONVERSIONACTIVE_ENTRY ); + CActiveScheduler::Add(this); + OstTraceFunctionExit0( CUPNPICONCONVERSIONACTIVE_CUPNPICONCONVERSIONACTIVE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpIconConversionActive::ConstructL( RFile& aBitmapFile ) + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_CONSTRUCTL_ENTRY ); + // Provides access to the ICL (image conversion library) encoders. + iEncoder = CImageEncoder::FileNewL( aBitmapFile,KBmpMimeType()); + OstTraceFunctionExit0( CUPNPICONCONVERSIONACTIVE_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::~CUpnpIconConversionActive +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpIconConversionActive::~CUpnpIconConversionActive() + { + OstTraceFunctionEntry0( DUP1_CUPNPICONCONVERSIONACTIVE_CUPNPICONCONVERSIONACTIVE_ENTRY ); + Cancel(); + delete iEncoder; + OstTraceFunctionExit0( DUP1_CUPNPICONCONVERSIONACTIVE_CUPNPICONCONVERSIONACTIVE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::Convert +// Place where actual image conversion is invoked. +// Its an asynchronous conversion. +// @param aBitmap Reference to Bitmap object +// --------------------------------------------------------------------------------- +// +void CUpnpIconConversionActive::Convert( CFbsBitmap& aBitmap ) + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_CONVERT_ENTRY ); + TRequestStatus* status = &iStatus; + // Converts image data held in CFbsBitmap object + iEncoder->Convert( status,aBitmap); //Actual conversion API + SetActive(); + OstTraceFunctionExit0( CUPNPICONCONVERSIONACTIVE_CONVERT_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::RunL +// Event handler. Stops the active scheduler. +// --------------------------------------------------------------------------------- +// +void CUpnpIconConversionActive::RunL() + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_RUNL_ENTRY ); + CActiveScheduler::Stop(); + OstTraceFunctionExit0( CUPNPICONCONVERSIONACTIVE_RUNL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::DoCancel +// --------------------------------------------------------------------------------- +// +void CUpnpIconConversionActive::DoCancel() + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpIconConversionActive::FetchError +// Returns the completion status. +// @return Returns completion code. +// --------------------------------------------------------------------------------- +// +TInt CUpnpIconConversionActive::FetchError() + { + OstTraceFunctionEntry0( CUPNPICONCONVERSIONACTIVE_FETCHERROR_ENTRY ); + return ( iStatus.Int() ); + } diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpiconfileservetransaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpiconfileservetransaction.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,142 @@ +/** +* Copyright (c) 2010 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: CUpnpIconFileServeTransaction implementation. +* +*/ + + +#include "upnpiconfileservetransaction.h" +#include +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpiconfileservetransactionTraces.h" +#endif + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpIconFileServeTransaction* CUpnpIconFileServeTransaction::NewL( const TDesC& aOutFilePath, + RFs& aIconFileSession ) + + { + OstTraceFunctionEntry0( CUPNPICONFILESERVETRANSACTION_NEWL_ENTRY ); + CUpnpIconFileServeTransaction* self = + new (ELeave) CUpnpIconFileServeTransaction( aIconFileSession ); + CleanupStack::PushL( self ); + self->ConstructL( aOutFilePath ); + CleanupStack::Pop( self ); + OstTraceFunctionExit0( CUPNPICONFILESERVETRANSACTION_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpIconFileServeTransaction::ConstructL( const TDesC& aOutFilePath ) + { + OstTraceFunctionEntry0( CUPNPICONFILESERVETRANSACTION_CONSTRUCTL_ENTRY ); + iOutFilePath.CreateL( aOutFilePath ); + OstTraceFunctionExit0( CUPNPICONFILESERVETRANSACTION_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::CUpnpIconFileServeTransaction +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpIconFileServeTransaction::CUpnpIconFileServeTransaction( RFs& aIconFileSession ) + :iIconFileSession( aIconFileSession ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::~CUpnpIconFileServeTransaction +// Default Destructor +// --------------------------------------------------------------------------------- +// +CUpnpIconFileServeTransaction::~CUpnpIconFileServeTransaction() + { + OstTraceFunctionEntry0( CUPNPICONFILESERVETRANSACTION_CUPNPICONFILESERVETRANSACTION_ENTRY ); + iOutFilePath.Close(); + OstTraceFunctionExit0( CUPNPICONFILESERVETRANSACTION_CUPNPICONFILESERVETRANSACTION_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::OnCallbackL +// Handler for transaction event. +// Method is invoked when a particular event arrives. +// In case of leave,it traps the error and returns the http error code. +// @param aEvent Server event +// --------------------------------------------------------------------------------- +// +void CUpnpIconFileServeTransaction::OnCallbackL( TUpnpHttpServerEvent aEvent ) + { + OstTraceFunctionEntry0( CUPNPICONFILESERVETRANSACTION_ONCALLBACKL_ENTRY ); + TRAPD( err, DoCallbackL( aEvent ) ); + if ( err != KErrNone ) + { + SetHttpCode( err ); + } + OstTraceFunctionExit0( CUPNPICONFILESERVETRANSACTION_ONCALLBACKL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpIconFileServeTransaction::DoCallbackL +// Method is used to set the data source file and respective http error codes. +// @param aEvent Server event +// --------------------------------------------------------------------------------- +// +void CUpnpIconFileServeTransaction::DoCallbackL( TUpnpHttpServerEvent aEvent ) + { + OstTraceFunctionEntry0( CUPNPICONFILESERVETRANSACTION_DOCALLBACKL_ENTRY ); + switch ( aEvent ) + { + case EOnRequestStart: + { + RFile file; + if ( file.Open( iIconFileSession,iOutFilePath,EFileShareReadersOnly | EFileRead ) == KErrNone ) + { + CleanupClosePushL(file); + // Sets the file which have to be served in response to http request + SetDataSourceL( file ); + CleanupStack::Pop(&file); + } + else + { + // if the error occurs set the error code in http response + SetHttpCode( -EHttpNotFound ); + } + }break; + case EOnComplete: + break; + case EOnResponseStart: + { + SetHttpCode( KErrNone ); + } break; + default: + break; + } + OstTraceFunctionExit0( CUPNPICONFILESERVETRANSACTION_DOCALLBACKL_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpremotableapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpremotableapp.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,177 @@ +/** +* Copyright (c) 2010 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: CUpnpRemotableApp class implementation. +* +*/ + +#include "upnpremotableapp.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpremotableappTraces.h" +#endif + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::NewL +// Two-phased constructor. +// @param aAppId App ID of the remotable app +// @param aAppName Name of the remotable app +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpRemotableApp* CUpnpRemotableApp::NewL( TUint aAppId ,const TDesC8& aAppName ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_NEWL_ENTRY ); + CUpnpRemotableApp* self = new (ELeave) CUpnpRemotableApp(aAppId); + CleanupStack::PushL(self); + self->ConstructL( aAppName ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::CUpnpRemotableApp +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------------- +// +CUpnpRemotableApp::CUpnpRemotableApp( TUint aAppId ):iAppId(aAppId) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpRemotableApp::ConstructL( const TDesC8& aAppname ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_CONSTRUCTL_ENTRY ); + iAppName.CreateL(aAppname); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::~CUpnpRemotableApp +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpRemotableApp::~CUpnpRemotableApp() + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_CUPNPREMOTABLEAPP_ENTRY ); + iTmInfoElementList.ResetAndDestroy(); + iTmInfoElementList.Close(); + iProfileIdList.Close(); + iIconList.ResetAndDestroy(); + iIconList.Close(); + iAppName.Close(); + iAppDescription.Close(); + iResourceStatus.Close(); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_CUPNPREMOTABLEAPP_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::AddIconL +// Method is used to add an icon element to the application. +// @param aIcon Pointer to TerminalMode icon object +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpRemotableApp::AddIconL(CUpnpTerminalModeIcon* aIcon) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_ADDICONL_ENTRY ); + iIconList.AppendL(aIcon); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_ADDICONL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::SetAppDescriptionL +// Method is used to add the description of the application +// @param aDescription Description of the aapplication +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpRemotableApp::SetAppDescriptionL( const TDesC8& aDescription ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_SETAPPDESCRIPTIONL_ENTRY ); + iAppDescription.Close(); + iAppDescription.CreateL(aDescription); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_SETAPPDESCRIPTIONL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::SetAllowedProfileIdListL +// Method is used to set the list of allowed profile IDs for the application. +// @param aProfileIdList Reference to the list of allowed profile IDs. +// A copy of the list is maintained. +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpRemotableApp::SetAllowedProfileIdListL( const RArray& aProfileIdList ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_SETALLOWEDPROFILEIDLISTL_ENTRY ); + iProfileIdList.Close(); + /** + * Create a copy of the profile ID list. + * Only distinct and unique profile IDs are copied into the array. + */ + for ( TInt i(0); i < aProfileIdList.Count(); i++ ) + { + OstTrace1( TRACE_NORMAL, CUPNPREMOTABLEAPP_SETALLOWEDPROFILEIDLISTL, "CUpnpRemotableApp::SetAllowedProfileIdListL;aProfileIdList[i]=%d", aProfileIdList[i] ); + if ( iProfileIdList.Find(aProfileIdList[i]) == KErrNotFound ) + { + iProfileIdList.AppendL(aProfileIdList[i]); + } + } + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_SETALLOWEDPROFILEIDLISTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::CreateTmInfoElementL +// Method is used to create a terminal mode info for the application and +// it gets appended to the terminal mode list. +// @param aTerminalModeInfoType Terminal Mode Info Type +// @return Returns the reference to the CUpnpTerminalModeInfo object +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpTmInfoElement& CUpnpRemotableApp::CreateTmInfoElementL( + CUpnpTmInfoElement::TTerminalModeInfoType aTerminalModeInfoType ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_CREATETERMINALMODEINFOL_ENTRY ); + CUpnpTmInfoElement* tmInfoElement = CUpnpTmInfoElement::NewL(aTerminalModeInfoType); + CleanupStack::PushL(tmInfoElement); + iTmInfoElementList.AppendL(tmInfoElement); + CleanupStack::Pop(tmInfoElement); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_CREATETERMINALMODEINFOL_EXIT ); + return *tmInfoElement; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::SetResourceStatusL +// Method is used to define the current status of the resource. +// @param aResourceStatus Status of the resource +// “free” – Resource is free. Can be used by the Terminal Mode client. (default) +// “busy” – Resource already used. Resource assignment can be overridden by +// a client’s invocation LaunchApplication action. +// “NA” – Resource already used. Resource assignment cannot be overridden by a +// LaunchApplication action invoked by a client. +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpRemotableApp::SetResourceStatusL( const TDesC8& aResourceStatus ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPP_SETRESOURCESTATUSL_ENTRY ); + iResourceStatus.Close(); + iResourceStatus.CreateL(aResourceStatus); + OstTraceFunctionExit0( CUPNPREMOTABLEAPP_SETRESOURCESTATUSL_EXIT ); + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpremotableappstore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpremotableappstore.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,145 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + +// INCLUDE FILES +#include "upnpremotableappstore.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpremotableappstoreTraces.h" +#endif + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpRemotableAppStore* CUpnpRemotableAppStore::NewL() + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_NEWL_ENTRY ); + return ( new (ELeave) CUpnpRemotableAppStore()); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::CUpnpRemotableAppStore +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpRemotableAppStore::CUpnpRemotableAppStore( ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::~CUpnpRemotableAppStore +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpRemotableAppStore::~CUpnpRemotableAppStore() + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_CUPNPREMOTABLEAPPSTORE_ENTRY ); + iRemotableAppArray.ResetAndDestroy(); + iRemotableAppArray.Close(); + iAppIdArray.Close(); + OstTraceFunctionExit0( CUPNPREMOTABLEAPPSTORE_CUPNPREMOTABLEAPPSTORE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::AppendRemotableAppL +// Method is used to create a list of all the registered apps +// @param aApp Pointer to CUpnpRemotableApp object +// --------------------------------------------------------------------------------- +// +void CUpnpRemotableAppStore::AddRemotableAppL( CUpnpRemotableApp* aApp ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_ADDREMOTABLEAPPL_ENTRY ); + TInt appId = aApp->AppId(); + if ( iAppIdArray.Find( appId ) == KErrNotFound ) + { + // Register all distinct apps + OstTrace1( TRACE_FLOW, CUPNPREMOTABLEAPPSTORE_ADDREMOTABLEAPPL, "CUpnpRemotableAppStore::AddRemotableAppL;appId=%d", appId ); + iRemotableAppArray.AppendL(aApp); + iAppIdArray.AppendL( appId ); + } + else + { + // Delete the duplicate remotable app object + delete aApp; + aApp = NULL; + } + OstTraceFunctionExit0( CUPNPREMOTABLEAPPSTORE_ADDREMOTABLEAPPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::RemoveRemotableApp +// Method is used to remove the app frpm the list of already registered apps +// @param aAppId App to be removed +// --------------------------------------------------------------------------------- +// +TInt CUpnpRemotableAppStore::RemoveRemotableApp( TUint aAppId ) + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_REMOVEREMOTABLEAPP_ENTRY ); + TInt ret(KErrNotFound); + TInt appIndex = iAppIdArray.Find( aAppId ); + if ( appIndex != KErrNotFound ) + { + // If appID is matched then delete the Remotable App object and remove + // the object pointer from the array + iAppIdArray.Remove(appIndex); + delete iRemotableAppArray[appIndex]; + iRemotableAppArray[appIndex] = NULL; + iRemotableAppArray.Remove(appIndex); + ret = KErrNone; + } + OstTrace1( TRACE_NORMAL, CUPNPREMOTABLEAPPSTORE_REMOVEREMOTABLEAPP, "CUpnpRemotableAppStore::RemoveRemotableApp;ret=%d", ret ); + OstTraceFunctionExit0( CUPNPREMOTABLEAPPSTORE_REMOVEREMOTABLEAPP_EXIT ); + return ret; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::FetchRemotableApp +// Method is used to fetch the list of registered apps +// @param aAppId App ID of the application whose access is needed +// @return Returns reference to CUpnpRemotableApp object +// --------------------------------------------------------------------------------- +// +CUpnpRemotableApp& CUpnpRemotableAppStore::FetchRemotableApp( TInt aAppIndex )const + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_FETCHREMOTABLEAPP_ENTRY ); + ASSERT( aAppIndex >=0 ); + OstTraceFunctionExit0( CUPNPREMOTABLEAPPSTORE_FETCHREMOTABLEAPP_EXIT ); + return *iRemotableAppArray[aAppIndex]; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableAppStore::AppIdArray +// Method is used to fetch the list of appIDs of registered apps +// @return Returns reference to an array of TInt objects +// --------------------------------------------------------------------------------- +// +const RArray& CUpnpRemotableAppStore::AppIdArray()const + { + OstTraceFunctionEntry0( CUPNPREMOTABLEAPPSTORE_APPIDARRAY_ENTRY ); + OstTraceFunctionExit0( CUPNPREMOTABLEAPPSTORE_APPIDARRAY_EXIT ); + return iAppIdArray; + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpsvgimageconverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpsvgimageconverter.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,363 @@ +/** +* Copyright (c) 2010 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: CUpnpSvgImageConverter class implementation. +* +*/ + +#include "upnpsvgimageconverter.h" +#include "upnptmserverimpl.h" +#include +#include "upnpiconconversionactive.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpsvgimageconverterTraces.h" +#endif + +// Literals +_LIT(KLatin, "LatinPlain12"); +_LIT(KConvertedIconPath, "public\\TmServerDevice1\\"); +_LIT(KCross, "x"); +_LIT(KDotBmp, ".bmp"); +_LIT(KThreadName, "ImageConverterThread"); +_LIT(KSemaphoreName, "ImageConverterSemaphore"); + +// Constant +const TUint KDot = '.'; + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::NewL +// Two-phased constructor. +// @param aIconWidth Desired width of the serving icon. +// @param aIconHeight Desired height of the serving icon. +// --------------------------------------------------------------------------------- +// +CUpnpSvgImageConverter* CUpnpSvgImageConverter::NewL( TInt aIconWidth, TInt aIconHeight ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_NEWL_ENTRY ); + OstTraceExt2( TRACE_NORMAL, CUPNPSVGIMAGECONVERTER_NEWL, "CUpnpSvgImageConverter::NewL;aIconWidth=%d;aIconHeight=%d", aIconWidth, aIconHeight ); + CUpnpSvgImageConverter* self = new (ELeave) CUpnpSvgImageConverter( ); + CleanupStack::PushL(self); + self->ConstructL( aIconWidth,aIconHeight ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::CUpnpSvgImageConverter +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------------- +// +CUpnpSvgImageConverter::CUpnpSvgImageConverter( ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpSvgImageConverter::ConstructL( TInt aIconWidth, TInt aIconHeight ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_CONSTRUCTL_ENTRY ); + //Geometric rectangle. + TRect lMainRect( 0,0,aIconWidth,aIconHeight ); + /** + * Specifies the font specification to use for text drawing. + * Here "LatinPlain12" of height "10" is used. + */ + TFontSpec lFontSpec( KLatin,UpnpString::KMaxTUintLength ); + // A bitmap managed by the font and bitmap server. + User::LeaveIfError(iFbsSession.Connect()); + iBitmap = new ( ELeave ) CFbsBitmap(); + iMask = new ( ELeave ) CFbsBitmap(); + //Creates bitmap file of the desired dimensions with desired display mode(64,000 colour) + User::LeaveIfError( iBitmap->Create( TSize( lMainRect.Width(), + lMainRect.Height() ),EColor64K ) ); + User::LeaveIfError( iMask->Create( TSize( lMainRect.Width(), + lMainRect.Height() ),EGray256 ) ); // 256 grayscales display mode as alpha values + /** + * Create a new Svg Engine interface. + * @param iBitmap bitmap to draw resulting svg image. + * @param aReqObserver(NULL) interface for callbacks to retrieve info + * only client can provide, such as opening files. + * @param lFontSpecFont spec to use for text drawing. + */ + iSvgModule = CSvgEngineInterfaceImpl::NewL( iBitmap,NULL,lFontSpec ); + User::LeaveIfError( iFileSession.Connect() ); + TBuf privatePath; + User::LeaveIfError( iFileSession.PrivatePath(privatePath) ); + + privatePath.Append(KConvertedIconPath()); + privatePath.AppendNum( aIconWidth ); + privatePath.Append( KCross); + privatePath.AppendNum( aIconHeight ); + privatePath.Append( UpnpString::KDoubleBackSlash16() ); + TInt err = iFileSession.MkDir(privatePath); + if( ( err != KErrNone ) && ( err != KErrAlreadyExists ) ) + { + // Leaves if fails to create a directory + User::Leave(err); + } + iBitMapFilePath.CreateL( UpnpString::KMaxFilenameLength ); + iBitMapFilePath.Append( privatePath ); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::~CUpnpSvgImageConverter +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpSvgImageConverter::~CUpnpSvgImageConverter() + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_CUPNPSVGIMAGECONVERTER_ENTRY ); + iBitMapFilePath.Close(); + delete iMask; + delete iBitmap; + delete iSvgModule; + iFbsSession.Disconnect(); + iFileSession.Close(); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_CUPNPSVGIMAGECONVERTER_EXIT ); + } + +// ----------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::ConvertToBitmapL +// Method invokes svg to bitmap conversion. +// It takes svg file as an input and returns converted icon file( bmp ). +// Also prepares DOM for given SVG file. +// @param aSvgFile Input svg filepath +// @param aBitmapFile[out] Bitmap filepath ( converted file ). +// ----------------------------------------------------------------------------------- +void CUpnpSvgImageConverter::ConvertToBitmapL( const TDesC& aSvgFile, RBuf& aBitmapFile ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_CONVERTTOBITMAPL_ENTRY ); + /** + * Extracts the filename( without filename extension ) from the input svg filepath and + * uses the same filename to create bitmap file ( eg: abc.bmp ) + */ + TPtrC iconFileNameWithExtension = aSvgFile.Mid((aSvgFile.LocateReverse(KDirectorySeparator))+1); + iBitMapFilePath.Append( iconFileNameWithExtension.Left(iconFileNameWithExtension.LocateReverse(KDot)) ); + iBitMapFilePath.Append( KDotBmp ); + RFile iconFile; + TInt err = iconFile.Create(iFileSession,iBitMapFilePath,EFileRead|EFileWrite|EFileShareAny); + OstTrace1( TRACE_NORMAL, CUPNPSVGIMAGECONVERTER_CONVERTTOBITMAPL, "CUpnpSvgImageConverter::ConvertToBitmapL;err=%d", err ); + iconFile.Close(); + aBitmapFile.Close(); + if ( err == KErrAlreadyExists ) + { + //If the converted file pre-exists, just return the existing filepath. + aBitmapFile.CreateL(iBitMapFilePath); + } + else if ( err == KErrNone ) + { + TInt domHandle; + /** + * Parses and Prepares DOM for given SVG file. + * @param aSvgFile the name of the file to be parsed + * @param domHandle Handle to the created DOM. + * @return lsvgerr Error object specifying the error occured during operation + */ + MSvgError* lsvgerr = iSvgModule->PrepareDom( aSvgFile,domHandle ,NULL ); + if ( (! lsvgerr ) || ( lsvgerr && lsvgerr->HasError() &&!lsvgerr->IsWarning() ) ) + { + User::Leave( KErrCancel ); + } + /** + *Initialization of the engine + *@param domHandle Handle to DOM Tree. + *@param iBitmap Buffer for drawing the DOM Tree. + *@param iMask Buffer for mask (alpha values) of framebuffer result + *@return lsvgerr Error object specifying the error occured. + */ + lsvgerr = iSvgModule->UseDom( domHandle ,iBitmap,iMask ); + if ( (! lsvgerr ) || ( lsvgerr && lsvgerr->HasError() &&!lsvgerr->IsWarning() ) ) + { + User::Leave( KErrCancel ); + } + /** + * Request the SVG Engine to begin an animation. + */ + iSvgModule->Start( lsvgerr ); + if ( (! lsvgerr ) || ( lsvgerr && lsvgerr->HasError() &&!lsvgerr->IsWarning() ) ) + { + User::Leave( KErrCancel ); + } + /** + * Deletes the DOM tree associated with the Handle. + */ + lsvgerr = iSvgModule->DeleteDom( domHandle ) ; + if ( (! lsvgerr ) || ( lsvgerr && lsvgerr->HasError() &&!lsvgerr->IsWarning() ) ) + { + User::Leave( KErrCancel ); + } + /** + * Creates and starts a new thread to handle asynchronous icon conversion. + * A new or separate thread is needed for this purpose since the conversion happens + * in the same thread as of that of the one who invokes. + */ + StartThreadL(); + // Sets the converted filepath + aBitmapFile.CreateL(iBitMapFilePath); + } + else + { + User::Leave(err); + } + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_CONVERTTOBITMAPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::StartThreadL +// Creates a new thread where actual conversion occurs. +// Also creates a sempahore and waits on it. +// --------------------------------------------------------------------------------- +// +void CUpnpSvgImageConverter::StartThreadL( ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_STARTTHREADL_ENTRY ); + // Creates and opens a semaphore + RSemaphore semaphore; + CleanupClosePushL(semaphore); + TInt error = semaphore.CreateGlobal( KSemaphoreName, KErrNone ); + if ( error == KErrAlreadyExists ) + { + User::LeaveIfError(semaphore.OpenGlobal( KSemaphoreName )); + } + else + { + User::LeaveIfError(error); + } + // Creates a new thread which will be in suspended state after creation + RThread thread; + CleanupClosePushL(thread); + User::LeaveIfError( thread.Create( KThreadName, + ImageConverter, + KDefaultStackSize, + NULL, + this, + EOwnerProcess)); + thread.SetPriority(EPriorityRealTime); + //Resumes the newly created thread + thread.Resume(); + semaphore.Wait(); + CleanupStack::PopAndDestroy(2,&semaphore); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_STARTTHREADL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::Filepath +// Method to return the path of the icon file which needs to be converted. +// @return Returns reference to Bitmap file path. +// --------------------------------------------------------------------------------- +// +const TDesC& CUpnpSvgImageConverter::Filepath( )const + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_FILEPATH_ENTRY ); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_FILEPATH_EXIT ); + return iBitMapFilePath; + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::BitmapObject +// Method to return the bitmap object. +// @return Returns reference to Bitmap object. +// --------------------------------------------------------------------------------- +// +CFbsBitmap& CUpnpSvgImageConverter::BitmapObject()const + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_BITMAPOBJECT_ENTRY ); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_BITMAPOBJECT_EXIT ); + return *iBitmap; + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::ImageConverter +// Static method serving as thread's main function +// @param aParam Pointer to any type object. +// @return Returns error code +// --------------------------------------------------------------------------------- +// +TInt CUpnpSvgImageConverter::ImageConverter( TAny* aParam ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_IMAGECONVERTER_ENTRY ); + TInt err( KErrNone ); + CUpnpSvgImageConverter* svgConverter = static_cast ( aParam ); + // Create cleanupstack + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + if ( !cleanupStack ) + { + err = KErrNoMemory; + } + else + { + TRAP( err, ImageConverterL(*svgConverter) ); + } + // Create a matching semaphore for signalling the waiting semaphore + RSemaphore semaphoreStop; + semaphoreStop.OpenGlobal(KSemaphoreName); + semaphoreStop.Signal(); + semaphoreStop.Close(); + + delete cleanupStack; + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_IMAGECONVERTER_EXIT ); + return err; + } + +// --------------------------------------------------------------------------------- +// CUpnpSvgImageConverter::ImageConverterL +// Called from thread's main function. +// Contains the code which can leave. +// @param aSvgConverter Reference to class object. +// --------------------------------------------------------------------------------- +// +void CUpnpSvgImageConverter::ImageConverterL( CUpnpSvgImageConverter& aSvgConverter ) + { + OstTraceFunctionEntry0( CUPNPSVGIMAGECONVERTER_IMAGECONVERTERL_ENTRY ); + /** + * Add support for active objects + * Create and install active scheduler + */ + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install( scheduler ); + // Opens the bitmap file and supplies it to the active object + RFs fs; + CleanupClosePushL( fs ); + User::LeaveIfError(fs.Connect()); + RFile bitmapFile; + CleanupClosePushL( bitmapFile ); + User::LeaveIfError( bitmapFile.Open( fs, aSvgConverter.Filepath(), EFileRead|EFileWrite|EFileShareAny )); + + // Create an active object that is executed in this thread + CUpnpIconConversionActive* active = CUpnpIconConversionActive::NewL( bitmapFile ); + CleanupStack::PushL(active); + // Invoke the request to the active object + active->Convert( aSvgConverter.BitmapObject() ); + // Thread execution starts + CActiveScheduler::Start(); + User::LeaveIfError( active->FetchError() ); // Leaves if the status returned is not KErrNone + + /** + * Thread execution ends (waiting for CActiveScheduler::Stop()) + * Cleanup the active object and scheduler + */ + CleanupStack::PopAndDestroy(UpnpString::KDoubleLineFeedLength,scheduler); + OstTraceFunctionExit0( CUPNPSVGIMAGECONVERTER_IMAGECONVERTERL_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnpterminalmodeicon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnpterminalmodeicon.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,92 @@ +/** +* Copyright (c) 2010 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: CUpnpTerminalModeIcon class implementation. +* +*/ + +// INCLUDE FILES +#include "upnpterminalmodeicon.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnpterminalmodeiconTraces.h" +#endif + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::NewL +// Two-phased constructor. +// @param aPath icon path +// @param aWidth icon width +// @param aHeight icon height +// @param aDepth icon depth +// @param aMimeType icon mime type +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpTerminalModeIcon* CUpnpTerminalModeIcon::NewL( const TDesC16& aPath, const TInt aWidth, + const TInt aHeight, const TInt aDepth, const TDesC8& aMimeType ) + { + OstTraceFunctionEntry0( CUPNPTERMINALMODEICON_NEWL_ENTRY ); + CUpnpTerminalModeIcon* self = new (ELeave) CUpnpTerminalModeIcon( aWidth,aHeight,aDepth ); + CleanupStack::PushL( self ); + self->ConstructL( aPath,aMimeType ); + CleanupStack::Pop( self ); + OstTraceFunctionExit0( CUPNPTERMINALMODEICON_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::CUpnpTerminalModeIcon +// C++ default constructor can NOT contain any code, that +// might leave. +// @param aWidth icon width +// @param aHeight icon height +// @param aDepth icon depth +// --------------------------------------------------------------------------------- +// +CUpnpTerminalModeIcon::CUpnpTerminalModeIcon( const TInt aWidth,const TInt aHeight, + const TInt aDepth ):iIconWidth(aWidth),iIconHeight(aHeight),iIconDepth(aDepth) + { + + } + +// ------------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::ConstructL +// Symbian 2nd phase constructor can leave. +// @param aPath icon path +// @param aMimeType icon mime type +// --------------------------------------------------------------------------------- +// +void CUpnpTerminalModeIcon::ConstructL( const TDesC16& aPath,const TDesC8& aMimeType ) + { + OstTraceFunctionEntry0( CUPNPTERMINALMODEICON_CONSTRUCTL_ENTRY ); + iFilename = aPath.AllocL(); + iIconMimeType = aMimeType.AllocL(); + OstTraceFunctionExit0( CUPNPTERMINALMODEICON_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::~CUpnpTerminalModeIcon +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTerminalModeIcon::~CUpnpTerminalModeIcon() + { + OstTraceFunctionEntry0( CUPNPTERMINALMODEICON_CUPNPTERMINALMODEICON_ENTRY ); + delete iFilename; + delete iIconMimeType; + OstTraceFunctionExit0( CUPNPTERMINALMODEICON_CUPNPTERMINALMODEICON_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmappserverservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmappserverservice.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,400 @@ +/** +* Copyright (c) 2010 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: CUpnpTmAppServerService class implementation. +* +*/ + + +// System includes +#include +#include + +//User includes +#include "upnptmappserverservice.h" +#include "upnptmserverdevice.h" +#include "upnptmserverimpl.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmappserverserviceTraces.h" +#endif + + +//Defines different action names ,their arguments and their related state variables +_LIT8(KGetApplicationList, "GetApplicationList"); +_LIT8(KLaunchApp, "LaunchApplication"); +_LIT8(KTerminateApp, "TerminateApplication"); +_LIT8(KGetAppStatus, "GetApplicationStatus"); +_LIT8(KAppFilter, "AppListingFilter"); +_LIT8(KProfileId, "ProfileID"); +_LIT8(KAppListing, "AppListing"); +_LIT8(KAppId , "AppID"); +_LIT8(KAppStatus, "AppStatus"); +_LIT8(KAppLaunchUri, "AppURI"); +_LIT8(KAppTerminateResult, "TerminationResult"); +_LIT8(KArgTypeAppList, "A_ARG_TYPE_AppList"); +_LIT8(KArgTypeAppStatus, "A_ARG_TYPE_AppStatus"); +_LIT8(KArgTypeAppStatusUpdate, "AppStatusUpdate"); +_LIT8(KArgTypeAppListUpdate, "AppListUpdate"); +_LIT8(KStatusTrue, "True"); +_LIT8(KStatusFalse, "False"); + + +// ================= MEMBER FUNCTIONS ============================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::CUpnpTmAppServerService +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmAppServerService::CUpnpTmAppServerService( CUpnpDevice& aUpnpDevice,CUpnpTmServerImpl& aTmServerImpl ): + CUpnpServiceImplementation(aUpnpDevice),iUpnpDevice(aUpnpDevice), iTmServerImpl(aTmServerImpl) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::~CUpnpTmAppServerService +// C++ default destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmAppServerService::~CUpnpTmAppServerService() + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_CUPNPTMAPPSERVERSERVICE_ENTRY ); + if ( iHttpServerSession ) + { + iHttpServerSession->Stop(); + } + delete iHttpServerSession; + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_CUPNPTMAPPSERVERSERVICE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::ConstructL +// Two-phased constructor. +// Initialize variables, set parent service and create XML reader. +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::ConstructL( const TDesC& aDescriptionPath ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_CONSTRUCTL_ENTRY ); + _LIT8( KServiceType, "TmApplicationServer:1" ); + BaseConstructL( aDescriptionPath, KServiceType); + + SetStateVariableL( KArgTypeAppList, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeAppStatus, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeAppStatusUpdate, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeAppListUpdate, KEmptyString, EFalse ); + ConstructHttpL( ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::ConstructHttpL +// Method is used to start the HTTP Server +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::ConstructHttpL( ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_CONSTRUCTHTTPL_ENTRY ); + iHttpServerSession = CUpnpHttpServerSession::NewL( CUpnpSettings::GetIapL(),*this ); + iHttpServerSession->DefaultRuntime().SetCreator( *this ); + iHttpServerSession->StartL(); + iTmServerImpl.GenerateUrlComponents(*iHttpServerSession); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_CONSTRUCTHTTPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmAppServerService* CUpnpTmAppServerService::NewL(CUpnpDevice& aUpnpDevice, const TDesC& aDescriptionPath, + CUpnpTmServerImpl& aTmServerImp ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_NEWL_ENTRY ); + CUpnpTmAppServerService* appServerService = new (ELeave) CUpnpTmAppServerService(aUpnpDevice, aTmServerImp); + CleanupStack::PushL( appServerService ); + appServerService->ConstructL( aDescriptionPath ); + CleanupStack::Pop( appServerService ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_NEWL_EXIT ); + return appServerService; + } + +// ---------------------------------------------------------------------------------------------- +// CUpnpTmAppServerService::ActionReceivedLD +// @param aAction action received from the client +// ---------------------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::ActionReceivedLD( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_ACTIONRECEIVEDLD_ENTRY ); + if ( !aAction ) + { + User::Leave( KErrNotFound ); + } + CleanupStack::PushL( aAction ); + TUpnpErrorCode eCode = EHttpOk; + + // Get the name, saves calls in the if-else statements + TPtrC8 name( aAction->Name() ); + // Verify the action and do the operation(s) + if ( name.Compare( KGetApplicationList ) == 0 ) + { + eCode = GetAppListActionL( aAction ); + } + else if ( name.Compare( KLaunchApp ) == 0 ) + { + eCode = LaunchAppActionL( aAction ); + } + else if ( name.Compare( KTerminateApp ) == 0 ) + { + eCode = TerminateAppActionL ( aAction ); + } + else if ( name.Compare( KGetAppStatus) == 0 ) + { + eCode = GetAppStatusActionL( aAction ); + } + else + { + eCode = EInvalidAction; + } + SendL( aAction, eCode ); + CleanupStack::PopAndDestroy( aAction ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_ACTIONRECEIVEDLD_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::GetAppListActionL +// @param aAction pointer to upnp action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmAppServerService::GetAppListActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_GETAPPLISTACTIONL_ENTRY ); + // Fetch the value for app listing filter argument + const TDesC8& filter = aAction->ArgumentValue(KAppFilter); + // Validate the AppListing filter string + // AppListingFilter input argument can contain wither wildcard(*) or + // a well formatted string + if ( ( filter.Compare(KWildCard ) != KErrNone ) && ( filter.Find(Keq) == KErrNotFound )) + { + // The filter string is having neither wildcard(*) nor a proper string( =" is missing ) + OstTrace0( TRACE_ERROR, DUP2_CUPNPTMAPPSERVERSERVICE_GETAPPLISTACTIONL, "CUpnpTmAppServerService::GetAppListActionL" ); + return EInvalidArgs; // invalid AppListingFilter argument + } + + // Fetch the value for profile ID argument + TUint profileIdInt; + ConvertDescriptorToInt( aAction->ArgumentValue(KProfileId), profileIdInt ); + OstTrace1( TRACE_NORMAL, CUPNPTMAPPSERVERSERVICE_GETAPPLISTACTIONL, "CUpnpTmAppServerService::GetAppListActionL;profileIdInt=%u", profileIdInt ); + + TTerminalModeErrorCode ret; + const TDesC8& appList = iTmServerImpl.GetApplicationListL( filter,profileIdInt,ret ); + if ( ret != ETerminalModeSuccess ) + { + OstTrace1( TRACE_ERROR, DUP1_CUPNPTMAPPSERVERSERVICE_GETAPPLISTACTIONL, "CUpnpTmAppServerService::GetAppListActionL;ret=%d", ret ); + return TUpnpErrorCode( ret ); + } + aAction->SetArgumentL( KAppListing, appList ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_GETAPPLISTACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::LaunchAppActionL +// @param aAction pointer to upnp action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmAppServerService::LaunchAppActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_LAUNCHAPPACTIONL_ENTRY ); + TUint appIdInt; + TUint profileIdInt; + // Validates the input parameters + if ( ( ConvertDescriptorToInt( aAction->ArgumentValue(KAppId), appIdInt ) != KErrNone ) + || ( ConvertDescriptorToInt( aAction->ArgumentValue(KProfileId), profileIdInt ) != KErrNone )) + { + OstTraceExt2( TRACE_ERROR, CUPNPTMAPPSERVERSERVICE_LAUNCHAPPACTIONL, "CUpnpTmAppServerService::LaunchAppActionL;appIdInt=%u;profileIdInt=%u", appIdInt, profileIdInt ); + return EInvalidArgs; // either invalid app ID or invalid profile ID + } + + RBuf8 launchUrl; + TTerminalModeErrorCode ret = iTmServerImpl.LaunchApp( appIdInt,profileIdInt,launchUrl ); + + if ( ret != ETerminalModeSuccess ) + { + // Error is returned + launchUrl.Close(); + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMAPPSERVERSERVICE_LAUNCHAPPACTIONL, "CUpnpTmAppServerService::LaunchAppActionL" ); + return TUpnpErrorCode( ret ); + } + CleanupClosePushL(launchUrl); + aAction->SetArgumentL( KAppLaunchUri , launchUrl ); + + CleanupStack::PopAndDestroy(&launchUrl); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_LAUNCHAPPACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::TerminateAppActionL +// @param aAction pointer to upnp action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmAppServerService::TerminateAppActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_TERMINATEAPPACTIONL_ENTRY ); + // Validates the input parameters + TUint appIdInt; + TUint profileIdInt; + if ( ( ConvertDescriptorToInt( aAction->ArgumentValue(KAppId), appIdInt ) != KErrNone ) + || ( ConvertDescriptorToInt( aAction->ArgumentValue(KProfileId), profileIdInt ) != KErrNone )) + { + OstTraceExt2( TRACE_ERROR, CUPNPTMAPPSERVERSERVICE_TERMINATEAPPACTIONL, "CUpnpTmAppServerService::TerminateAppActionL;appIdInt=%u;profileIdInt=%u", appIdInt, profileIdInt ); + return EInvalidArgs; // either invalid app ID or invalid profile ID + } + + TTerminalModeErrorCode ret = iTmServerImpl.TerminateApp( appIdInt,profileIdInt ); + if ( ret != ETerminalModeSuccess ) + { + // Error is returned + aAction->SetArgumentL( KAppTerminateResult,KStatusFalse ); + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMAPPSERVERSERVICE_TERMINATEAPPACTIONL, "CUpnpTmAppServerService::TerminateAppActionL" ); + return TUpnpErrorCode( ret ); + } + aAction->SetArgumentL( KAppTerminateResult,KStatusTrue); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_TERMINATEAPPACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::GetAppStatusActionL +// @param aAction Pointer to upnp action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmAppServerService::GetAppStatusActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_GETAPPSTATUSACTIONL_ENTRY ); + const TDesC8& appId= aAction->ArgumentValue(KAppId); + // Check if the appID argument has either wildcard character(*) + // or a valid integer as its value + TUint appIdInt; + if ( (( appId.Compare( KWildCard ) != KErrNone ) && + ( ConvertDescriptorToInt( appId, appIdInt ) != KErrNone )) ) + { + OstTrace1( TRACE_ERROR, CUPNPTMAPPSERVERSERVICE_GETAPPSTATUSACTIONL, "CUpnpTmAppServerService::GetAppStatusActionL;appIdInt=%u", appIdInt ); + return EInvalidArgs; // invalid input argument + } + RBuf8 appStatusBuf; + CleanupClosePushL(appStatusBuf); + TTerminalModeErrorCode ret; + iTmServerImpl.GetAppStatusL( appId, appStatusBuf, ret); + + if ( ret != ETerminalModeSuccess ) + { + CleanupStack::PopAndDestroy(&appStatusBuf); + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMAPPSERVERSERVICE_GETAPPSTATUSACTIONL, "CUpnpTmAppServerService::GetAppStatusActionL" ); + return TUpnpErrorCode( ret ); + } + aAction->SetArgumentL( KAppStatus, appStatusBuf ); + + CleanupStack::PopAndDestroy(&appStatusBuf); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_GETAPPSTATUSACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::NewTransactionL +// This method is invoked whenever http request related to icon file transfer +// arrives to http server from remote client +// @param aMethod Http message method ( GET, HEAD or POST ) +// @param aUri Http message request uri +// @param aSender IP address of the Http message sender +// @param[out] aTrans Returns newly created transaction object +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::NewTransactionL( const TDesC8& aMethod, const TDesC8& aUri, + const TInetAddr& /*aSender*/, CUpnpHttpServerTransaction*& aResultTrans ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_NEWTRANSACTIONL_ENTRY ); + if ( aMethod != KHttpPost() ) + { + iTmServerImpl.GetIconInfoL(aUri, aResultTrans); + } + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_NEWTRANSACTIONL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::HttpEventLD +// Provides file transfer completion status +// Notifies about the HTTP events, errors. +// Handling of http events is not provided in Terminal Mode Service +// @param aMessage the HTTP message +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::HttpEventLD( CUpnpHttpMessage* /*aMessage*/ ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::AppStatusUpdateEventL +// Notifies the client about the status updates. +// @param aStatusUpdateBuffer Buffer holding the update status information. +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::AppStatusUpdateEventL( const TDesC8& aStatusUpdateBuffer ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_APPSTATUSUPDATEEVENTL_ENTRY ); + SetStateVariableL( KArgTypeAppStatusUpdate, aStatusUpdateBuffer, EFalse ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_APPSTATUSUPDATEEVENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::AppListUpdateEventL +// Notifies the client about the app list updates. +// @param aListUpdateBuffer Buffer holding the update app list information. +// --------------------------------------------------------------------------------- +// +void CUpnpTmAppServerService::AppListUpdateEventL( const TDesC8& aListUpdateBuffer ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_APPLISTUPDATEEVENTL_ENTRY ); + SetStateVariableL( KArgTypeAppListUpdate, aListUpdateBuffer, EFalse ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_APPLISTUPDATEEVENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::ConvertDescriptorToInt +// Utility method to convert descriptor's data to integer +// @param aDes Descriptor whose integer equivalent have to be calculated +// @param aIntVal[out] Integer value +// @return Returns error code +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmAppServerService::ConvertDescriptorToInt( const TDesC8& aDes, TUint& aIntVal ) + { + OstTraceFunctionEntry0( CUPNPTMAPPSERVERSERVICE_CONVERTDESCRIPTORTOINT_ENTRY ); + aIntVal = KErrNone; + TLex8 lex( aDes ); + OstTrace1( TRACE_NORMAL, CUPNPTMAPPSERVERSERVICE_CONVERTDESCRIPTORTOINT, "CUpnpTmAppServerService::ConvertDescriptorToInt;aIntVal=%u", aIntVal ); + OstTraceFunctionExit0( CUPNPTMAPPSERVERSERVICE_CONVERTDESCRIPTORTOINT_EXIT ); + return lex.Val(aIntVal); + } + +//End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmclienticonpref.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmclienticonpref.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,100 @@ +/** +* Copyright (c) 2010 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: CUpnpTmClientIconPref class implementation. +* +*/ + +// INCLUDE FILES +#include "upnptmclienticonpref.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmclienticonprefTraces.h" +#endif + +// Literal +_LIT8(KBmpMimeType, "image/bmp"); + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::NewL +// Two-phased constructor. +// @param aProfileId ProfileID of the client profile. +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpTmClientIconPref* CUpnpTmClientIconPref::NewL( TUint aProfileId ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTICONPREF_NEWL_ENTRY ); + CUpnpTmClientIconPref* self = new (ELeave) CUpnpTmClientIconPref(aProfileId); + CleanupStack::PushL(self); + self->ConstructL( ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMCLIENTICONPREF_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::CUpnpTmClientIconPref +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmClientIconPref::CUpnpTmClientIconPref( TUint aProfileId ):iClientProfileId(aProfileId), + iIconWidth(KErrNone),iIconHeight(KErrNone),iIconDepth(KDefaultDepthValue) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmClientIconPref::ConstructL( ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTICONPREF_CONSTRUCTL_ENTRY ); + iIconMimeType = KBmpMimeType().AllocL(); + OstTraceFunctionExit0( CUPNPTMCLIENTICONPREF_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::~CUpnpTmClientIconPref +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmClientIconPref::~CUpnpTmClientIconPref() + { + OstTraceFunctionEntry0( CUPNPTMCLIENTICONPREF_CUPNPTMCLIENTICONPREF_ENTRY ); + delete iIconMimeType; + OstTraceFunctionExit0( CUPNPTMCLIENTICONPREF_CUPNPTMCLIENTICONPREF_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::SetMimeTypeL +// Method is used to provide the preferred mime type of the client. +// @param aMimeType mime type of the icon +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmClientIconPref::SetMimeTypeL( const TDesC8& aMimeType ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTICONPREF_SETMIMETYPEL_ENTRY ); + delete iIconMimeType; + iIconMimeType = NULL; + iIconMimeType = aMimeType.AllocL(); + OstTraceFunctionExit0( CUPNPTMCLIENTICONPREF_SETMIMETYPEL_EXIT ); + } + + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmclientprofileservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmclientprofileservice.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,248 @@ +/** +* Copyright (c) 2010 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: CUpnpTmClientProfileService class implementation. +* +*/ + +// System includes +#include +#include + +//User includes +#include "upnptmclientprofileservice.h" +#include "upnptmserverdevice.h" +#include "upnptmserverimpl.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmclientprofileserviceTraces.h" +#endif + + +//Defines different action names ,their arguments and their related state variables +_LIT8(KGetMaxNumProfiles, "GetMaxNumProfiles"); +_LIT8(KSetClientProfile, "SetClientProfile"); +_LIT8(KGetClientProfile, "GetClientProfile"); +_LIT8(KProfileId, "profileID"); +_LIT8(KClientProfile , "clientProfile"); +_LIT8(KResultProfile , "resultProfile"); +_LIT8(KNumProfilesAllowed , "numProfilesAllowed"); +_LIT8(KArgTypeUnusedProfileIds, "UnusedProfileIDs"); +_LIT8(KArgTypeClientProfile, "A_ARG_TYPE_ClientProfile"); +_LIT8(KArgTypeMaxProfiles, "MaxNumProfiles"); +_LIT8(KArgTypeProfileId, "A_ARG_TYPE_ProfileID"); + + +// ================= MEMBER FUNCTIONS ============================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::CUpnpTmClientProfileService +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmClientProfileService::CUpnpTmClientProfileService( CUpnpDevice& aUpnpDevice,CUpnpTmServerImpl& aTmServerImpl ) + :CUpnpServiceImplementation(aUpnpDevice),iUpnpDevice(aUpnpDevice), iTmServerImpl(aTmServerImpl) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_CUPNPTMCLIENTPROFILESERVICE_ENTRY ); + + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_CUPNPTMCLIENTPROFILESERVICE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::~CUpnpTmClientProfileService +// C++ default destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmClientProfileService::~CUpnpTmClientProfileService() + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::ConstructL +// Two-phased constructor. +// Initialize variables, set parent service and create XML reader. +// --------------------------------------------------------------------------------- +// +void CUpnpTmClientProfileService::ConstructL(const TDesC& aDescriptionPath ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_CONSTRUCTL_ENTRY ); + _LIT8( KServiceType, "TmClientProfile:1" ); + BaseConstructL( aDescriptionPath, KServiceType); + + SetStateVariableL( KArgTypeUnusedProfileIds, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeClientProfile, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeMaxProfiles, KEmptyString, EFalse ); + SetStateVariableL( KArgTypeProfileId, KEmptyString, EFalse ); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmClientProfileService* CUpnpTmClientProfileService::NewL(CUpnpDevice& aUpnpDevice, const TDesC& aDescriptionPath, CUpnpTmServerImpl& aTmServerImp ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_NEWL_ENTRY ); + CUpnpTmClientProfileService* clientProfileService = new (ELeave) CUpnpTmClientProfileService(aUpnpDevice, aTmServerImp); + CleanupStack::PushL( clientProfileService ); + clientProfileService->ConstructL( aDescriptionPath ); + CleanupStack::Pop( clientProfileService ); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_NEWL_EXIT ); + return clientProfileService; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::ActionReceivedLD +// @param aAction action received from the client +// --------------------------------------------------------------------------------- +// +void CUpnpTmClientProfileService::ActionReceivedLD( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_ACTIONRECEIVEDLD_ENTRY ); + if ( !aAction ) + { + User::Leave( KErrNotFound ); + } + CleanupStack::PushL( aAction ); + TUpnpErrorCode eCode = EHttpOk; + + // Get the name, saves calls in the if-else statements + TPtrC8 name( aAction->Name() ); + // Verify the action and do the operation(s) + if ( name.Compare( KGetMaxNumProfiles ) == 0 ) + { + eCode = GetMaxNumProfilesActionL( aAction ); + } + else if ( name.Compare( KSetClientProfile ) == 0 ) + { + eCode = SetClientProfileActionL( aAction ); + } + else if ( name.Compare( KGetClientProfile ) == 0 ) + { + eCode = GetClientProfileActionL ( aAction ); + } + else + { + eCode = EInvalidAction; + } + SendL( aAction, eCode ); + CleanupStack::PopAndDestroy( aAction ); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_ACTIONRECEIVEDLD_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::GetMaxNumProfilesActionL +// @param aAction pointer to action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmClientProfileService::GetMaxNumProfilesActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_GETMAXNUMPROFILESACTIONL_ENTRY ); + TUint profileCount; + TTerminalModeErrorCode ret = iTmServerImpl.GetMaxNumProfiles( profileCount ); + if ( ret != ETerminalModeSuccess ) + { + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMCLIENTPROFILESERVICE_GETMAXNUMPROFILESACTIONL, "CUpnpTmClientProfileService::GetMaxNumProfilesActionL" ); + return TUpnpErrorCode( ret ); + } + OstTrace1( TRACE_NORMAL, CUPNPTMCLIENTPROFILESERVICE_GETMAXNUMPROFILESACTIONL, "CUpnpTmClientProfileService::GetMaxNumProfilesActionL;profileCount=%d", profileCount ); + TBuf8 countBuf; + countBuf.Num(profileCount); + + aAction->SetArgumentL( KNumProfilesAllowed, countBuf ); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_GETMAXNUMPROFILESACTIONL_EXIT ); + return EHttpOk; + } + +// ------------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::SetClientProfileActionL +// @param aAction Pointer to UPnP action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmClientProfileService::SetClientProfileActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_SETCLIENTPROFILEACTIONL_ENTRY ); + TUint profileIdInt; + // Fetch the value for profile ID argument + TLex8 lex( aAction->ArgumentValue(KProfileId) ); + lex.Val(profileIdInt); + OstTrace1( TRACE_ERROR, CUPNPTMCLIENTPROFILESERVICE_SETCLIENTPROFILEACTIONL, "CUpnpTmClientProfileService::SetClientProfileActionL;profileIdInt=%d", profileIdInt ); + + // Fetch the value for client profile argument + const TDesC8& clientProfile = aAction->ArgumentValue(KClientProfile); + + RBuf8 resultProfileBuf; + TTerminalModeErrorCode ret = iTmServerImpl.SetClientProfile( profileIdInt,clientProfile,resultProfileBuf ); + if ( ret != ETerminalModeSuccess ) + { + resultProfileBuf.Close(); + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMCLIENTPROFILESERVICE_SETCLIENTPROFILEACTIONL, "CUpnpTmClientProfileService::SetClientProfileActionL" ); + return TUpnpErrorCode( ret ); + } + CleanupClosePushL(resultProfileBuf); + aAction->SetArgumentL( KResultProfile , resultProfileBuf ); + CleanupStack::PopAndDestroy(&resultProfileBuf); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_SETCLIENTPROFILEACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientProfileService::GetClientProfileActionL +// @param aAction pointer to action object +// @return Returns upnp error code +// --------------------------------------------------------------------------------- +// +TUpnpErrorCode CUpnpTmClientProfileService::GetClientProfileActionL( CUpnpAction* aAction ) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_GETCLIENTPROFILEACTIONL_ENTRY ); + TUint profileIdInt; + // Fetch the value for profile ID argument + TLex8 lex( aAction->ArgumentValue(KProfileId) ); + lex.Val(profileIdInt); + OstTrace1( TRACE_ERROR, CUPNPTMCLIENTPROFILESERVICE_GETCLIENTPROFILEACTIONL, "CUpnpTmClientProfileService::GetClientProfileActionL;profileIdInt=%d", profileIdInt ); + + RBuf8 resultProfileBuf; + TTerminalModeErrorCode ret = iTmServerImpl.GetClientProfile(profileIdInt,resultProfileBuf ); + + if ( ret != ETerminalModeSuccess ) + { + resultProfileBuf.Close(); + OstTrace0( TRACE_ERROR, DUP1_CUPNPTMCLIENTPROFILESERVICE_GETCLIENTPROFILEACTIONL, "CUpnpTmClientProfileService::GetClientProfileActionL" ); + return TUpnpErrorCode( ret ); + } + CleanupClosePushL(resultProfileBuf); + aAction->SetArgumentL( KClientProfile,resultProfileBuf ); + CleanupStack::PopAndDestroy(&resultProfileBuf); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_GETCLIENTPROFILEACTIONL_EXIT ); + return EHttpOk; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmAppServerService::UnusedProfileIdEventL +// Notifies the client about the status updates. +// @param aUnusedProfileIdBuffer Buffer holding the unused profile IDs information. +// --------------------------------------------------------------------------------- +// +void CUpnpTmClientProfileService::UnUsedProfileIdEventL(const TDesC8& aUnusedProfileIdBuffer) + { + OstTraceFunctionEntry0( CUPNPTMCLIENTPROFILESERVICE_UNUSEDPROFILEIDEVENTL_ENTRY ); + SetStateVariableL( KArgTypeUnusedProfileIds, aUnusedProfileIdBuffer, EFalse); + OstTraceFunctionExit0( CUPNPTMCLIENTPROFILESERVICE_UNUSEDPROFILEIDEVENTL_EXIT ); + } + +//End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmfilteredapplist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmfilteredapplist.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,654 @@ +/** +* Copyright (c) 2010 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: CUpnpTmFilteredAppList class implementation. +* +*/ + +#include "upnptmfilteredapplist.h" +#include "upnptmserverimpl.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmfilteredapplistTraces.h" +#endif + +//Constants +const TUint KQuote = '"'; +const TUint KCommaSeparator = ','; + +//Literals +_LIT8(KDoubleQuote, "\"\""); +_LIT8(KIconElement, "icon"); + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmFilteredAppList* CUpnpTmFilteredAppList::NewL( CUpnpTmServerImpl& aTmServerImpl ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_NEWL_ENTRY ); + CUpnpTmFilteredAppList* self = new (ELeave) CUpnpTmFilteredAppList( aTmServerImpl ); + CleanupStack::PushL(self); + self->ConstructL( ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::CUpnpTmFilteredAppList +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmFilteredAppList::CUpnpTmFilteredAppList( CUpnpTmServerImpl& aTmServerImpl ) + :iTmServerImpl (aTmServerImpl ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmFilteredAppList::ConstructL() + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTL_ENTRY ); + iFilterInfo = CUpnpAppFilterInfo::NewL(); + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::~CUpnpTmFilteredAppList +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmFilteredAppList::~CUpnpTmFilteredAppList() + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_CUPNPTMFILTEREDAPPLIST_ENTRY ); + delete iFilterInfo; + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_CUPNPTMFILTEREDAPPLIST_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::ParseAppFilterStringL +// Method parses the descriptor containing the filter string +// It parses the comma-separated list of A_ARG_TYPE_AppList schema +// elements, attributes and their values +// eg: "name="*Audio*",description="*",icon@mimetype="*svg+xml*", remotingInfo@protocolID="*", +// appInfo@appCategory="*",audioInfo@audioType="*",resourceStatus="free",signature="*"" +// @param aAppFilter Buffer containing application filter string +// @param aErr[out] Terminal Mode error code +// --------------------------------------------------------------------------------- +// +void CUpnpTmFilteredAppList::ParseAppFilterStringL( const TDesC8& aAppFilter, + TTerminalModeErrorCode& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL_ENTRY ); + // Validate the filter string + aErr = ETerminalModeSuccess; + TInt quotePos = aAppFilter.Locate( KQuote ); + if ( ( quotePos != 0 ) || ( aAppFilter.Find(KDoubleQuote) == KErrNotFound )) + { + // corrupt filter string + aErr = ETerminalModeInvalidArgument; + OstTrace1( TRACE_ERROR, DUP2_CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL, "CUpnpTmFilteredAppList::ParseAppFilterStringL;quotePos=%d", quotePos ); + return; + } + RBuf8 filterBuffer; + CleanupClosePushL(filterBuffer); + /* Create a buffer having the content of AppFilter buffer but without + the leading quote(") */ + filterBuffer.CreateL(aAppFilter.Mid(quotePos+1)); + TInt equalToQuoteToken; + while( ( equalToQuoteToken = filterBuffer.Find(Keq)) != KErrNotFound ) + { + // Fetch the full key string + TPtrC8 key = filterBuffer.Left(equalToQuoteToken); + // Check for the presence of sub element by checking the @ in the key string + TInt atTokenPos = key.Find(KAtToken); + TBool displayInfo(EFalse); + if ( atTokenPos != KErrNotFound ) + { + // @ is found in the key string + // Now extract the parent element + TPtrC8 parentKey = key.Left(atTokenPos); + //Remove any leading and trailing whitespaces in the parent element + const TDesC8& parentKeyWithoutSpace = RemoveWhiteSpace(parentKey); + // Check if the parent elemet is one of desired element or not. + // It should be one of the following : + // <1> icon <2> remotingInfo <3> appInfo <4> displayInfo <5> audioInfo + if ( ( parentKeyWithoutSpace.Compare(KIconElement) != KErrNone ) && + ( parentKeyWithoutSpace.Compare(KRemotingInfo) != KErrNone ) && + ( parentKeyWithoutSpace.Compare(KAppInfo) != KErrNone ) && + ( parentKeyWithoutSpace.Compare(KDisplayInfo) != KErrNone ) && + ( parentKeyWithoutSpace.Compare(KAudioInfo) != KErrNone ) ) + { + // parent element is not proper + aErr = ETerminalModeInvalidArgument; + break; + } + if ( parentKeyWithoutSpace.Compare(KDisplayInfo) == KErrNone ) + { + // The parent key element is displayInfo + displayInfo = ETrue; + } + // Fetch the actual key name ( child element ) + key.Set(key.Mid(atTokenPos+1)); + } + + //Remove any leading and trailing whitespaces in the key + const TDesC8& keyWithoutSpace = RemoveWhiteSpace(key); + if ( (filterBuffer.Mid(equalToQuoteToken) ).Locate(KQuote) != 1 ) + { + // Missing quote(") ahead of the value + aErr = ETerminalModeInvalidArgument; + break; + } + TPtrC8 bufPtr = filterBuffer.Mid(equalToQuoteToken+2); + quotePos = bufPtr.Locate( KQuote ); + if ( quotePos == KErrNotFound ) + { + // missing quote (") at the end of the value + aErr = ETerminalModeInvalidArgument; + break; + } + + /* Add the filter info as key-value pairs. + // Also check if the parent key is display info. + If display info flag is true then use the method with non default parameter */ + if ( displayInfo ) + { + iFilterInfo->SetFilterInfoL( keyWithoutSpace, bufPtr.Left(quotePos), aErr, ETrue ); + } + else + { + // Use the method with default parameter + iFilterInfo->SetFilterInfoL( keyWithoutSpace, bufPtr.Left(quotePos), aErr ); + } + if ( aErr != ETerminalModeSuccess ) + { + // Return the error code in case the key element is not as per the schema + aErr = ETerminalModeInvalidArgument; + break; + } + // Skip the quote position and set the buffer + bufPtr.Set(bufPtr.Mid(quotePos+1)); + if ( ( bufPtr.Locate(KCommaSeparator) != 0 ) && ( bufPtr.Locate(KQuote) != 0 ) ) + { + // missing quote (") or comma (,) following the quote. + // Expected to be something of this kind ( ", or "" ) + aErr = ETerminalModeInvalidArgument; + break; + } + //Copy the residual content skipping two characters(", or "" ) in the actual buffer + filterBuffer.Copy(bufPtr.Mid(UpnpString::KLinefeedLength)); + } + CleanupStack::PopAndDestroy(&filterBuffer); + OstTrace1( TRACE_FLOW, CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL, "CUpnpTmFilteredAppList::ParseAppFilterStringL;aErr=%d", aErr ); + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::ConstructFilteredGetAppListResponseL +// Constructs the GetApplicationList action response buffer satisfying +// the AppListingFilter criteria +// @param aAppIndex Index the registered application +// --------------------------------------------------------------------------------- +// +void CUpnpTmFilteredAppList::ConstructFilteredGetAppListResponseL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTFILTEREDGETAPPLISTRESPONSEL_ENTRY ); + const TDesC8& filterAppName = iFilterInfo->AppName(); + const TDesC8& filterAppDesc = iFilterInfo->AppDescription(); + if ( ( ( filterAppName.Length() == 0 ) || + ((iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).AppName()).MatchC(filterAppName) + != KErrNotFound )) && (( filterAppDesc.Length() == 0 ) || + ((iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).AppDescription()).MatchC(filterAppDesc) + != KErrNotFound ))) + { + /** + * 1. Either required appName element is unavailable in the filter string or the desired appName matches. + * 2. Either optional appDescription element is unavailable in the filter string + * or the desired appDescription element matches + */ + const RPointerArray& tmInfoElementList = + iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).TmInfoElementList(); + TInt tmInfoCount = tmInfoElementList.Count(); + // Check if terminal mode info is also available in the filter string + TInt match(KErrNone); + for ( TInt i(0); i < tmInfoCount; i++ ) + { + if ( TerminalModeInfoMatchingL( *tmInfoElementList[i]) ) + { + match++; + } + else + { + break; + } + } + if ( match == tmInfoCount ) + { + // Check if resource status and xm signature elements are available in the filter + const TDesC8& filterRscStatus = iFilterInfo->ResourceStatus(); + const TDesC8& filterSignature = iFilterInfo->Signature(); + if ( (( filterRscStatus.Length() == 0 ) || + ((iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).ResourceStatus()).MatchC(filterRscStatus) + != KErrNotFound)) && ( ( filterSignature.Length() == 0 ) || + ((iTmServerImpl.XmlSignature()).MatchC(filterSignature) != KErrNotFound)) ) + { + IconMatchingL( aAppIndex ); + } + } + } + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTFILTEREDGETAPPLISTRESPONSEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::TerminalModeInfoMatchingL +// The method checks if the terminal mode info element is present in the filter string +// If available then it compares with each of the desired key-value of a particular +// info element. +// @param aTmInfoElement Reference to Terminal Mode Info Element object +// @return Returns a boolean value ( ETrue/EFalse ) +// --------------------------------------------------------------------------------- +// +TBool CUpnpTmFilteredAppList::TerminalModeInfoMatchingL( const CUpnpTmInfoElement& aTmInfoElement )const + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_TERMINALMODEINFOMATCHING_ENTRY ); + TBool match(EFalse); + // First check for terminal mode info type + const TDesC8& infoType = aTmInfoElement.TerminalModeInfoType(); + /** + * info Type must be either one of these + * <1> Remoting Info <2> App Info <3> Display Info <4> Audio Info + * + */ + if ( ( infoType.Compare(KRemotingInfo) == KErrNone ) ||( infoType.Compare(KAppInfo) == KErrNone ) + || ( infoType.Compare(KDisplayInfo) == KErrNone ) || ( infoType.Compare(KAudioInfo) == KErrNone )) + { + for ( TInt j(0); j < aTmInfoElement.TmInfoElementCount(); j++ ) + { + match = TmInfoElementMatchingL( aTmInfoElement,j ); + if ( !match ) + { + break; + } + } + } + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_TERMINALMODEINFOMATCHING_EXIT ); + return match; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::TmInfoElementMatchingL +// Method is used to compare with each of the desired key-value of a particular +// info element. +// @param aTmInfoElement Reference to Terminal Mode Info Element object. +// @return Returns the boolean value ( ETrue/EFalse ) +// --------------------------------------------------------------------------------- +// +TBool CUpnpTmFilteredAppList::TmInfoElementMatchingL( const CUpnpTmInfoElement& aTmInfoElement, + TInt aIndex )const + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_TMINFOELEMENTMATCHINGL_ENTRY ); + TBool match(EFalse); + RBuf8 elementName; + CleanupClosePushL(elementName); + RBuf8 elementValue; + CleanupClosePushL(elementValue); + aTmInfoElement.GetTmInfoElementL(elementName,elementValue,aIndex ); + // Check for required "protocolID" element + if ( elementName.Compare(KProtocolId()) == KErrNone ) + { + const TDesC8& filterProtocol = iFilterInfo->ProtocolId(); + if ( ( filterProtocol.Length() == KErrNone) || + elementValue.MatchC(filterProtocol) != KErrNotFound ) + { + // Either protocolID( required element )is unavailable or desired + // protocolID matches + match = ETrue; + } + } + // Check for optional "format" element + else if ( elementName.Compare(KFormat()) == KErrNone ) + { + const TDesC8& filterFormat = iFilterInfo->Format(); + if ( ( filterFormat.Length() == KErrNone) || + elementValue.MatchC(filterFormat) != KErrNotFound ) + { + // Either format ( optional element )is unavailable or desired "format" matches + match = ETrue; + } + } + // Check for optional "direction" element + else if ( elementName.Compare(KRemotingDirection()) == KErrNone ) + { + const TDesC8& filterDirection = iFilterInfo->Direction(); + if ( ( filterDirection.Length() == KErrNone) || + elementValue.MatchC(filterDirection) != KErrNotFound ) + { + // Either direction ( optional element )is unavailable or desired "direction" matches + match = ETrue; + } + } + // Check for optional "appCategory" element + else if ( elementName.Compare(KAppCategory()) == KErrNone ) + { + const TDesC8& filterAppCategory = iFilterInfo->AppCategory(); + if ( ( filterAppCategory.Length() == KErrNone) || + elementValue.MatchC(filterAppCategory) != KErrNotFound ) + { + // Either appCategory ( optional element )is unavailable or desired "appCategory" matches + match = ETrue; + } + } + // Check for optional "trustLevel" element for App Info Type + else if ( ( elementName.Compare(KTrustLevel()) == KErrNone ) && + ( aTmInfoElement.TerminalModeInfoType() == KAppInfo()) ) + { + const TDesC8& filterAppTrustLevel = iFilterInfo->AppTrustLevel(); + if ( ( filterAppTrustLevel.Length() == KErrNone) || + elementValue.MatchC(filterAppTrustLevel) != KErrNotFound ) + { + // Either trustLevel ( optional element )is unavailable or desired "trustLevel" matches + match = ETrue; + } + } + // Check for optional "contentCategory" element + else if ( elementName.Compare(KContCategory()) == KErrNone ) + { + const TDesC8& filterContCategory = iFilterInfo->ContentCategory(); + if ( ( filterContCategory.Length() == KErrNone) || + elementValue.MatchC(filterContCategory) != KErrNotFound ) + { + // Either contentCategory ( optional element )is unavailable or desired + // "contentCategory" matches + match = ETrue; + } + } + // Check for optional "contentRules" element + else if ( elementName.Compare(KContentRules()) == KErrNone ) + { + const TDesC8& filterContentRules = iFilterInfo->ContentRules(); + if ( ( filterContentRules.Length() == KErrNone) || + elementValue.MatchC(filterContentRules) != KErrNotFound ) + { + // Either contentRules ( optional element )is unavailable or desired "contentRules" matches + match = ETrue; + } + } + // Check for optional "trustLevel" element for Display Info type + else if ( ( elementName.Compare(KTrustLevel()) == KErrNone ) && + ( aTmInfoElement.TerminalModeInfoType() == KDisplayInfo()) ) + { + const TDesC8& filterContTrustLevel = iFilterInfo->ContentTrustLevel(); + if ( ( filterContTrustLevel.Length() == KErrNone) || + elementValue.MatchC(filterContTrustLevel) != KErrNotFound ) + { + // Either trustLevel ( optional element )is unavailable or desired "trustLevel" matches + match = ETrue; + } + } + // Check for optional "audioType" element + else if ( elementName.Compare(KAudioType()) == KErrNone ) + { + const TDesC8& filterAudioType = iFilterInfo->AudioType(); + if ( ( filterAudioType.Length() == KErrNone) || + elementValue.MatchC(filterAudioType) != KErrNotFound ) + { + // Either audioType ( optional element )is unavailable or desired "audioType" matches + match = ETrue; + } + } + CleanupStack::PopAndDestroy(2,&elementName); + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_TMINFOELEMENTMATCHINGL_EXIT ); + return match; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::IconMatchingL +// The method checks if the optional icon element is present in the filter string +// If present then it compares with the icon of the given application +// @param aAppIndex index of the registered app +// @param aAppStore reference to CUpnpRemotableAppStore object +// --------------------------------------------------------------------------------- +// +void CUpnpTmFilteredAppList::IconMatchingL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_ICONMATCHINGL_ENTRY ); + const TDesC8& mimeType = iFilterInfo->MimeType(); + const TDesC8& width = iFilterInfo->Width(); + const TDesC8& height = iFilterInfo->Height(); + const TDesC8& depth = iFilterInfo->Depth(); + const RPointerArray& iconList = + iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).IconList(); + TInt iconCount = iconList.Count(); + if( ( iconCount == 0 ) || + (( mimeType.Length() == 0 ) && ( width.Length() == 0 ) && + ( height.Length() == 0 ) && ( depth.Length() == 0 ))) + { + /* Match is found and the given application needs to be there + in the response with no optional icon element */ + ConstructFilteredResponseL( aAppIndex ); + } + else + { + for ( TInt k(0); k < iconCount; k++ ) + { + if ( IconLookUp( *iconList[k] )) + { + /* Match is found and the given application needs to be there + in the response with the icon element to be present */ + ConstructFilteredResponseL( aAppIndex ); + break; + } + } + } + OstTraceFunctionExit0( DUP1_CUPNPTMFILTEREDAPPLIST_ICONMATCHINGL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::ConstructFilteredResponseL +// Constructs the filtered soap response buffer for GetApplicationList action +// @param aAppIndex index the registered application +// @param aAppStore Reference to CUpnpRemotableAppStore object +// --------------------------------------------------------------------------------- +// +void CUpnpTmFilteredAppList::ConstructFilteredResponseL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTFILTEREDRESPONSEL_ENTRY ); + iTmServerImpl.ConstructLeadingSoapBufferL(aAppIndex); + const TDesC8& appDesc = iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).AppDescription(); + if ( ( iFilterInfo->AppDescription().Length() != KErrNone ) + && ( appDesc.Length() != KErrNone ) ) + { + // Appends the optional application desciption element + iTmServerImpl.AppendDataL(KStartNameDesc); + iTmServerImpl.AppendDataL(appDesc); + iTmServerImpl.AppendDataL(KEndNameDesc); + } + const TDesC8& mimeType = iFilterInfo->MimeType(); + const TDesC8& width = iFilterInfo->Width(); + const TDesC8& height = iFilterInfo->Height(); + const TDesC8& depth = iFilterInfo->Depth(); + if (( mimeType.Length() != KErrNone ) || ( width.Length() != KErrNone ) || + ( height.Length() != KErrNone ) || ( depth.Length() != KErrNone )) + { + // Even if any one of the matching optional child element of the icon element is present + // in the filter string,we will return the complete icon information related to that icon + const RPointerArray& iconList = + iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).IconList(); + TInt iconCount = iconList.Count(); + if ( iconCount > KErrNone ) + { + // Appends the optional icon element + iTmServerImpl.AppendDataL(KStartIconList); + for ( TInt i(0); i < iconCount; i++ ) + { + if ( IconLookUp( *iconList[i] )) + { + iTmServerImpl.SetRemotableAppIconInfoL( *iconList[i] ); + } + } + iTmServerImpl.AppendDataL(KEndIconList); + } + } + // Appends allowed profile ID list + if ( iFilterInfo->AllowedProfileIdList().Length() != KErrNone ) + { + iTmServerImpl.SetAllowedProfileIdListL(aAppIndex); + } + + // Appends the different associated terminal mode info elements + const TDesC8& filterAppCategory = iFilterInfo->AppCategory(); + const TDesC8& filterAppTrustLevel = iFilterInfo->AppTrustLevel(); + const TDesC8& filterContCategory = iFilterInfo->ContentCategory(); + const TDesC8& filterContentRules = iFilterInfo->ContentRules(); + const TDesC8& filterContTrustLevel = iFilterInfo->ContentTrustLevel(); + const TDesC8& filterAudioType = iFilterInfo->AudioType(); + + const RPointerArray& tmInfoElementList = + iTmServerImpl.iAppStore->FetchRemotableApp(aAppIndex).TmInfoElementList(); + /** + * Case 1. In case of matching child elements of remotingInfo ,all the child elements of the + * remotingInfo element are sent in the response as protocolID is a required element. + * Case 2. In case of matching child elements of appInfo,displayInfo or audioInfo ,if one or + * more of the optional child element is available in the filter string,then all + * the optional child elements for that info element will be sent in the response. + */ + for ( TInt j(0); j < tmInfoElementList.Count(); j++) + { + /** + * No checking for availabilty of child elements of remotingInfo is needed , because + * protocolID( child element of remotingInfo ) is required/must element in the response + * and as per the rule even if one child element is present in the filter string, + * all other optional child elements of their parent info element too will be sent. + */ + if ( ( tmInfoElementList[j]->TerminalModeInfoType() == KRemotingInfo ) || + ( ( tmInfoElementList[j]->TerminalModeInfoType() == KAppInfo ) && + (( filterAppCategory.Length() != KErrNone ) || (filterAppTrustLevel.Length() != KErrNone ))) || + ( ( tmInfoElementList[j]->TerminalModeInfoType() == KDisplayInfo ) && + (( filterContCategory.Length() != KErrNone ) || (filterContentRules.Length() != KErrNone ) || + (filterContTrustLevel.Length() != KErrNone ) )) || ( ( tmInfoElementList[j]->TerminalModeInfoType() == KAudioInfo ) + && ( filterAudioType.Length() != KErrNone ))) + { + // Called for each terminal mode element associated with the App + iTmServerImpl.SetTerminalModeInfoElementL( *tmInfoElementList[j] ); + } + } + // Appends resource status element for the app if it is available + if ( iFilterInfo->ResourceStatus().Length() != KErrNone ) + { + iTmServerImpl.SetResourceStatusL(aAppIndex); + } + // End of an application + iTmServerImpl.AppendDataL(KEndApp); + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_CONSTRUCTFILTEREDRESPONSEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::IconLookUp +// Performs the icon look up +// Checks if the requested icon and given icon matches +// @param aIcon Reference to the Terminal Mode Icon object +// @return Returns boolean value(true or false) +// --------------------------------------------------------------------------------- +// +TBool CUpnpTmFilteredAppList::IconLookUp( CUpnpTerminalModeIcon& aIcon ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_ICONLOOKUP_ENTRY ); + TBool matchFound(EFalse); + const TDesC8& filterMimeType = iFilterInfo->MimeType(); + const TDesC8& filterWidth = iFilterInfo->Width(); + const TDesC8& filterHeight = iFilterInfo->Height(); + const TDesC8& filterDepth = iFilterInfo->Depth(); + + // Check whether the icon is meant to be used only at launch time + TBuf8 widthBuf; + widthBuf.Num(aIcon.Width()); + TBuf8 heightBuf; + heightBuf.Num(aIcon.Height()); + TBuf8 depthBuf; + depthBuf.Num(aIcon.Depth()); + /* Check if the icon in provided in the input filter string, and if so + then does it match with the desired icon ( type and dimension ) */ + if ( (( filterMimeType.Length() == 0 ) ||( (aIcon.MimeType()).MatchC(filterMimeType) != KErrNotFound)) + && (( filterWidth.Length() == 0 ) ||( widthBuf.MatchC(filterWidth) != KErrNotFound)) + && (( filterHeight.Length() == 0 ) ||( heightBuf.MatchC(filterHeight) != KErrNotFound)) + && (( filterDepth.Length() == 0 ) ||( depthBuf.MatchC(filterDepth) != KErrNotFound))) + { + matchFound = ETrue; + } + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_ICONLOOKUP_EXIT ); + return matchFound; + } + +// --------------------------------------------------------------------------------- +// Method is used to check whether signature element is needed in the response +// to GetApplicationList action or not +// --------------------------------------------------------------------------------- +const TDesC8& CUpnpTmFilteredAppList::SignatureElement()const + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_GETSIGNATUREELEMENT_ENTRY ); + return iFilterInfo->Signature(); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmFilteredAppList::RemoveWhiteSpace +// Method is used to remove leading and trailing whitespaces from the descriptor's data +// @param aData Descriptor's data from which whitespaces have to be removed +// @return Returns the descriptor having no white spaces +// --------------------------------------------------------------------------------- +// +const TDesC8& CUpnpTmFilteredAppList::RemoveWhiteSpace( TPtrC8& aData ) + { + OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_REMOVEWHITESPACE_ENTRY ); + // Removes the leading white spaces + TInt length = aData.Length(); + TInt i = 0; + TBool done = EFalse; + while( !done && i < length ) + { + TChar current = aData[i]; + done = !current.IsSpace(); + if( !done ) + ++i; + } + aData.Set(aData.Mid(i)); /* aData now does not have any white space character + ahead of its actual data */ + + // Removes the trailing white spaces + length = aData.Length(); + i = 0; + done = EFalse; + while( !done && i < length ) + { + TChar current = aData[(length-1) - i]; + done = !current.IsSpace(); + if( !done ) + ++i; + } + aData.Set(aData.Left(aData.Length() - i)); /* aData now does not have any white space character + following the actual data */ + OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_REMOVEWHITESPACE_EXIT ); + return aData; + } + +// End of File + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmiconmapping.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmiconmapping.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,197 @@ +/** +* Copyright (c) 2010 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: CUpnpTmIconMapping class implementation. +* +*/ + +//Include Files + +#include "upnptmiconmapping.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmiconmappingTraces.h" +#endif + + +_LIT8(KSvgMimeType, "image/svg+xml"); + +// ================= MEMBER FUNCTIONS ============================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping* CUpnpTmIconMapping::NewL( ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_NEWL_ENTRY ); + CUpnpTmIconMapping* self = new (ELeave) CUpnpTmIconMapping(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_NEWL_EXIT ); + return self; + } + + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::CUpnpTmIconMapping +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping::CUpnpTmIconMapping( ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmIconMapping::ConstructL() + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_CONSTRUCTL_ENTRY ); + iFileUrlArray = new ( ELeave ) CDesC8ArrayFlat( KExpectedMaxIconParms ); + iFilePathArray = new ( ELeave ) CDesCArrayFlat( KExpectedMaxIconParms ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::~CUpnpTmIconMapping +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping::~CUpnpTmIconMapping() + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_CUPNPTMICONMAPPING_ENTRY ); + if ( iFileUrlArray ) + { + iFileUrlArray->Reset(); + delete iFileUrlArray; + } + if ( iFilePathArray ) + { + iFilePathArray->Reset(); + delete iFilePathArray; + } + iWidthArray.Close(); + iHeightArray.Close(); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_CUPNPTMICONMAPPING_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::AddIconFileInfoL +// Method is used to store information about each application icon which can be +// used to fetch iconPath for the corresponding iconUrl and to determine whether +// conversion is needed or not. +// @param aUrl Iccon URL. +// @param aPath Icon Path. +// @param aWidth Width of the icon. +// @param aHeight Height of the icon. +// ------------------------------------------------------------------------------------- +// +void CUpnpTmIconMapping::AddIconFileInfoL( const TDesC8& aUrl, const TDesC& aPath, + TInt aWidth, TInt aHeight ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_ADDICONFILEINFOL_ENTRY ); + iFileUrlArray->AppendL( aUrl ); + iFilePathArray->AppendL( aPath ); + iWidthArray.AppendL( aWidth ); + iHeightArray.AppendL( aHeight ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_ADDICONFILEINFOL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::GetSvgIconPath +// Method is used to fetch the equivalent icon path for the requested icon url +// @param aUrl iconUrl +// @param aSvgFilePath[out] iconPath +// @return Returns the position of the filepath in the array if found else +// returns KErrNotFound. +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmIconMapping::GetSvgIconPath( const TDesC8& aUrl,RBuf& aSvgFilePath ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_GETSVGICONPATH_ENTRY ); + TInt pos; + if ( iFileUrlArray->Find(aUrl,pos) == KErrNone ) + { + aSvgFilePath.Close(); + aSvgFilePath.Create((*iFilePathArray)[pos]); + } + else + { + // The requested file is not available + pos = KErrNotFound; + } + OstTraceFunctionExit0( CUPNPTMICONMAPPING_GETSVGICONPATH_EXIT ); + return pos; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::IsConversionNeeded +// Method is used to fetch the dimensions of the icon which needs to be served and +// also return the information whether conversion is needed for a particular icon. +// @param aIndex Index of the icon filepath +// @param aClientIconPref Reference to Client Icon Preference object. +// @param[out] aIconWidth Width of the icon which needs to be sent. +// @param[out] aIconHeight Height of the icon which needs to be sent. +// @return Returns the boolean value for conversion is needed(true) or not(false). +// --------------------------------------------------------------------------------- +// +TBool CUpnpTmIconMapping::IsConversionNeeded( TInt aIndex, const CUpnpTmClientIconPref& aClientIconPref, + TInt& aIconWidth, TInt& aIconHeight ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_ISCONVERSIONNEEDED_ENTRY ); + ASSERT( ( aIndex >= 0 ) && ( aIndex < iWidthArray.Count()) ); + TBool isConversionNeeded(ETrue); + // Fetch the client's icon preferences + const TDesC8& mimeType = aClientIconPref.MimeType(); + TInt iconWidth = aClientIconPref.Width(); + TInt iconHeight = aClientIconPref.Height(); + OstTraceExt2( TRACE_NORMAL, DUP1_CUPNPTMICONMAPPING_ISCONVERSIONNEEDED, "CUpnpTmIconMapping::IsConversionNeeded;iconWidth=%d;iconHeight=%d", iconWidth, iconHeight ); + + if ( mimeType.Compare(KSvgMimeType) == KErrNone ) + { + // Client supports "image/svg+xml" mime type icons + if ((( iconWidth == KErrNone ) || ( iconWidth == iWidthArray[aIndex] )) && + (( iconHeight == KErrNone ) || ( iconHeight == iHeightArray[aIndex] ))) + { + /* Either the client has not provided its dimension preferences or + preferred width and height also matches. So no conversion needed */ + isConversionNeeded = EFalse; + } + } + /* + * If the width and height fields are set properly then only use the client's + * specified icon dimensions else use the icon's original dimensions. + */ + if ( isConversionNeeded && iconWidth && iconHeight ) + { + // Use the dimensions specified by the client + aIconWidth = iconWidth; + aIconHeight = iconHeight; + } + else + { + // Use original dimensions + aIconWidth = iWidthArray[aIndex]; + aIconHeight = iHeightArray[aIndex]; + } + OstTraceExt2( TRACE_NORMAL, CUPNPTMICONMAPPING_ISCONVERSIONNEEDED, "CUpnpTmIconMapping::IsConversionNeeded;aIconWidth=%d;aIconHeight=%d", aIconWidth, aIconHeight ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_ISCONVERSIONNEEDED_EXIT ); + return isConversionNeeded; + } diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptminfoelement.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptminfoelement.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,161 @@ +/** +* Copyright (c) 2010 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: CUpnpTmInfoElement class implementation. +* +*/ + +// Include Files +#include "upnptminfoelement.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptminfoelementTraces.h" +#endif + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmInfoElement* CUpnpTmInfoElement::NewL( TTerminalModeInfoType aTerminalModeInfoType ) + { + OstTraceFunctionEntry0( CUPNPTMINFOELEMENT_NEWL_ENTRY ); + CUpnpTmInfoElement* self = new (ELeave) CUpnpTmInfoElement(); + CleanupStack::PushL(self); + self->ConstructL( aTerminalModeInfoType ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMINFOELEMENT_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::CUpnpTmInfoElement +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmInfoElement::CUpnpTmInfoElement( ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::ConstructL +// Symbian 2nd phase constructor can leave. +// @param aTerminalModeInfoType Type of info element. Enum value. +// @see TTerminalModeInfoType enumeration +// --------------------------------------------------------------------------------- +// +void CUpnpTmInfoElement::ConstructL( TTerminalModeInfoType aTerminalModeInfoType ) + { + OstTraceFunctionEntry0( CUPNPTMINFOELEMENT_CONSTRUCTL_ENTRY ); + switch( aTerminalModeInfoType ) + { + case ERemotingInfo: + { + iInfoTypeBuffer = KRemotingInfo().AllocL(); + } + break; + case EAppInfo: + { + iInfoTypeBuffer = KAppInfo().AllocL(); + } + break; + case EDisplayInfo: + { + iInfoTypeBuffer = KDisplayInfo().AllocL(); + } + break; + case EAudioInfo: + { + iInfoTypeBuffer = KAudioInfo().AllocL(); + } + break; + default: + { + // Undefined. Should not come here at all. + User::Leave(KErrArgument); + } + break; + } + OstTraceFunctionExit0( CUPNPTMINFOELEMENT_CONSTRUCTL_EXIT ); + } + +// ------------------------------------------------------------------------------------------ +// CUpnpTmInfoElement::~CUpnpTmInfoElement +// Destructor +// ------------------------------------------------------------------------------------------ +// +CUpnpTmInfoElement::~CUpnpTmInfoElement() + { + OstTraceFunctionEntry0( CUPNPTMINFOELEMENT_CUPNPTMINFOELEMENT_ENTRY ); + // Cleans up the arrays + for ( TInt i(0); i < iInfoElementNameArray.Count(); i++ ) + { + iInfoElementNameArray[i].Close(); + } + for ( TInt i(0); i < iInfoElementValueArray.Count(); i++ ) + { + iInfoElementValueArray[i].Close(); + } + iInfoElementNameArray.Close(); + iInfoElementValueArray.Close(); + delete iInfoTypeBuffer; + OstTraceFunctionExit0( CUPNPTMINFOELEMENT_CUPNPTMINFOELEMENT_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::AddTmInfoElementL +// Method is used to add key-value pair +// @param aName Name of the key +// @param aValue value for the key +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmInfoElement::AddTmInfoElementL( const TDesC8& aName, + const TDesC8& aValue ) + { + OstTraceFunctionEntry0( CUPNPTMINFOELEMENT_ADDTMINFOELEMENTL_ENTRY ); + iElementName.CreateL(aName); + iElementValue.CreateL(aValue); + iInfoElementNameArray.AppendL(iElementName); + iInfoElementValueArray.AppendL(iElementValue); + OstTraceFunctionExit0( CUPNPTMINFOELEMENT_ADDTMINFOELEMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::GetTmInfoElement +// Method is used to fetch the key-value pair for the index provided in the input. +// @param aInfoElementName[out] Name of the key +// @param aInfoElementValue[out] Value for the key +// @param aIndex Index of the array for which key-value pair is needed +// --------------------------------------------------------------------------------- +// +void CUpnpTmInfoElement::GetTmInfoElementL( RBuf8& aInfoElementName, + RBuf8& aInfoElementValue, TInt aIndex )const + { + OstTraceFunctionEntry0( CUPNPTMINFOELEMENT_GETTMINFOELEMENTLIST_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMINFOELEMENT_GETTMINFOELEMENTL, "CUpnpTmInfoElement::GetTmInfoElementL;aIndex=%d", aIndex ); + if ( ( aIndex < KErrNone ) || ( aIndex >= iInfoElementNameArray.Count()) ) + { + // Leaves in case of invalid array index + User::Leave(KErrArgument); + } + aInfoElementName.Close(); + aInfoElementName.CreateL(iInfoElementNameArray[aIndex]); + aInfoElementValue.Close(); + aInfoElementValue.CreateL(iInfoElementValueArray[aIndex]); + OstTraceFunctionExit0( CUPNPTMINFOELEMENT_GETTMINFOELEMENTLIST_EXIT ); + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserver.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,223 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServer class implementation. +* +*/ + +// Include Files +#include "upnptmserver.h" +#include "upnptmserverimpl.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverTraces.h" +#endif + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmServer::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpTmServer* CUpnpTmServer::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + MUpnpTmServerObserver& aUpnpTmServerObserver) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_NEWL_ENTRY ); + CUpnpTmServer* self = new (ELeave) CUpnpTmServer(); + CleanupStack::PushL(self); + self->ConstructL( aDeviceInfo, aUpnpTmServerObserver); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMSERVER_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServer::CUpnpTmServer +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmServer::CUpnpTmServer() + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServer::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServer::ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo, MUpnpTmServerObserver& aUpnpTmServerObserver) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_CONSTRUCTL_ENTRY ); + iTmServerImpl = CUpnpTmServerImpl::NewL( aDeviceInfo, aUpnpTmServerObserver); + OstTraceFunctionExit0( CUPNPTMSERVER_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Default Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmServer::~CUpnpTmServer() + { + OstTraceFunctionEntry0( CUPNPTMSERVER_CUPNPTMSERVER_ENTRY ); + delete iTmServerImpl; + OstTraceFunctionExit0( CUPNPTMSERVER_CUPNPTMSERVER_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method is used by Automotive Server to register its applications one by one. +// @param aRemotableApp Pointer to Remotable app object. Ownership is transferred. +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::RegisterAppL( CUpnpRemotableApp* aRemotableApp ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_REGISTERAPPL_ENTRY ); + iTmServerImpl->RegisterAppL(aRemotableApp); + OstTraceFunctionExit0( CUPNPTMSERVER_REGISTERAPPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method is used by Automotive Server to register all the desired applications +// in one go. +// @param aRemotableAppList Pointer Array of remotable app objects. +// Ownership of all the objects is passed. +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::RegisterAppsL(const RPointerArray& aRemotableAppList) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_REGISTERAPPSL_ENTRY ); + iTmServerImpl->RegisterAppsL(aRemotableAppList); + OstTraceFunctionExit0( CUPNPTMSERVER_REGISTERAPPSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method is used by Automotive Server to un-register its applications which have +// already been registeredone by one +// @param aAppId App ID of the application +// --------------------------------------------------------------------------------- +// +EXPORT_C TInt CUpnpTmServer::UnRegisterApp( TUint aAppId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_UNREGISTERAPP_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVER_UNREGISTERAPP, "CUpnpTmServer::UnRegisterApp;aAppId=%u", aAppId ); + return iTmServerImpl->UnRegisterApp( aAppId ); + } + +// --------------------------------------------------------------------------------- +// Method is used to un-register multiple applications in one go. +// @param aAppIdArray Array of app IDs +// --------------------------------------------------------------------------------- +// +EXPORT_C TInt CUpnpTmServer::UnRegisterApps( const RArray& aAppIdArray ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_UNREGISTERAPPS_ENTRY ); + return iTmServerImpl->UnRegisterApps( aAppIdArray ); + } + +// --------------------------------------------------------------------------------- +// Method to set the XML signature of the registered apps. +// @param aSignature XML formatted signature buffer +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::SetXmlSignatureL( const TDesC8& aSignature ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_SETXMLSIGNATUREL_ENTRY ); + iTmServerImpl->SetXmlSignatureL( aSignature ); + OstTraceFunctionExit0( CUPNPTMSERVER_SETXMLSIGNATUREL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method is used by Automotive Server to start publishing the remote ui server +// device and its service +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::StartL() + { + OstTraceFunctionEntry0( CUPNPTMSERVER_STARTL_ENTRY ); + iTmServerImpl->StartDeviceL(); + OstTraceFunctionExit0( CUPNPTMSERVER_STARTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method is used by Automotive Server to stop publishing the remote ui server +// device and its service +// ------------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::StopL() + { + OstTraceFunctionEntry0( CUPNPTMSERVER_STOPL_ENTRY ); + iTmServerImpl->StopDeviceL(); + OstTraceFunctionExit0( CUPNPTMSERVER_STOPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method to fetch the Remotable App object by passing the App ID of the same. +// Method is invoked by the Automotive Server when it wishes to modify any of the +// existing remotable app. +// @param aAppId APP ID of the application for which caller wants the access. +// @param aErr[out] Error code. KErrNone if app is found otherwise KErrNotFound +// Returns reference to the remotable app object. +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpRemotableApp& CUpnpTmServer::GetRemotableApp( TUint aAppId, TInt& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_REMOTABLEAPP_ENTRY ); + OstTrace1( TRACE_NORMAL, DUP1_CUPNPTMSERVER_GETREMOTABLEAPP, "CUpnpTmServer::GetRemotableApp;aAppId =%d", aAppId ); + return iTmServerImpl->GetRemotableApp( aAppId, aErr ); + } + +// --------------------------------------------------------------------------------- +// Method through which the notification of applications whose status +// has changed is sent across to the Car Kit through the Service +// @param aUpdatedAppIdList Array of app IDs which have undergone some +// kind of change[ added, delete or modified ] +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::UpdateAppStatusL( const RArray& aUpdatedAppIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_UPDATEAPPSTATUSL_ENTRY ); + iTmServerImpl->UpdateAppStatusL( aUpdatedAppIdList ); + OstTraceFunctionExit0( CUPNPTMSERVER_UPDATEAPPSTATUSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method through which the notification of applications whose entries +// in the application list have changed is sent across to the Car Kit +// through the Service +// @param aUpdatedAppIdList Array of app IDs which have undergone some +// kind of change[ added, delete or modified ] +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::UpdateAppListL( const RArray& aUpdatedAppIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_UPDATEAPPLISTL_ENTRY ); + iTmServerImpl->UpdateAppListL( aUpdatedAppIdList ); + OstTraceFunctionExit0( CUPNPTMSERVER_UPDATEAPPLISTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// Method through which the notification of profileIDs which are not used +// used by any Terminal Mode service hosted on the Terminal Mode device +// is sent across to the Car Kit through the Service +// @param aUnusedProfileIdList Array of profile IDs which have undergone some +// kind of change +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServer::UpdateUnusedProfileIdsL( const RArray& aUnusedProfileIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVER_UPDATEUNUSEDPROFILEIDSL_ENTRY ); + iTmServerImpl->UpdateUnusedProfileIdsL( aUnusedProfileIdList ); + OstTraceFunctionExit0( CUPNPTMSERVER_UPDATEUNUSEDPROFILEIDSL_EXIT ); + } diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserverdescriptionprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserverdescriptionprovider.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,185 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDescriptionProvider class implementation. +* +*/ + +#include "upnptmserverdescriptionprovider.h" +#include +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverdescriptionproviderTraces.h" +#endif + + +_LIT(KPublic, "public\\"); +_LIT(KIconPath, "icon"); + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::NewL +// +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDescriptionProvider* CUpnpTmServerDescriptionProvider::NewL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_NEWL_ENTRY ); + CUpnpTmServerDescriptionProvider* self = new (ELeave) CUpnpTmServerDescriptionProvider(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMSERVERDESCRIPTIONPROVIDER_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::CUpnpTmServerDescriptionProvider +// +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDescriptionProvider::CUpnpTmServerDescriptionProvider() + { + // No implementation required + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::~CUpnpTmServerDescriptionProvider +// +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDescriptionProvider::~CUpnpTmServerDescriptionProvider() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_CUPNPTMSERVERDESCRIPTIONPROVIDER_ENTRY ); + iFs.Close(); + OstTraceFunctionExit0( CUPNPTMSERVERDESCRIPTIONPROVIDER_CUPNPTMSERVERDESCRIPTIONPROVIDER_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::ConstructL +// +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDescriptionProvider::ConstructL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_CONSTRUCTL_ENTRY ); + User::LeaveIfError( iFs.Connect() ); + OstTraceFunctionExit0( CUPNPTMSERVERDESCRIPTIONPROVIDER_CONSTRUCTL_EXIT ); + } + + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::OnDeviceDescription +// +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerDescriptionProvider::OnDeviceDescription( + CUpnpDeviceDescriptionRequest& aRequest ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONDEVICEDESCRIPTION_ENTRY ); + return OnRequest( aRequest ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::OnServiceDescription +// +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerDescriptionProvider::OnServiceDescription( + CUpnpDeviceDescriptionRequest& aRequest ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONSERVICEDESCRIPTION_ENTRY ); + return OnRequest( aRequest ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::OnIcon +// +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerDescriptionProvider::OnIcon( CUpnpDeviceDescriptionRequest& aRequest ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONICON_ENTRY ); + return OnRequest( aRequest ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::GetFile +// +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerDescriptionProvider::GetFile( const TDesC8& /*aUri*/, RFile& aFile ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_GETFILE_ENTRY ); + return ( aFile.Open( iFs, iFilePath, EFileShareReadersOnly | EFileRead )); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::OnRequest +// +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerDescriptionProvider::OnRequest( CUpnpDeviceDescriptionRequest& aRequest ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONREQUEST_ENTRY ); + TPtrC8 fileName; + TInt error(KErrNone); + TPtrC8 urlPath = UpnpFileUtil::ExtractUrlPath( aRequest.Uri(), fileName, error ); + if( error == KErrNone) + { + TRAP( error, OnRequestL( urlPath,fileName ) ); + } + OstTraceFunctionExit0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONREQUEST_EXIT ); + return error; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDescriptionProvider::OnRequestL +// @param aUrlPath URL +// @param aFileName FileName +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDescriptionProvider::OnRequestL( const TDesC8& aUrlPath, + const TDesC8& aFileName ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONREQUESTL_ENTRY ); + // 8-bit to 16-bit conversion of URL path and file path + TBuf urlPath; + urlPath.Copy(aUrlPath); + TBuf fileName; + fileName.Copy(aFileName); + + // Fetches the private directory + User::LeaveIfError( iFs.PrivatePath( iFilePath ) ); + iFilePath.Append(KPublic()); + /** + * Appends the filename to the file path. + * 1. In case of icon file, it first appends icon directory and then appends the filename. + * 2. In case of device and service xml files, it merely appends filename to the file path. + */ + if ( urlPath.Find(KIconPath()) != KErrNotFound ) + { + // The request is for icon file + iFilePath.Append(urlPath.Left(urlPath.Locate(KForwardSlash))); + iFilePath.Append(UpnpString::KDoubleBackSlash16()); + iFilePath.Append(KIconPath()); + } + else + { + iFilePath.Append(urlPath); + } + iFilePath.Append(UpnpString::KDoubleBackSlash16()); + // Appends filename to the file path. + iFilePath.Append(fileName); + OstTraceFunctionExit0( CUPNPTMSERVERDESCRIPTIONPROVIDER_ONREQUESTL_EXIT ); + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserverdevice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserverdevice.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,180 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDevice class implementation. +* +*/ + +// INCLUDE FILES +#include "upnptmserverdevice.h" +#include +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverdeviceTraces.h" +#endif + + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDevice* CUpnpTmServerDevice::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + CUpnpTmServerImpl& aTmServerImpl ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_NEWL_ENTRY ); + CUpnpTmServerDevice* self = new( ELeave ) CUpnpTmServerDevice(); + CleanupStack::PushL( self ); + self->ConstructL( aDeviceInfo, aTmServerImpl ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_NEWL_EXIT ); + return self; + } + +// ------------------------------------------------------------------------------------- +// CUpnpTmServerDevice::CUpnpTmServerDevice +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDevice::CUpnpTmServerDevice():iIsStarted(EFalse) + { + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo, + CUpnpTmServerImpl& aTmServerImpl ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_CONSTRUCTL_ENTRY ); + iXmlParser = CUpnpTmServerDeviceXmlParser::NewL( aDeviceInfo ); + iXmlParser->StartL(); + iDescriptionProvider = CUpnpTmServerDescriptionProvider::NewL(); + + iDescriptionStore = CUpnpDeviceDescriptionStore::NewL( iXmlParser->DevicePath() ); + // creates device + iDevice = CUpnpDeviceImplementation::NewL( iXmlParser->DescriptionUri(), + *iDescriptionStore, + *iDescriptionProvider ); + // Creates two services + iTmAppServerService = CUpnpTmAppServerService::NewL( *iDevice, iXmlParser->AppServerSrvPath(), aTmServerImpl ); + iTmClientProfileService = CUpnpTmClientProfileService::NewL( *iDevice, iXmlParser->ClientProfileSrvPath(), + aTmServerImpl ); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::~CUpnpTmServerDevice +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDevice::~CUpnpTmServerDevice() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_CUPNPTMSERVERDEVICE_ENTRY ); + delete iTmAppServerService; + delete iTmClientProfileService; + delete iDevice; + delete iDescriptionStore; + delete iDescriptionProvider; + delete iXmlParser; + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_CUPNPTMSERVERDEVICE_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::StartTmServerDeviceL +// Starts the Terminal Mode Server Device if not started. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::StartTmServerDeviceL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_STARTTMSERVERDEVICEL_ENTRY ); + if ( iIsStarted ) + { + // Device is already up and running + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_STARTTMSERVERDEVICEL_EXIT ); + return; + } + + if ( !iDevice ) + { + // Leaves if the device object is not initialised + User::Leave(KErrNotReady); + } + // Starts TM Server Device + iDevice->StartL(); + iIsStarted = ETrue; + OstTraceFunctionExit0( DUP1_CUPNPTMSERVERDEVICE_STARTTMSERVERDEVICEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::StopTmServerDeviceL +// Stops the Terminal Mode Server Device. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::StopTmServerDeviceL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_STOPTMSERVERDEVICEL_ENTRY ); + if ( iDevice ) + { + iDevice->StopL(); + } + iIsStarted = EFalse; + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_STOPTMSERVERDEVICEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::AppStatusUpdateL +// Notifies the client about the application status updates +// @param aStatusEventBuffer buffer holding the update app status information +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::AppStatusUpdateL( const TDesC8& aStatusEventBuffer ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_APPSTATUSUPDATEL_ENTRY ); + iTmAppServerService->AppStatusUpdateEventL(aStatusEventBuffer); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_APPSTATUSUPDATEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::AppListUpdateL +// Notifies the client about the application list updates +// @param aListEventBuffer buffer holding the update app list information +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::AppListUpdateL( const TDesC8& aListEventBuffer ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_APPLISTUPDATEL_ENTRY ); + iTmAppServerService->AppListUpdateEventL(aListEventBuffer); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_APPLISTUPDATEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDevice::aUnusedProfileIdBuffer +// Notifies the client about the application list updates +// @param aUnusedProfileIdBuffer buffer holding the update app list information +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDevice::UnUsedProfileIdUpdateL( const TDesC8& aUnusedProfileIdBuffer ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICE_UNUSEDPROFILEIDUPDATEL_ENTRY ); + iTmClientProfileService->UnUsedProfileIdEventL(aUnusedProfileIdBuffer); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICE_UNUSEDPROFILEIDUPDATEL_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserverdeviceinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserverdeviceinfo.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,134 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDeviceInfo class implementation. +* +*/ + +// Include Files +#include "upnptmserverdeviceinfo.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverdeviceinfoTraces.h" +#endif + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::NewL +// Two-phased constructor. +// @param aIapId IAP ID. +// --------------------------------------------------------------------------------- +// +EXPORT_C CUpnpTmServerDeviceInfo* CUpnpTmServerDeviceInfo::NewL( TUint32 aIapId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_NEWL_ENTRY ); + CUpnpTmServerDeviceInfo* self = new (ELeave) CUpnpTmServerDeviceInfo( ); + CleanupStack::PushL(self); + self->ConstructL( aIapId ); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::CUpnpTmServerDeviceInfo +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDeviceInfo::CUpnpTmServerDeviceInfo( ):iDeviceInfo(NULL), + iBtAddr(NULL),iStartConnValue(EFalse) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::ConstructL +// Symbian 2nd phase constructor can leave. +// @param aIapId IAP ID. Leaves if the proper IAP ID is not set. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceInfo::ConstructL( TUint32 aIapId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_CONSTRUCTL_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERDEVICEINFO_CONSTRUCTL, "CUpnpTmServerDeviceInfo::ConstructL;aIapId=%d", aIapId ); + + if ( aIapId <= KErrNone ) + { + User::Leave( KErrArgument ); // Leaves in case of invalid IAP ID + } + iIapId = aIapId; + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::~CUpnpTmServerDeviceInfo +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDeviceInfo::~CUpnpTmServerDeviceInfo() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_CUPNPTMSERVERDEVICEINFO_ENTRY ); + delete iDeviceInfo; + delete iBtAddr; + iDeviceIconList.ResetAndDestroy(); + iDeviceIconList.Close(); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_CUPNPTMSERVERDEVICEINFO_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::SetDeviceInfoL +// Method is used to provide Nokia specific additional info about the device +// @param aDeviceInfo XML formatted buffer containg deviceInfo element. +// ------------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServerDeviceInfo::SetDeviceInfoL( const TDesC8& aDeviceInfo ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_SETDEVICEINFOL_ENTRY ); + delete iDeviceInfo; + iDeviceInfo = NULL; + iDeviceInfo = aDeviceInfo.AllocL(); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_SETDEVICEINFOL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::SetBtAddressL +// Method is used to set bluetooth MAC address of the device +// @param aBtAddress BT MAC address +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServerDeviceInfo::SetBtAddressL( const TDesC8& aBtAddress ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_SETBTADDRESSL_ENTRY ); + delete iBtAddr; + iBtAddr = NULL; + iBtAddr = aBtAddress.AllocL(); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_SETBTADDRESSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::AddDeviceIconL +// Method is used to provide device icon information. +// @param aDeviceIcon Pointer to the Terminal Mode Icon object. +// Ownership of the object is passed. +// --------------------------------------------------------------------------------- +// +EXPORT_C void CUpnpTmServerDeviceInfo::AddDeviceIconL( CUpnpTerminalModeIcon* aDeviceIcon ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEINFO_ADDDEVICEICONL_ENTRY ); + iDeviceIconList.AppendL(aDeviceIcon); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEINFO_ADDDEVICEICONL_EXIT ); + } + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserverdevicexmlparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserverdevicexmlparser.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,505 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDeviceXmlParser class implementation. +* +*/ + +// System Includes +#include +#include + +// User Includes +#include "upnptmserverdevicexmlparser.h" +#include "upnpterminalmodeicon.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverdevicexmlparserTraces.h" +#endif + + +//Literals +_LIT8(KTextXml, "text/xml"); +_LIT8(KRootDeviceXmlLead, "10urn:schemas-upnp-org:device:TmServerDevice:1S60http://www.nokia.com"); +_LIT8(KRootDeviceXmlTrail,"urn:schemas-upnp-org:service:TmApplicationServer:1urn:upnp-org:serviceId:TmApplicationServer1/tmserverdevice1/tmapplicationserver1.xml/tmserverdevice1/tmapplicationserver1/control/tmserverdevice1/tmapplicationserver1/eventingurn:schemas-upnp-org:service:TmClientProfile:1" + "urn:upnp-org:serviceId:TmClientProfile1/tmserverdevice1/tmclientprofile1.xml/tmserverdevice1/tmclientprofile1/control/tmserverdevice1/tmclientprofile1/eventing"); +_LIT8(KAppServerSrvXml, "1 0 GetApplicationListAppListingFilterin A_ARG_TYPE_String ProfileIDin A_ARG_TYPE_ProfileID " + "AppListingoutA_ARG_TYPE_AppListLaunchApplicationAppIDinA_ARG_TYPE_AppIDProfileIDinA_ARG_TYPE_ProfileIDAppURI" + "outA_ARG_TYPE_URITerminateApplicationAppIDinA_ARG_TYPE_AppIDProfileIDinA_ARG_TYPE_ProfileIDTerminationResultout" + "A_ARG_TYPE_BoolGetApplicationStatusAppIDinA_ARG_TYPE_AppIDAppStatusoutA_ARG_TYPE_AppStatus" + "AppStatusUpdate stringAppListUpdate stringA_ARG_TYPE_AppStatus string A_ARG_TYPE_AppListstringA_ARG_TYPE_AppIDstring" + "A_ARG_TYPE_ProfileIDui40A_ARG_TYPE_URI uri A_ARG_TYPE_StringstringA_ARG_TYPE_Boolstringfalsefalse" + "true"); +_LIT8(KClientProfSrvXml, "1 0 GetMaxNumProfilesnumProfilesAllowedout MaxNumProfiles SetClientProfileprofileIDin" + "A_ARG_TYPE_ProfileIDclientProfileinA_ARG_TYPE_ClientProfileresultProfileoutA_ARG_TYPE_ClientProfileGetClientProfileprofileIDin" + "A_ARG_TYPE_ProfileIDclientProfileoutA_ARG_TYPE_ClientProfileUnusedProfileIDs stringA_ARG_TYPE_ClientProfile string" + "A_ARG_TYPE_ProfileIDui40MaxNumProfiles ui2 1 "); +_LIT8(KStartLine, "\n"); +_LIT8(KRootAttrb, " xmlns=\"urn:schemas-upnp-org:device-1-0\""); +_LIT8(KScpdUrl, "/tmserverdevice1/"); +_LIT8(KUpnpDeviceRoot, "root" ); +_LIT8(KStartIconList, "" ); +_LIT8(KEndIconList, "" ); +_LIT8(KStartIcon, "" ); +_LIT8(KEndIcon, "" ); +_LIT8(KStartMimeType, "" ); +_LIT8(KEndMimeType, "" ); +_LIT8(KStartWidth, "" ); +_LIT8(KEndWidth, "" ); +_LIT8(KStartHeight, "" ); +_LIT8(KEndHeight, "" ); +_LIT8(KStartDepth, "" ); +_LIT8(KEndDepth, "" ); +_LIT8(KStartUrl, "" ); +_LIT8(KEndUrl, "" ); +_LIT8(KPhoneManufacturer, "manufacturer" ); +_LIT8(KPhoneModel, "modelName" ); +_LIT8(KPhoneSerialNumber, "serialNumber" ); +_LIT8(KBtAddress, "btAddr" ); +_LIT8(KStartConnection, "startConnection" ); +_LIT8(KIconPath, "icon/"); +_LIT8(KConnTrue, "true"); +_LIT8(KConnFalse, "false"); +_LIT(KPublicDevicePath, "public\\TmServerDevice1\\"); +_LIT(KDeviceName, "TmServerDevice1.xml"); +_LIT(KAppServerSrvName, "TmApplicationServer1.xml"); +_LIT(KClientProfSrvName, "TmClientProfile1.xml"); +_LIT(KIconDirectory, "icon\\"); + + +// ============================ MEMBER FUNCTIONS =================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDeviceXmlParser* CUpnpTmServerDeviceXmlParser::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_NEWL_ENTRY ); + CUpnpTmServerDeviceXmlParser* self = new (ELeave) CUpnpTmServerDeviceXmlParser( aDeviceInfo ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::~CUpnpTmServerDeviceXmlParser +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDeviceXmlParser::~CUpnpTmServerDeviceXmlParser() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_CUPNPTMSERVERDEVICEXMLPARSER_ENTRY ); + DeleteDirectory(); + iPhone.Close(); + iEtelSrv.Close(); + delete iParser; + iAppServerSrvDescription.Close(); + iClientProfSrvDescription.Close(); + iReadBuf.Close(); + iDeviceDescription.Close(); + iDescFilePath.Close(); + iClientProfSrvFilePath.Close(); + iAppServerSrvFilePath.Close(); + iDescriptionUri.Close(); + iFs.Close(); + iDeviceDir.Close(); + iIconDirectory.Close(); + delete iFileMan; + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_CUPNPTMSERVERDEVICEXMLPARSER_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::DeleteDirectory +// Deletes device and service description files and device icon files related to +// Terminal Mode Service located in the private directory. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::DeleteDirectory() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_DELETEDIRECTORY_ENTRY ); + iFs.Delete(iDescFilePath); + iFs.Delete(iAppServerSrvFilePath); + iFs.Delete(iClientProfSrvFilePath); + iFileMan->RmDir(iIconDirectory); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_DELETEDIRECTORY_EXIT ); + } +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::CUpnpTmServerDeviceXmlParser +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerDeviceXmlParser::CUpnpTmServerDeviceXmlParser( CUpnpTmServerDeviceInfo& aDeviceInfo ) + :iDeviceInfo(aDeviceInfo) + { + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::ConstructL( ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_CONSTRUCTL_ENTRY ); + User::LeaveIfError(iEtelSrv.Connect()); + User::LeaveIfError(iEtelSrv.LoadPhoneModule( KMmTsyModuleName )); + User::LeaveIfError(iPhone.Open( iEtelSrv, KMmTsyPhoneName )); + TRequestStatus status; + iPhone.GetPhoneId(status, iPhoneId); + User::WaitForRequest(status); + User::LeaveIfError(iFs.Connect()); + iAppServerSrvDescription.CreateL( KAppServerSrvXml() ); + iClientProfSrvDescription.CreateL( KClientProfSrvXml() ); + iParser = CParser::NewL(KTextXml(), *this); + iParser->EnableFeature(ESendFullContentInOneChunk); + iReadBuf.CreateMaxL(KBufSize); + iDeviceDescription.CreateMaxL(KBufSize); + iDeviceDescription.SetLength(KErrNone); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnStartDocumentL +// Called when parser hits the start of the document +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/, + TInt aErrorCode ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_ENTRY ); + User::LeaveIfError(aErrorCode); + + TBuf tmpBuf(iDeviceDir); + tmpBuf.Append(KDeviceName()); + iDescFilePath.CreateL(tmpBuf); + tmpBuf.Zero(); + + // Create TmAppServer service xml + tmpBuf.Copy(iDeviceDir); + tmpBuf.Append(KAppServerSrvName()); + RFile appServerSrvFile; + CleanupClosePushL(appServerSrvFile); + TInt err(KErrNone); + err = appServerSrvFile.Create(iFs, tmpBuf, EFileWrite); + if ( err == KErrAlreadyExists ) + { + User::LeaveIfError(appServerSrvFile.Open(iFs, tmpBuf, EFileWrite)); + } + else + { + User::LeaveIfError(err); + } + User::LeaveIfError(appServerSrvFile.Write(iAppServerSrvDescription)); + CleanupStack::PopAndDestroy( &appServerSrvFile ); + iAppServerSrvFilePath.CreateL(tmpBuf); + tmpBuf.Zero(); + + // Create TmClientProfile service xml + tmpBuf.Copy(iDeviceDir); + tmpBuf.Append(KClientProfSrvName()); + RFile clientProfSrvFile; + CleanupClosePushL(clientProfSrvFile); + err = clientProfSrvFile.Create(iFs, tmpBuf, EFileWrite); + if ( err == KErrAlreadyExists ) + { + User::LeaveIfError(clientProfSrvFile.Open(iFs, tmpBuf, EFileWrite)); + } + else + { + User::LeaveIfError(err); + } + User::LeaveIfError(clientProfSrvFile.Write(iClientProfSrvDescription)); + CleanupStack::PopAndDestroy( &clientProfSrvFile ); + iClientProfSrvFilePath.CreateL(tmpBuf); + + iDeviceDescription.Append(KStartLine()); + iDescriptionUri.CreateMaxL(UpnpString::KDefaultStringLength); + iDescriptionUri.SetLength(KErrNone); + iDescriptionUri.Append(KScpdUrl()); + iDescriptionUri.Append(KDeviceName()); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnEndDocumentL +// Called when parser hits the end of the document +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnEndDocumentL(TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL_ENTRY ); + User::LeaveIfError(aErrorCode); + + RFile deviceFile; + CleanupClosePushL(deviceFile); + TInt err = deviceFile.Create(iFs, iDescFilePath, EFileWrite); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL, "CUpnpTmServerDeviceXmlParser::OnEndDocumentL;err=%d", err ); + if ( err == KErrAlreadyExists ) + { + User::LeaveIfError(deviceFile.Open(iFs, iDescFilePath, EFileWrite)); + } + else + { + User::LeaveIfError(err); + } + User::LeaveIfError(deviceFile.Write(iDeviceDescription)); + CleanupStack::PopAndDestroy(&deviceFile); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnStartElementL +// Called when parser hits the opening tag +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnStartElementL(const RTagInfo& aElement, const RAttributeArray& /*aAttributes*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTELEMENTL_ENTRY ); + User::LeaveIfError(aErrorCode); + + iDeviceDescription.Append(UpnpCD::KKorp); + iDeviceDescription.Append(aElement.LocalName().DesC()); + + if(aElement.LocalName().DesC().Compare(KUpnpDeviceRoot) == 0) + { + iDeviceDescription.Append(KRootAttrb()); + } + iDeviceDescription.Append(UpnpCD::KProk); + + if(aElement.LocalName().DesC().Compare(KPhoneManufacturer) == 0) + { + iDeviceDescription.Append(iPhoneId.iManufacturer); + } + else if(aElement.LocalName().DesC().Compare(KPhoneModel) == 0) + { + iDeviceDescription.Append(iPhoneId.iModel); + } + else if(aElement.LocalName().DesC().Compare(KPhoneSerialNumber) == 0) + { + iDeviceDescription.Append(iPhoneId.iSerialNumber); + } + else if(aElement.LocalName().DesC().Compare(KBtAddress) == 0) + { + iDeviceDescription.Append(iDeviceInfo.BtAddress()); + } + else if(aElement.LocalName().DesC().Compare(KStartConnection) == 0) + { + if ( iDeviceInfo.StartConn() ) + { + iDeviceDescription.Append(KConnTrue); + } + else + { + iDeviceDescription.Append(KConnFalse); + } + } + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTELEMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnEndElementL +// Called when parser hits the closing tag +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnEndElementL( const RTagInfo& aElement, TInt aErrorCode ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDELEMENTL_ENTRY ); + User::LeaveIfError(aErrorCode); + + iDeviceDescription.Append( UpnpCD::KKorp ); + iDeviceDescription.Append( UpnpString::KSlash ); + iDeviceDescription.Append( aElement.LocalName().DesC() ); + iDeviceDescription.Append( UpnpCD::KProk ); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDELEMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnContentL +// Provides the content/value of the element/tag +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnContentL( const TDesC8& aBytes, TInt aErrorCode ) + { + User::LeaveIfError(aErrorCode); + iDeviceDescription.Append(aBytes); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::StartL +// Method which inputs xml formatted buffer content to the XML Parser +// and invokes parsing +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::StartL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_STARTL_ENTRY ); + TDriveNumber drive = RFs::GetSystemDrive(); //Find system's drive + TBuf privatePath; + TInt err = iFs.PrivatePath(privatePath); //Find the application's private path + // a) If the Private Path is not found (for whatever reasons), + // Create a private path in the System Drive + if( err == KErrNotFound ) + { + User::LeaveIfError( iFs.CreatePrivatePath(drive) ); + } + // b) If Private Path is found but is a read-only or non-persistent drive + // Create a private path in the system drive else use it + else if( err == KErrNone ) + { + TDriveInfo driveInfo; + User::LeaveIfError( iFs.Drive(driveInfo)); + TUint driveAttr = driveInfo.iDriveAtt; + if ( driveAttr == KDriveAttRom ) + { + User::LeaveIfError( iFs.CreatePrivatePath(drive) ); + } + } + else + { + OstTrace1( TRACE_ERROR, CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err ); + User::Leave(err); + } + privatePath.Append(KPublicDevicePath()); + err = iFs.MkDirAll(privatePath); + if( err && err != KErrAlreadyExists ) + { + OstTrace1( TRACE_ERROR, DUP1_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err ); + User::LeaveIfError(err); + } + iDeviceDir.CreateL(privatePath); + RBuf8 rootDeviceBuf; + CleanupClosePushL(rootDeviceBuf); + rootDeviceBuf.CreateL(KBufSize); + rootDeviceBuf.Append(KRootDeviceXmlLead()); + // Appends the device icon list to the device xml buffer + const RPointerArray& deviceList = iDeviceInfo.DeviceIconList(); + TInt iconCount = deviceList.Count(); + if ( iconCount > KErrNone ) + { + privatePath.Append(KIconDirectory()); + err = iFs.MkDir(privatePath); // Creates icon directory + if( err && err != KErrAlreadyExists ) + { + OstTrace1( TRACE_ERROR, DUP2_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err ); + User::LeaveIfError(err); + } + iIconDirectory.CreateL(privatePath); + OstTrace1( TRACE_ERROR, DUP3_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;iconCount=%d", iconCount ); + rootDeviceBuf.Append(KStartIconList); + for ( TInt i(0); i < iconCount; i++ ) + { + rootDeviceBuf.Append(KStartIcon); + rootDeviceBuf.Append(KStartMimeType); + rootDeviceBuf.Append(deviceList[i]->MimeType()); + rootDeviceBuf.Append(KEndMimeType); + rootDeviceBuf.Append(KStartWidth); + rootDeviceBuf.AppendNum(deviceList[i]->Width()); + rootDeviceBuf.Append(KEndWidth); + rootDeviceBuf.Append(KStartHeight); + rootDeviceBuf.AppendNum(deviceList[i]->Height()); + rootDeviceBuf.Append(KEndHeight); + rootDeviceBuf.Append(KStartDepth); + rootDeviceBuf.AppendNum(deviceList[i]->Depth()); + rootDeviceBuf.Append(KEndDepth); + rootDeviceBuf.Append(KStartUrl); + + TBuf8 iconBuf; + const TDesC& fileName = deviceList[i]->IconFilename(); + iconBuf.Copy(fileName); + TBuf8 iconRelativeUrl(KScpdUrl()); + // Extracts the actual input filepath and creates the relative url for the icon + // to be provided in the device xml file + iconRelativeUrl.Append(KIconPath()); + // Extracts only filename and appends the same to url + iconRelativeUrl.Append(iconBuf.Mid((iconBuf.LocateReverse(KDirectorySeparator))+1)); + rootDeviceBuf.Append(iconRelativeUrl); + delete iFileMan; + iFileMan = NULL; + iFileMan = CFileMan::NewL(iFs) ; + // copies icon files to the private device directory + User::LeaveIfError(iFileMan->Copy(fileName,iIconDirectory)); + rootDeviceBuf.Append(KEndUrl); + rootDeviceBuf.Append(KEndIcon); + } + rootDeviceBuf.Append(KEndIconList); + } + rootDeviceBuf.Append( iDeviceInfo.DeviceInfo()); + rootDeviceBuf.Append( KRootDeviceXmlTrail() ); + + ParseL(*iParser, rootDeviceBuf ); + CleanupStack::PopAndDestroy(&rootDeviceBuf); + + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_STARTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnStartPrefixMappingL +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTPREFIXMAPPINGL_ENTRY ); + User::LeaveIfError(aErrorCode); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTPREFIXMAPPINGL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnEndPrefixMappingL +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDPREFIXMAPPINGL_ENTRY ); + User::LeaveIfError(aErrorCode); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDPREFIXMAPPINGL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnIgnorableWhiteSpaceL +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONIGNORABLEWHITESPACEL_ENTRY ); + User::LeaveIfError(aErrorCode); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONIGNORABLEWHITESPACEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnSkippedEntityL +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnSkippedEntityL(const RString& /*aName*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSKIPPEDENTITYL_ENTRY ); + User::LeaveIfError(aErrorCode); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSKIPPEDENTITYL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceXmlParser::OnProcessingInstructionL +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerDeviceXmlParser::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, TInt aErrorCode) + { + OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONPROCESSINGINSTRUCTIONL_ENTRY ); + User::LeaveIfError(aErrorCode); + OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONPROCESSINGINSTRUCTIONL_EXIT ); + } + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmserverimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmserverimpl.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,1055 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerImpl class implementation. +* +*/ + +// Includes +#include "upnptmserverimpl.h" +#include "upnpiconfileservetransaction.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmserverimplTraces.h" +#endif + + +//Literals +_LIT8(KAppListStart, "<appList>"); +_LIT8(KAppListEnd, "</appList>"); +_LIT8(KAppIdStart, "<appID>"); +_LIT8(KAppIdEnd, "</appID>"); +_LIT8(KNameStart, "<name>"); +_LIT8(KNameEnd, "</name>"); +_LIT8(KIconStart, "<icon>"); +_LIT8(KIconEnd, "</icon>"); +_LIT8(KMimeTypeStart, "<mimetype>"); +_LIT8(KMimeTypeEnd, "</mimetype>"); +_LIT8(KWidthStart, "<width>"); +_LIT8(KWidthEnd, "</width>"); +_LIT8(KHeightStart, "<height>"); +_LIT8(KHeightEnd, "</height>"); +_LIT8(KDepthStart, "<depth>"); +_LIT8(KDepthEnd, "</depth>"); +_LIT8(KUrlStart, "<url>"); +_LIT8(KUrlEnd, "</url>"); +_LIT8(KAllowedProfileIdsStart, "<allowedProfileIDs>"); +_LIT8(KAllowedProfileIdsEnd, "</allowedProfileIDs>"); +_LIT8(KResourceStatusStart, "<resourceStatus>"); +_LIT8(KResourceStatusEnd, "</resourceStatus>"); +_LIT8(KAppStatusListStart, "<appStatusList>"); +_LIT8(KAppStatusListEnd, "</appStatusList>"); +_LIT8(KAppStatusStart, "<appStatus>"); +_LIT8(KAppStatusEnd, "</appStatus>"); +_LIT8(KStatusStart, "<status>"); +_LIT8(KStatusEnd, "</status>"); +_LIT8(KProfileIdStart, "<profileID>"); +_LIT8(KProfileIdEnd, "</profileID>"); +_LIT8(KStatusTypeStart, "<statusType>"); +_LIT8(KStatusTypeEnd, "</statusType>"); +_LIT8(KStartTagOpenBracket, "<"); +_LIT8(KEndTagOpenBracket, "</"); +_LIT8(KCloseBracket, ">"); + + +// ================= MEMBER FUNCTIONS ============================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerImpl* CUpnpTmServerImpl::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + MUpnpTmServerObserver& aTmServerObserver) + { + CUpnpTmServerImpl* self = new (ELeave) CUpnpTmServerImpl( aTmServerObserver ); + CleanupStack::PushL(self); + self->ConstructL( aDeviceInfo ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::CUpnpTmServerImpl +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmServerImpl::CUpnpTmServerImpl( MUpnpTmServerObserver& aTmServerObserver ) + :iTmServerObserver(aTmServerObserver) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTL_ENTRY ); + iIapSetting = CUpnpSettings::NewL( KCRUidUPnPStack ); + /** + * Retrieve the IAP ID which has been set by DLNA and store it so that + * it can be reverted back to the same when Automotive Server has stopped + * making use of TM Service. + */ + iIapId = CUpnpSettings::GetIapL(); + //Fetch the IAP ID set by the Automotive Server + TInt iapId = aDeviceInfo.IapId(); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CONSTRUCTL, "CUpnpTmServerImpl::ConstructL;iapId=%d", iapId ); + // writes the iap id to the cenrep + User::LeaveIfError( iIapSetting->Set( CUpnpSettings::KUPnPStackIapId, iapId ) ); + iTmServerDevice = CUpnpTmServerDevice::NewL( aDeviceInfo, *this ); + iAppStore = CUpnpRemotableAppStore::NewL(); + iIconMapping = CUpnpTmIconMapping::NewL(); + User::LeaveIfError( iIconFileSession.Connect() ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::~CUpnpTmServerImpl +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmServerImpl::~CUpnpTmServerImpl() + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CUPNPTMSERVERIMPL_ENTRY ); + //Restore the IAP ID for DLNA use + RestoreIap(); + delete iIapSetting; + delete iFilteredAppList; + iIconFileSession.Close(); + delete iAppStore; + delete iIconMapping; + iXmSignature.Close(); + iResponseBuf.Close(); + delete iTmServerDevice; + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CUPNPTMSERVERIMPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::RestoreIap +// Method is used to restore IAP ID which has been previously retreived so that +// DLNA continues to make use of it. +// This method is mainly provided to avoid codescanner tool error. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::RestoreIap() + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_RESTOREIAP_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_RESTOREIAP, "CUpnpTmServerImpl::RestoreIap;iIapId=%d", iIapId ); + iIapSetting->Set( CUpnpSettings::KUPnPStackIapId, iIapId ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_RESTOREIAP_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetApplicationListL +// Method to create soap repsonse for GetApplicationList action. +// It generates a list of applications, which can be launched and terminated remotely. +// @param aAppListFilter Application Listing Filter. This is an optional parameter +// used by the UPnP Control Point to limit the AppListing value to +// those applications which meet the filter parameters. +// @param aProfileId ProfileID of client profile whose parameter settings will be +// applied for generating the application list +// @param aErr[out] TerminalMode error code +// @return Returns soap response buffer +// --------------------------------------------------------------------------------- +// +const TDesC8& CUpnpTmServerImpl::GetApplicationListL( const TDesC8& aAppListFilter, + TUint aProfileId, TTerminalModeErrorCode& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETAPPLICATIONLISTL_ENTRY ); + iResponseBuf.Close(); + iResponseBuf.CreateL(KActionBufferLength); + aErr = iTmServerObserver.OnGetApplicationList( aProfileId ); + if ( aErr == ETerminalModeSuccess ) + { + // Check for availability of AppListingFilter input argument in the soap action + TInt filterStringFound = aAppListFilter.Find(Keq); + if ( filterStringFound != KErrNotFound ) + { + delete iFilteredAppList; + iFilteredAppList = NULL; + + // Constructs a filter object and parses the input filter string + iFilteredAppList = CUpnpTmFilteredAppList::NewL(*this); + iFilteredAppList->ParseAppFilterStringL( aAppListFilter, aErr ); + } + if ( aErr == ETerminalModeSuccess ) + { + iProfileId = aProfileId; // Stored for generating app icon path in the soap response + AppendDataL(KAppListStart); + for ( TInt i(0) ; i < iAppStore->AppIdArray().Count(); i++) + { + // There can be 2 conditions assoicated with this + // 1. AppListingFilter is "*" + // 2. AppListingFilter has some filter string set + const RArray& profileIdList = iAppStore->FetchRemotableApp(i).AllowedProfileIdList(); + if ( ( profileIdList.Find(aProfileId) != KErrNotFound ) || + ( profileIdList.Count() == KErrNone )) + { + + // If the provided profileID is allowed profileID for the app + if ( filterStringFound == KErrNotFound ) + { + // Constructs a non-filtered soap response + ConstructActionResponseBufferL(i); + } + else + { + // Constructs a filtered soap response + iFilteredAppList->ConstructFilteredGetAppListResponseL(i); + } + } + } + if ( ( filterStringFound == KErrNotFound ) || ( (iFilteredAppList->SignatureElement()).Length() != KErrNone )) + { + // Append the xml signature value to the response buffer if + // 1. Filter string contains the signature element + // 2. Filter value is '*' + AppendDataL(XmlSignature()); + } + AppendDataL(KAppListEnd); + } + } + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETAPPLICATIONLISTL_EXIT ); + return iResponseBuf; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::LaunchApp +// Method to create soap repsonse for LaunchApp action +// @param aAppId App ID of the application to be launched remotely +// @param aProfileId ProfileID of client profile +// @param aUrl[out] URI of the remote application where it is running +// @return Returns Terminal Mode error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::LaunchApp( TUint aAppId, TUint aProfileId, + RBuf8& aUrl ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_LAUNCHAPP_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_LAUNCHAPP, "CUpnpTmServerImpl::LaunchApp;aAppId=%d", aAppId ); + + TTerminalModeErrorCode err = AuthorizeApp(aAppId); + if ( err == ETerminalModeSuccess ) + { + // Launching of the app succeeded + err = iTmServerObserver.OnLaunchApp( aAppId,aUrl,aProfileId ); + } + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_LAUNCHAPP_EXIT ); + return err; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::TerminateApp +// Method to create soap repsonse for TerminateApp action +// @param aAppId App ID of the application to be terminated +// @param aProfileId ProfileID of client profile +// @return Returns Terminal Mode error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::TerminateApp( TUint aAppId, TUint aProfileId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_TERMINATEAPP_ENTRY ); + TTerminalModeErrorCode err = AuthorizeApp(aAppId); + if ( err == ETerminalModeSuccess ) + { + // Termination of the app succeeded + err = iTmServerObserver.OnTerminateApp( aAppId, aProfileId ); + } + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_TERMINATEAPP, "CUpnpTmServerImpl::TerminateApp;err=%d", err ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_TERMINATEAPP_EXIT ); + return err; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetAppStatusL +// Method to create soap repsonse for GetAppStatus action +// @param aAppIdBuffer Buffer containing the appID or the wildcard character +// @param aAppStatusResponse[out] soap response buffer +// @param aErr[out] Terminal Mode error code +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::GetAppStatusL( const TDesC8& aAppIdBuffer,RBuf8& aAppStatusResponse, + TTerminalModeErrorCode& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETAPPSTATUSL_ENTRY ); + RArray registeredAppIdArray; + CleanupClosePushL(registeredAppIdArray); + if ( aAppIdBuffer.Compare( KWildCard()) != KErrNone ) + { + // If the appID is not wildcard character(*) + TInt appIdInt(0); + TLex8 lex( aAppIdBuffer ); + lex.Val(appIdInt); // No need to check the return code as it has been verified earlier + aErr = AuthorizeApp( appIdInt ); + if ( aErr != ETerminalModeSuccess ) + { + CleanupStack::PopAndDestroy(®isteredAppIdArray); + OstTrace0( TRACE_ERROR, CUPNPTMSERVERIMPL_GETAPPSTATUSL, "CUpnpTmServerImpl::GetAppStatusL" ); + return; // return if the requested appID is non-existent or un-authorized + } + // add to the array for which get app status has to be retreived + registeredAppIdArray.AppendL(appIdInt); + } + else + { + // Fetch the list of registered apps from the App store + for ( TInt i(0); i < iAppStore->AppIdArray().Count(); i++ ) + { + registeredAppIdArray.AppendL(iAppStore->AppIdArray()[i]); + } + } + iResponseBuf.Close(); + iResponseBuf.CreateL(KActionBufferLength); + AppendDataL(KAppStatusListStart); + for ( TInt i(0); i < registeredAppIdArray.Count(); i++ ) + { + CreateGetAppStatusResponseL( registeredAppIdArray[i], aErr ); + if ( aErr != ETerminalModeSuccess ) + { + /* Should return an error code if it fails to retrieve the + status for even a single application */ + break; + } + } + AppendDataL(KAppStatusListEnd); + aAppStatusResponse.CreateL(iResponseBuf); + CleanupStack::PopAndDestroy(®isteredAppIdArray); + OstTraceFunctionExit0( DUP2_CUPNPTMSERVERIMPL_GETAPPSTATUSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::CreateGetAppStatusResponseL +// Helper method for GetApplicationStatus response buffer construction +// @param aAppId AppID +// @param aErr[out] Terminal Mode error code +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::CreateGetAppStatusResponseL( TUint aAppId,TTerminalModeErrorCode& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CREATEGETAPPSTATUSRESPONSEL_ENTRY ); + // Get the app statuses of all the requested apps one by one + TUint profileId; + RBuf8 statusType; + aErr = iTmServerObserver.OnGetAppStatus( aAppId, profileId, statusType); + if ( aErr == ETerminalModeSuccess ) + { + /* Append the status to the buffer only if the fetching of the actual status of the + application from the Automotive Server is successful ,else just return the error */ + CleanupClosePushL(statusType); + AppendDataL(KAppStatusStart); + AppendDataL(KAppIdStart); + AppendDataL(ConvertIntToDescriptor(aAppId)); + AppendDataL(KAppIdEnd); + AppendDataL(KStatusStart); + AppendDataL(KProfileIdStart); + AppendDataL(ConvertIntToDescriptor(profileId)); + AppendDataL(KProfileIdEnd); + AppendDataL(KStatusTypeStart); + AppendDataL(statusType); + AppendDataL(KStatusTypeEnd); + AppendDataL(KStatusEnd); + AppendDataL(KAppStatusEnd); + CleanupStack::Pop(&statusType); + } + statusType.Close(); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CREATEGETAPPSTATUSRESPONSEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetMaxNumProfiles +// Method is used to return the value of the state variable MaxNumProfiles, +// which denotes the maximum number of client profiles that are supported +// simultaneously by the TmClientProfile service. +// @param aNumMaxProfiles[out] Maximum number of client profiles that are supported +// @return Returns Terminal Mode error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::GetMaxNumProfiles( TUint& aNumMaxProfiles ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETMAXNUMPROFILES_ENTRY ); + return iTmServerObserver.OnGetMaxNumProfiles(aNumMaxProfiles); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetClientProfile +// Method to create soap repsonse for SetClientProfile action. +// Method allows the control point to register a client profile and +// notify the Terminal Mode device about its preferences, settings and capabilities. +// @param aProfileId The identifier of the profile record where the client +// profile settings must be stored +// @param aInputClientProfile[out] Profile information about Terminal Mode client and +// its capabilities which needs to be updated in the profile record +// @param aResultProfile[out] The updated client profile. +// @return Returns Terminal Mode error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::SetClientProfile( TUint aProfileId, + const TDesC8& aInputClientProfile, RBuf8& aResultProfile ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETCLIENTPROFILE_ENTRY ); + return iTmServerObserver.OnSetClientProfile( aProfileId, aInputClientProfile, + aResultProfile ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetClientProfile +// Method to create soap repsonse for GetClientProfile action. +// Method allows the control point to access the contents of a client profile stored +// in the Terminal Mode device. +// @param aProfileId The identifier of the profile record where the client +// profile settings must be stored +// @param aClientProfile[out] Client profile corresponding to the profileID input variable +// @return Returns Terminal Mode error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::GetClientProfile( TUint aProfileId, RBuf8& aClientProfile ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETCLIENTPROFILE_ENTRY ); + return iTmServerObserver.OnGetClientProfile( aProfileId,aClientProfile ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetIconInfoL +// Method to fetch the icon file associated with the particular application. +// @param aUrl Relative URL of the application icon to be retreived +// @param aResultTrans CUpnpHttpServerTransaction object +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::GetIconInfoL( const TDesC8& aUrl, CUpnpHttpServerTransaction*& aResultTrans ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETICONINFOL_ENTRY ); + RBuf svgFilePath; + // Fetch the original file path which has been mapped to the requesting file. + TInt fileIndex = iIconMapping->GetSvgIconPath( aUrl,svgFilePath ); + if ( fileIndex == KErrNotFound ) + { + // In case the requested icon file is not available, should return EHttpNotFound(404). + // Sets the file source as an empty descriptor. + aResultTrans = CUpnpIconFileServeTransaction::NewL( KNullDesC(), iIconFileSession ); + svgFilePath.Close(); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETICONINFOL_EXIT ); + return; + } + CleanupClosePushL(svgFilePath); + /* Extracts the profileID from the relative URL. + * The relative URL will be of the form ( // ) + */ + const TDesC8& urlWithoutLeadingSlash = aUrl.Mid((aUrl.Locate(KForwardSlash))+1); + TInt secondSlashPos = urlWithoutLeadingSlash.Locate(KForwardSlash); + User::LeaveIfError(secondSlashPos); + const TDesC8& profileIdBuf = urlWithoutLeadingSlash.Left(secondSlashPos); + // Converts descriptor to int + TLex8 lex( profileIdBuf ); + TUint profileIdInt(KErrNone); + lex.Val(profileIdInt); + // Fetch the reference to client icon preference object from AutomotiveServer + const CUpnpTmClientIconPref& clientIconPref = iTmServerObserver.GetClientIconPrefsL(profileIdInt); + + TInt servingIconWidth(KErrNone); + TInt servingIconHeight(KErrNone); + /* + * Checks whether the conversion of the icon file needed. + * If conversion is required, it also determines the dimension(width and height) + * of the serving file. + */ + TBool iconConversionNeeded = iIconMapping->IsConversionNeeded( fileIndex, clientIconPref, servingIconWidth,servingIconHeight ); + if ( iconConversionNeeded ) + { + // Icon file conversion is needed( svg to bmp ) + CUpnpSvgImageConverter* decoder = CUpnpSvgImageConverter::NewL( servingIconWidth, servingIconHeight ); + CleanupStack::PushL(decoder); + RBuf bitmapBuf; + CleanupClosePushL(bitmapBuf); + decoder->ConvertToBitmapL( svgFilePath, bitmapBuf ); // Method which in turn invokes the conversion + aResultTrans = CUpnpIconFileServeTransaction::NewL( bitmapBuf, iIconFileSession ); /* Sets the data source( file ) + which needs to be serverd*/ + CleanupStack::PopAndDestroy( 2,decoder); + } + else + { + // No icon file conversion needed ( svg icon is served ) + aResultTrans = CUpnpIconFileServeTransaction::NewL( svgFilePath, iIconFileSession ); + } + CleanupStack::PopAndDestroy(&svgFilePath); + OstTraceFunctionExit0( DUP1_CUPNPTMSERVERIMPL_GETICONINFOL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::StartDeviceL +// Method is used to start publishing the terminal mode server device and +// its services +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::StartDeviceL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_STARTDEVICEL_ENTRY ); + iTmServerDevice->StartTmServerDeviceL(); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_STARTDEVICEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::StopDeviceL +// Method is used to stop publishing the terminal mode server device and +// its services +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::StopDeviceL() + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_STOPDEVICEL_ENTRY ); + iTmServerDevice->StopTmServerDeviceL(); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_STOPDEVICEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GetRemotableApp +// Method is invoked by the Automotive Server to get the access to the particular +// instance of the remotable app corresponding to the app ID provided. +// This is needed in case AS wishes to modify any paramters of the already +// registered remotable app +// @param aAppId App ID of the application whose access is needed +// @param aErr[out] Error code +// @returns Returns reference to the Remotable App object +// --------------------------------------------------------------------------------- +// +CUpnpRemotableApp& CUpnpTmServerImpl::GetRemotableApp( TUint aAppId, TInt& aErr ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GETREMOTABLEAPP_ENTRY ); + aErr = KErrNotFound; + TInt appIndex = iAppStore->AppIdArray().Find(aAppId); + CUpnpRemotableApp* remotableApp = NULL; + if ( appIndex != KErrNotFound ) + { + // The requested application is available + aErr = KErrNone; + remotableApp = &(iAppStore->FetchRemotableApp(appIndex)); + } + OstTraceExt2( TRACE_NORMAL, CUPNPTMSERVERIMPL_GETREMOTABLEAPP, "CUpnpTmServerImpl::GetRemotableApp;aAppId=%d;aErr=%d", aAppId, aErr ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GETREMOTABLEAPP_EXIT ); + return *remotableApp; + } + +// --------------------------------------------------------------------------------- +// Method is used to un-register the individual applications +// @param aRemotableApp Pointer to Remotable app object which needs to + // be registered.Ownership is passed. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::RegisterAppL( CUpnpRemotableApp* aRemotableApp ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_REGISTERAPPL_ENTRY ); + ASSERT( aRemotableApp ); + iAppStore->AddRemotableAppL( aRemotableApp ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_REGISTERAPPL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::RegisterAppsL +// Method is used to register multiple applications in one go +// @param aRemotableAppList Array of Remotable App objects which needs to be +// registered. Ownership is passed. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::RegisterAppsL( const RPointerArray& aRemotableAppList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_REGISTERAPPSL_ENTRY ); + for ( TInt i(0); i < aRemotableAppList.Count(); i++ ) + { + iAppStore->AddRemotableAppL( aRemotableAppList[i] ); + } + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_REGISTERAPPSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::UnRegisterApp +// Method is used to un-register the individual applications +// @param aAppId App ID which needs to be un-registered +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerImpl::UnRegisterApp( TUint aAppId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UNREGISTERAPP_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVER_GETREMOTABLEAPP, "CUpnpTmServer::GetRemotableApp;aAppId=%u", aAppId ); + return iAppStore->RemoveRemotableApp(aAppId); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::UnRegisterApps +// Method is used to un-register multiple applications in one go +// param aAppIdArray an array of appIDs which needs to be un-registered +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmServerImpl::UnRegisterApps( const RArray& aAppIdArray ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UNREGISTERAPPS_ENTRY ); + /** + * Create a copy of the array. + * Only distinct and unique app IDs are copied into the array. + */ + RArray appIdList ; + TInt i; + for ( i = 0; i < aAppIdArray.Count(); i++ ) + { + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_UNREGISTERAPPS, "CUpnpTmServerImpl::UnRegisterApps;aAppIdArray[i]=%d", aAppIdArray[i] ); + if ( appIdList.Find(aAppIdArray[i]) == KErrNotFound ) + { + appIdList.Append(aAppIdArray[i]); + } + } + for ( i = 0; i < appIdList.Count(); i++ ) + { + // Now remove the remotable app from the array one by one + if ( ( iAppStore->RemoveRemotableApp( appIdList[i] )) == KErrNotFound ) + { + /** + * Even if a single app from the requested array is unable + * to get un-registered the method should return KErrNotFound + */ + OstTrace1( TRACE_ERROR, DUP1_CUPNPTMSERVERIMPL_UNREGISTERAPPS, "CUpnpTmServerImpl::UnRegisterApps;appIdList[i]=%d", appIdList[i] ); + appIdList.Close(); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UNREGISTERAPPS_EXIT ); + return KErrNotFound; + } + } + appIdList.Close(); + OstTraceFunctionExit0( DUP1_CUPNPTMSERVERIMPL_UNREGISTERAPPS_EXIT ); + return KErrNone; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetXmlSignatureL +// Method is used to add xml formatted signature value to the list of remotable +// apps which is provided in response to the GetApplicationList action. +// XML signature is applied over entire contents of the appList element +// @param aSignature XML formatted signature value +// objects +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::SetXmlSignatureL( const TDesC8& aSignature ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETXMLSIGNATUREL_ENTRY ); + iXmSignature.Close(); + iXmSignature.CreateL(aSignature); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETXMLSIGNATUREL_EXIT ); + } + +// -------------------------------------------------------------------------------------------------------------------- +// CUpnpTmServerImpl::XmlSignature +// Method is used to fetch xml formatted signature value +// @return Returns xml formatted signature buffer +// -------------------------------------------------------------------------------------------------------------------- +// +const TDesC8& CUpnpTmServerImpl::XmlSignature( )const + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_XMLSIGNATURE_ENTRY ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_XMLSIGNATURE_EXIT ); + return iXmSignature; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::UpdateAppStatusL +// Method is used to update the status of applications which have undergone some +// change. This method is invoked by Automotive Server +// @param aUpdatedAppIdList An array of app IDs corresponding to the applications +// whose status have have undergone change +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::UpdateAppStatusL( const RArray& aUpdatedAppIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEAPPSTATUSL_ENTRY ); + CreateEventMessageL(aUpdatedAppIdList); + iTmServerDevice->AppStatusUpdateL(iResponseBuf); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEAPPSTATUSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::UpdateAppListL +// Method is used to update the list of applications which have been either added, +// removed or modified. This method is invoked by Automotive Server +// @param aUpdatedAppIdList An array of app IDs corresponding to the applications +// which have added, removed or modified to/from the list +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::UpdateAppListL( const RArray& aUpdatedAppIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEAPPLISTL_ENTRY ); + CreateEventMessageL(aUpdatedAppIdList); + iTmServerDevice->AppListUpdateL(iResponseBuf); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEAPPLISTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::UpdateUnusedProfileIdsL +// Method is used to update the list of profile IDs for profiles which are currently +// not being used by any Terminal Mode service hosted.on the Terminal Mode device +// This method is invoked by Automotive Server +// @param aUnusedProfileIdList List of profile IDs for profiles which are currently +// not being used +// +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::UpdateUnusedProfileIdsL( const RArray& aUnusedProfileIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_UPDATEUNUSEDPROFILEIDSL_ENTRY ); + CreateEventMessageL(aUnusedProfileIdList); + iTmServerDevice->UnUsedProfileIdUpdateL(iResponseBuf); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_UPDATEUNUSEDPROFILEIDSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::AuthorizeApp +// This method is used to verify whether the requested appID exists and whether +// the client is authorized to perform the oprations on that App ID +// @param aAppID appID which for which operation is requested +// @return Returns ETerminalModeSuccess if appID is valid and authorized +// else the error code +// --------------------------------------------------------------------------------- +// +TTerminalModeErrorCode CUpnpTmServerImpl::AuthorizeApp( TUint aAppId ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_AUTHORIZEAPP_ENTRY ); + OstTrace1( TRACE_NORMAL, DUP2_CUPNPTMSERVERIMPL_AUTHORIZEAPP, "CUpnpTmServerImpl::AuthorizeApp;aAppId=%u", aAppId ); + + TTerminalModeErrorCode err; + if ( iAppStore->AppIdArray().Find(aAppId) != KErrNotFound ) + { + // requested appID is a valid one + err = ETerminalModeSuccess; + } + else + { + // Requested appID does not exist + err = ETerminalModeBadAppId; + } + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_AUTHORIZEAPP, "CUpnpTmServerImpl::AuthorizeApp;err=%d", err ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_AUTHORIZEAPP_EXIT ); + return err; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::AppendDataL +// Appends data to the buffer and also reallocates when needed +// @param aData data to be appended to the buffer +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::AppendDataL( const TDesC8& aData ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_APPENDDATAL_ENTRY ); + TInt actionBufMaxLen = iResponseBuf.MaxLength(); + TInt actionBufLen = iResponseBuf.Length(); + TInt dataLen = aData.Length(); + if ( actionBufMaxLen < ( actionBufLen + dataLen ) ) + { + TInt lenToAllocate = (dataLen > KActionBufferLength) ? dataLen : KActionBufferLength; + iResponseBuf.ReAllocL ( actionBufLen + lenToAllocate ); + } + iResponseBuf.Append( aData ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_APPENDDATAL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::ConstructActionResponseBufferL +// Constructs the actual soap response buffer +// @param aAppIndex Index of the registered App +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::ConstructActionResponseBufferL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTACTIONRESPONSEBUFFERL_ENTRY ); + ConstructLeadingSoapBufferL(aAppIndex); + const TDesC8& appDesc = iAppStore->FetchRemotableApp(aAppIndex).AppDescription(); + if ( appDesc.Length() != KErrNone ) + { + // Appends the application desciption + AppendDataL(KStartNameDesc); + AppendDataL(appDesc); + AppendDataL(KEndNameDesc); + } + // Appends the optional icon information to the soap response buffer only + // if its available. + const RPointerArray& iconList = iAppStore->FetchRemotableApp(aAppIndex).IconList(); + TInt iconCount = iconList.Count(); + if ( iconCount > KErrNone ) + { + // Icon information is present + AppendDataL(KStartIconList); + for ( TInt j(0); j < iconCount; j++ ) + { + // Adds all the icons associated with this app one by one + SetRemotableAppIconInfoL( *iconList[j] ); + } + AppendDataL(KEndIconList); + } + //Apends the allowedProfileIDs element + SetAllowedProfileIdListL(aAppIndex); + //Appends the different terminalmode info elements + const RPointerArray& tmInfoElementList = + iAppStore->FetchRemotableApp(aAppIndex).TmInfoElementList(); + for ( TInt k(0); k < tmInfoElementList.Count(); k++) + { + // Called for each terminal mode element associated with the App + SetTerminalModeInfoElementL( *tmInfoElementList[k] ); + } + // Appends the resource status element for the app if it is available + SetResourceStatusL(aAppIndex); + // End of an application + AppendDataL(KEndApp); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTACTIONRESPONSEBUFFERL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::ConstructLeadingSoapBufferL +// Constructs leading soap buffer +// It adds appID and appName to the soap response +// @param aAppIndex Index of the remotable app +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::ConstructLeadingSoapBufferL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONSTRUCTLEADINGSOAPBUFFERL_ENTRY ); + AppendDataL(KStartApp); + AppendDataL(KAppIdStart); + AppendDataL(ConvertIntToDescriptor(iAppStore->FetchRemotableApp(aAppIndex).AppId())); + AppendDataL(KAppIdEnd); + AppendDataL(KNameStart); + AppendDataL(iAppStore->FetchRemotableApp(aAppIndex).AppName()); + AppendDataL(KNameEnd); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONSTRUCTLEADINGSOAPBUFFERL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetRemotableAppIconInfoL +// Appends application icon information to the soap response buffer. +// It stores the icon information in Tm Icon Mapping object for further reference. +// @param aTmIcon Reference to icon object +// @param aWidth Width of the application icon. +// @param aHeight Height of the application icon. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::SetRemotableAppIconInfoL( const CUpnpTerminalModeIcon& aTmIcon ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETREMOTABLEAPPICONINFOL_ENTRY ); + AppendDataL(KIconStart); + AppendDataL(KMimeTypeStart); + AppendDataL(aTmIcon.MimeType()); + AppendDataL(KMimeTypeEnd); + AppendDataL(KWidthStart); + TInt width = aTmIcon.Width(); + AppendDataL(ConvertIntToDescriptor(width)); + AppendDataL(KWidthEnd); + AppendDataL(KHeightStart); + TInt height = aTmIcon.Height(); + AppendDataL(ConvertIntToDescriptor(height)); + AppendDataL(KHeightEnd); + AppendDataL(KDepthStart); + AppendDataL(ConvertIntToDescriptor(aTmIcon.Depth())); + AppendDataL(KDepthEnd); + //Application icon URL creation + AppendDataL(KUrlStart); + AppendDataL(UpnpHTTP::KHTTPUrl()); + AppendDataL(iAddrBuf); // Adds IP address + AppendDataL(KColon); + AppendDataL(iPortBuf); // Adds port number + + // Fetch the icon file path + const TDesC& filePath = aTmIcon.IconFilename(); + // Extract just filename from the complete file path + const TDesC& fileName = filePath.Mid((filePath.LocateReverse(KDirectorySeparator))+1); + TBuf8 fileName8; + fileName8.Copy(fileName); // 16-bit to 8-bit conversion( icon filename ) + + TBuf8 iconRelativeUrl(UpnpString::KSlash); + // Appends the client profileID + iconRelativeUrl.Append(ConvertIntToDescriptor(iProfileId)); + iconRelativeUrl.Append(UpnpString::KSlash); + // Appends the icon filename and creates the relative url + iconRelativeUrl.Append(fileName8); + AppendDataL(iconRelativeUrl); + /** Icon information is stored for making decision during http request for app icon file. + * Depth is not taken into consideration while deciding on the final icon dimension + * because it is not a requirement and playing with the depth of the icon may lead + * to a poorly converted image which may not be displayed properly in the car + * kit screen. + */ + iIconMapping->AddIconFileInfoL( iconRelativeUrl,filePath,width,height ); + AppendDataL(KUrlEnd); + AppendDataL(KIconEnd); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETREMOTABLEAPPICONINFOL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetAllowedProfileIdListL +// Appends the list of allowed profile IDs information to the soap response buffer +// @param aAppIndex Index of the registered app +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::SetAllowedProfileIdListL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETALLOWEDPROFILEIDLISTL_ENTRY ); + const RArray& profileIdList = iAppStore->FetchRemotableApp(aAppIndex).AllowedProfileIdList(); + TInt profileIdCount = profileIdList.Count(); + if ( profileIdCount > KErrNone ) + { + AppendDataL(KAllowedProfileIdsStart); + for ( TInt i(0); i < profileIdCount; i++ ) + { + AppendDataL(ConvertIntToDescriptor(profileIdList[i])); + if ( i < (profileIdCount-1) ) + { + // Adds comma after each profile ID except last + AppendDataL(UpnpString::KComa); + } + } + AppendDataL(KAllowedProfileIdsEnd); + } + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETALLOWEDPROFILEIDLISTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetTerminalModeInfoElementL +// Appends terminal mode info elements to the soap buffer +// @param aTmInfoElement Reference to CUpnpTmInfoElement object +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::SetTerminalModeInfoElementL( const CUpnpTmInfoElement& aTmInfoElement ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETTERMINALMODEINFOELEMENTL_ENTRY ); + AppendDataL(KStartTagOpenBracket); + AppendDataL(aTmInfoElement.TerminalModeInfoType()); + AppendDataL(KCloseBracket); + for ( TInt i(0); i < aTmInfoElement.TmInfoElementCount(); i++ ) + { + RBuf8 elementName; + CleanupClosePushL(elementName); + RBuf8 elementValue; + CleanupClosePushL(elementValue); + // Fetch the key-value pair + aTmInfoElement.GetTmInfoElementL( elementName, elementValue, i ); + AppendDataL(KStartTagOpenBracket); + AppendDataL(elementName); + AppendDataL(KCloseBracket); + AppendDataL(elementValue); + AppendDataL(KEndTagOpenBracket); + AppendDataL(elementName); + AppendDataL(KCloseBracket); + CleanupStack::PopAndDestroy(2,&elementName); + } + AppendDataL(KEndTagOpenBracket); + AppendDataL(aTmInfoElement.TerminalModeInfoType()); + AppendDataL(KCloseBracket); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETTERMINALMODEINFOELEMENTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::SetResourceStatusL +// Appends resource status element(optional element)to the soap response buffer. +// Provides the status of the resource of the application. +// @param aAppIndex Index of the registered app +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::SetResourceStatusL( TInt aAppIndex ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_SETRESOURCESTATUSL_ENTRY ); + const TDesC8& rscStatus = iAppStore->FetchRemotableApp(aAppIndex).ResourceStatus(); + if ( rscStatus.Length() > KErrNone ) + { + AppendDataL(KResourceStatusStart); + AppendDataL(rscStatus); + AppendDataL(KResourceStatusEnd); + } + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_SETRESOURCESTATUSL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::GenerateUrlComponents +// Utility method to generate Server's IP address and port number which is used +// in constructing the icon url in action responses +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::GenerateUrlComponents( CUpnpHttpServerSession& aHttpServerSession ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_GENERATEURLCOMPONENTS_ENTRY ); + TInetAddr servAddr; + servAddr.SetFamily(KAfInet); + aHttpServerSession.GetAddress( servAddr ); + TBuf addrBuf8; + servAddr.Output( addrBuf8 ); + iAddrBuf.Copy(addrBuf8); //Sets the IP address of the server + iPortBuf.Num(servAddr.Port()); //Sets the port number + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_GENERATEURLCOMPONENTS_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::CreateEventMessageL +// Utility method to generate GENA notificatiion messages. +// Its is called in case of updateapplist, updateappstatuslist and +// unusedprofileidlist events. +// @param aIdList Reference to the changed ID list. It could be appID list or +// profileID list. +// --------------------------------------------------------------------------------- +// +void CUpnpTmServerImpl::CreateEventMessageL( const RArray& aIdList ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL_ENTRY ); + iResponseBuf.Close(); + iResponseBuf.CreateL(KActionBufferLength); + /** + * Create a copy of the array. + * Only distinct and unique elements are copied into the array. + */ + RArray idList; + CleanupClosePushL(idList); + TInt i; + for ( i = 0; i < aIdList.Count(); i++ ) + { + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL, "CUpnpTmServerImpl::CreateEventMessageL;aIdList[i]=%d", aIdList[i] ); + if ( idList.Find(aIdList[i]) == KErrNotFound ) + { + idList.AppendL(aIdList[i]); + } + } + TInt idCount = idList.Count(); + for ( i = 0; i < idCount; i++ ) + { + AppendDataL(ConvertIntToDescriptor( idList[i])); + if ( i < ( idCount-1) ) + { + //Add comma(,) after each ID except the last + AppendDataL(UpnpString::KComa); + } + } + CleanupStack::PopAndDestroy(&idList); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CREATEEVENTMESSAGEL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerImpl::ConvertIntToDescriptor +// Utility method to convert integer to descriptor +// @param aIntVal Integer value +// @return Returns corresponding descriptor value +// --------------------------------------------------------------------------------- +// +const TDesC8& CUpnpTmServerImpl::ConvertIntToDescriptor( TInt aIntVal ) + { + OstTraceFunctionEntry0( CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR_ENTRY ); + OstTrace1( TRACE_NORMAL, CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR, "CUpnpTmServerImpl::ConvertIntToDescriptor;aIntVal=%d", aIntVal ); + iBufVal.Num( aIntVal ); + OstTraceFunctionExit0( CUPNPTMSERVERIMPL_CONVERTINTTODESCRIPTOR_EXIT ); + return iBufVal; + } + +//End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/traces/OstTraceDefinitions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/traces/OstTraceDefinitions.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,22 @@ +/** +* Copyright (c) 2010 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: OST trace file. +* +*/ + +#ifndef __OSTTRACEDEFINITIONS_H__ +#define __OSTTRACEDEFINITIONS_H__ + +#include +#endif diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/bwins/upnptmservertestu.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/bwins/upnptmservertestu.DEF Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,4 @@ +EXPORTS + ?LibEntryL@@YAPAVCTestModuleBase@@XZ @ 1 NONAME ; class CTestModuleBase * __cdecl LibEntryL(void) + ?SetRequirements@@YAHAAPAVCTestModuleParam@@AAK@Z @ 2 NONAME ; int __cdecl SetRequirements(class CTestModuleParam * &,unsigned long &) + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/TestFramework.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/TestFramework.ini Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,217 @@ +# +# This is STIF initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# + XML, Test report will be xml type, for example 'TestReport.xml'. +# Note, that xml format is available only when output is set to FILE. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. +# - Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation +# DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02 +# + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + # 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= C:\LOGS\TestFramework\ +TestReportFileName= TestReport + +TestReportFormat= TXT # Possible values: TXT, HTML or XML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +DisableMeasurement= stifmeasurementdisablenone # Possible values are: + # 'stifmeasurementdisablenone', 'stifmeasurementdisableall' + # 'stifmeasurementplugin01', 'stifmeasurementplugin02', + # 'stifmeasurementplugin03', 'stifmeasurementplugin04', + # 'stifmeasurementplugin05' or 'stifbappeaprofiler' + +Timeout= 120000 # Default timeout value for each test case. In milliseconds +#UITestingSupport= YES # Possible values: YES or NO +#SeparateProcesses= YES # Possible values: YES or NO (default: NO) +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +[New_Module] +ModuleName= upnptmservertest +[End_Module] + + +# Load testmoduleXXX, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleXXX used initialization file +#IniFile= c:\testframework\init.txt + +#TestModuleXXX used configuration file(s) +#TestCaseFile= c:\testframework\testcases1.cfg +#TestCaseFile= c:\testframework\testcases2.cfg +#TestCaseFile= c:\testframework\manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIF logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# +# - Will write log file in unicode format. +# + YES, Log file will be written in unicode format +# + NO, Log will be written as normal, not unicode, file. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' +#NOTE: TestEngine and TestServer logging settings cannot change here + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +#FileUnicode= YES # Possible values: YES or NO +#AddTestCaseTitle= YES # Possible values: YES or NO +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set filters to be used by ConsoleUI. +# If you want to use filter with ConsoleUI, simply remove comments +# from section below and provide valid filter entries. +# Each filter line has to start with "filter= " keyword. +# Filter can contain special wildcard characters: +# * which stands for none or any literal; +# ? which stands for single character. +# Filters are not case-sensitive. + +#[Filters] +#filter= *math* +#filter= *radio* +#[End_Filters] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/gallery.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/gallery.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/homemedia.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/homemedia.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/maps.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/maps.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/music_launched.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/music_launched.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/music_unlaunched.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/music_unlaunched.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/s60_device.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/s60_device.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/data/videos.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/data/videos.svg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/eabi/upnptmservertestu.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/eabi/upnptmservertestu.DEF Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,10 @@ +EXPORTS + _Z9LibEntryLv @ 1 NONAME + _Z15SetRequirementsRP16CTestModuleParamRm @ 2 NONAME + _ZTI10CTestTimer @ 3 NONAME + _ZTI15CDiscoverDevice @ 4 NONAME + _ZTI19CDiscoveryTestTimer @ 5 NONAME + _ZTV10CTestTimer @ 6 NONAME + _ZTV15CDiscoverDevice @ 7 NONAME + _ZTV19CDiscoveryTestTimer @ 8 NONAME + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/group/bld.inf Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,37 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + + +PRJ_PLATFORMS +DEFAULT + + +PRJ_TESTEXPORTS +../data/TestFramework.ini /epoc32/winscw/c/TestFramework/TestFramework.ini +../data/gallery.svg /epoc32/winscw/c/upnptmserver/icons/gallery.svg +../data/homemedia.svg /epoc32/winscw/c/upnptmserver/icons/homemedia.svg +../data/maps.svg /epoc32/winscw/c/upnptmserver/icons/maps.svg +../data/music_launched.svg /epoc32/winscw/c/upnptmserver/icons/music_launched.svg +../data/music_unlaunched.svg /epoc32/winscw/c/upnptmserver/icons/music_unlaunched.svg +../data/videos.svg /epoc32/winscw/c/upnptmserver/icons/videos.svg +../data/s60_device.svg /epoc32/winscw/c/upnptmserver/icons/s60_device.svg + +PRJ_TESTMMPFILES +upnptmservertest.mmp + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/group/upnptmservertest.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/group/upnptmservertest.mmp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,52 @@ +/** +* Copyright (c) 2010 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: MMP file for STIF Test Framework's Hardcoded test module. +* +*/ + +#include + +TARGET upnptmservertest.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E7 + +CAPABILITY ALL -TCB + +//TARGETPATH +DEFFILE upnptmservertest.def + +USERINCLUDE ../inc +SYSTEMINCLUDE /epoc32/include/platform/mw + +OS_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE tmservertest.cpp +SOURCE tmservertestcases.cpp +SOURCE testtimer.cpp +SOURCE discoverytesttimer.cpp + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib +LIBRARY terminalmodeservice.lib +LIBRARY upnpcontrolpointbase.lib +LIBRARY upnpserviceframework.lib +LIBRARY ecom.lib + +LANG SC + + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/group/upnptmservertest.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/group/upnptmservertest.pkg Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,66 @@ +; +; Copyright (c) 2010 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: Installation file for upnptmserver test module +; + +; Languages +&EN + +; Provide value for uid +#{"STIF"},(0x00000000),1,1,0,TYPE=SA + +; Series60 product id for S60 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Logo +; None + +; Package signature - Optional +; None + +; Start of Package body + +; Condition blocks +; None + +; Options list +; None + +; Install files +"\epoc32\winscw\c\upnptmserver\icons\gallery.svg " - "c:\upnptmserver\icons\gallery.svg" +"\epoc32\winscw\c\upnptmserver\icons\homemedia.svg " - "c:\upnptmserver\icons\homemedia.svg" +"\epoc32\winscw\c\upnptmserver\icons\maps.svg " - "c:\upnptmserver\icons\maps.svg" +"\epoc32\winscw\c\upnptmserver\icons\music_launched.svg " - "c:\upnptmserver\icons\music_launched.svg" +"\epoc32\winscw\c\upnptmserver\icons\music_unlaunched.svg " - "c:\upnptmserver\icons\music_unlaunched.svg" +"\epoc32\winscw\c\upnptmserver\icons\videos.svg " - "c:\upnptmserver\icons\videos.svg" +"\epoc32\winscw\c\upnptmserver\icons\s60_device.svg " - "c:\upnptmserver\icons\s60_device.svg " +"\epoc32\winscw\c\TestFramework\TestFramework.ini" - "c:\TestFramework\TestFramework.ini" +"\epoc32\release\armv5\urel\upnptmservertest.dll" - "c:\Sys\Bin\upnptmservertest.dll" + +; Embedded SIS +; None + +; End of Package body + +; PKG dependencies +; None + +; PKG capabilities +; None diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/inc/discoverytesttimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/inc/discoverytesttimer.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,46 @@ +/** +* Copyright (c) 2010 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: CDiscoveryTestTimer class declaration +* +*/ + + +#ifndef DISCOVERYTESTTIMER_H_ +#define DISCOVERYTESTTIMER_H_ + +#include +#include + +class CTmServerTest; + +class CDiscoveryTestTimer:public CActive + { +public: + static CDiscoveryTestTimer* NewL(CTmServerTest& aTmServerTest); + ~CDiscoveryTestTimer(); + void AfterDiscovery(const TInt aDuration); + +private: + CDiscoveryTestTimer(CTmServerTest& aTmServerTest); + +private: // From CActive + void RunL(); + void DoCancel(); + +private: + RTimer iDiscoveryTimer; + CTmServerTest& iTmServerTest; + }; + +#endif //DISCOVERYTESTTIMER_H_ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/inc/testtimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/inc/testtimer.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,45 @@ +/** +* Copyright (c) 2010 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: CTestTimer class declaration +* +*/ + +#ifndef TESTTIMER_H_ +#define TESTTIMER_H_ + +#include +#include + +class CTmServerTest; + +class CTestTimer:public CActive + { +public: + static CTestTimer* NewL(CTmServerTest& aTmServerTest); + ~CTestTimer(); + void After(const TInt aDuration); + +private: + CTestTimer(CTmServerTest& aTmServerTest); + +private: // From CActive + void RunL(); + void DoCancel(); + +private: + RTimer iTimer; + CTmServerTest& iTmServerTest; + }; + +#endif //TESTTIMER_H_ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/inc/tmservertest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/inc/tmservertest.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,518 @@ +/** +* Copyright (c) 2010 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 TMSERVERTEST_H +#define TMSERVERTEST_H + +// INCLUDES +#include "StifTestModule.h" +#include "testtimer.h" +#include "discoverytesttimer.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// MACROS +#define TEST_MODULE_VERSION_MAJOR 0 +#define TEST_MODULE_VERSION_MINOR 0 +#define TEST_MODULE_VERSION_BUILD 0 + +// Logging path +_LIT( KTmServerTestLogPath, "\\logs\\testframework\\upnptmservertest\\" ); +// Log file +_LIT(KTmServerTestLogFile, "upnptmservertest.txt" ); +_LIT(KTmServerTestLogFileWithTitle, "upnptmservertest_[%S].txt" ); + +const TInt KIconWidth = 21; +const TInt KIconHeight = 21; +const TInt KIconDepth = 24; +const TInt KIconWidth1 = 88; +const TInt KIconHeight1 = 88; +const TInt KIconWidth2 = 36; +const TInt KIconHeight2 = 44; +const TInt KIconWidth3 = 60; +const TInt KIconHeight3 = 60; +const TInt KIconDepth1 = 12; +const TUint KProfileIdValue = 0; +const TUint KAppIdValue = 1; +const TUint KAppId1Value = 2; +const TUint KAppId2Value = 3; +const TUint KAppId3Value = 4; +const TUint KAppId4Value = 5; +const TUint KAppId5Value = 6; +const TUint KNonExistentAppIdValue = 7; +const TUint KNonExistentAppId1Value = 8; +const TUint KInvalidProfileIdValue = 9; +const TInt KInvalidAppIdValue = -1; + + +#define GETPTR & +#define ENTRY(str,func) {_S(str), GETPTR func,0,0,0} +#define FUNCENTRY(func) {_S(#func), GETPTR func,0,0,0} +#define OOM_ENTRY(str,func,a,b,c) {_S(str), GETPTR func,a,b,c} +#define OOM_FUNCENTRY(func,a,b,c) {_S(#func), GETPTR func,a,b,c} + +// FORWARD DECLARATIONS +class CTmServerTest; + +// DATA TYPES +// A typedef for function that does the actual testing, +// function is a type +typedef TInt (CTmServerTest::* TestFunction)(TTestResult&); + +// CLASS DECLARATION +/** +* An internal structure containing a test case name and +* the pointer to function doing the test +* +* @lib ?library +* @since ?Series60_version +*/ +class TCaseInfoInternal + { +public: + const TText* iCaseName; + TestFunction iMethod; + TBool iIsOOMTest; + TInt iFirstMemoryAllocation; + TInt iLastMemoryAllocation; + }; + +// CLASS DECLARATION + +/** +* A structure containing a test case name and +* the pointer to function doing the test +* +* @lib ?library +* @since ?Series60_version +*/ +class TCaseInfo + { +public: + TPtrC iCaseName; + TestFunction iMethod; + TBool iIsOOMTest; + TInt iFirstMemoryAllocation; + TInt iLastMemoryAllocation; + + TCaseInfo( const TText* a ) : iCaseName( (TText*) a ) + { + }; + + }; + + +class CDiscoverDevice : public CUpnpControlPoint + { +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CDiscoverDevice* NewL(CTmServerTest& aTmServerTest); + + /** + * Destructor. + */ + virtual ~CDiscoverDevice(); + +protected: + // Functions from base classes + + /** + * From CUpnpControlPoint State update handler. + */ + void StateUpdatedL( CUpnpService* aService ); + + /** + * From CUpnpControlPoint Device discovery handler. + */ + void DeviceDiscoveredL( CUpnpDevice* aDevice ); + + /** + * From CUpnpControlPoint Device dissappear handler. + */ + void DeviceDisappearedL( CUpnpDevice* aDevice ); + + /** + * From CUpnpControlPoint Action response handler function. + */ + void ActionResponseReceivedL( CUpnpAction* aAction ); + + /** + * From CUpnpControlPoint HTTP message handler function. + */ + void HttpResponseReceivedL( CUpnpHttpMessage* aMessage ); + + + TInt TmServerStateUpdated( CUpnpDevice& aDevice, CUpnpService*& aService ); + + +public: + + /** + * C++ default constructor. + */ + CDiscoverDevice(CTmServerTest& aTmServerTest ); + + void ConstructL(); + TInt LaunchAppActionL( TInt aAppId, TInt aProfileId ); + TInt TerminateAppActionL( TInt aAppId, TInt aProfileId ); + TInt GetAppStatusActionL( TInt aAppId ); + TInt GetAppListActionL(const TDesC8& aAppListFilter ,TInt aProfileId ); + TInt SetClientProfileActionL(TInt aProfileId, const TDesC8& aClientInfoValue ); + TInt GetClientProfileActionL(TInt aProfileId ); + TInt GetMaxNumProfilesActionL(); + void SubscribeToServiceL(); + +public: + CTmServerTest& iTmServerTest; + }; + +// CLASS DECLARATION + +/** +* This a TmServerTest class. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS(CTmServerTest) : public CTestModuleBase, + public MUpnpTmServerObserver + { +public: // Constructors and destructor + + + /** + * Two-phased constructor. + */ + static CTmServerTest* NewL(); + + /** + * Destructor. + */ + virtual ~CTmServerTest(); + +public: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + TInt StartTmServerDeviceL ( TTestResult& aResult ); + TInt PublishTmServerServiceL ( TTestResult& aResult ); + TInt StopTmServerDeviceL ( TTestResult& aResult ); + TInt ReStartTmServerDeviceL( TTestResult& aResult ); + TInt UnRegisterAppL( TTestResult& aResult ); + TInt UnRegisterAppsL( TTestResult& aResult ); + TInt RegisterDuplicateAppL( TTestResult& aResult ); + TInt RegisterDuplicateAppsL( TTestResult& aResult ); + TInt UnRegisterUnRegisteredAppL ( TTestResult& aResult ); + TInt UnRegisterUnRegisteredAppsL ( TTestResult& aResult ); + TInt HandleLaunchAppActionL ( TTestResult& aResult ); + TInt HandleInvalidAppIdLaunchAppActionL(TTestResult& aResult ); + TInt HandleInvalidProfileIdLaunchAppActionL(TTestResult& aResult ); + TInt HandleNonExistentLaunchAppActionL (TTestResult& aResult); + TInt HandleUnauthorizedLaunchAppActionL (TTestResult& aResult); + TInt HandleDeviceLockedLaunchAppActionL (TTestResult& aResult); + TInt HandleTerminateAppActionL ( TTestResult& aResult ); + TInt HandleNonExistentTerminateAppActionL( TTestResult& aResult ); + TInt HandleInvalidAppIdTerminateAppActionL( TTestResult& aResult ); + TInt HandleInvalidProfileIdTerminateAppActionL( TTestResult& aResult ); + TInt HandleUnauthorizedTerminateAppActionL ( TTestResult& aResult ); + TInt HandleDeviceLockedTerminateAppActionL ( TTestResult& aResult ); + TInt HandleGetAppListActionFilter1L(TTestResult& aResult ); + TInt HandleGetAppListActionFilter2L(TTestResult& aResult ); + TInt HandleGetAppListActionFilter3L(TTestResult& aResult ); + TInt HandleGetAppListActionFilter4L(TTestResult& aResult ); + TInt HandleGetAppListActionInvalidArg1L(TTestResult& aResult ); + TInt HandleGetAppListActionInvalidArg2L(TTestResult& aResult ); + TInt HandleGetAppListActionInvalidArg3L(TTestResult& aResult ); + TInt HandleGetAppListActionInvalidArg4L(TTestResult& aResult ); + TInt HandleGetAppListActionInvalidArg5L(TTestResult& aResult ); + TInt HandleInvalidProfileIdGetAppListActionL ( TTestResult& aResult ); + TInt HandleGetAppListActionOperationRejectedL ( TTestResult& aResult ); + TInt HandleGetAppListActionNoFilterL ( TTestResult& aResult ); + TInt HandleGetAppStatusActionL( TTestResult& aResult ); + TInt HandleWildcardGetAppStatusActionL( TTestResult& aResult ); + TInt HandleInvalidAppIdGetAppStatusActionL ( TTestResult& aResult ); + TInt HandleNonExistentGetAppStatusActionL ( TTestResult& aResult ); + TInt HandleSetClientProfileActionL( TTestResult& aResult ); + TInt HandleInvalidProfileIdSetClientProfileActionL (TTestResult& aResult ); + TInt HandleInvalidProfileSetClientProfileActionL (TTestResult& aResult ); + TInt HandleDeviceLockedSetClientProfileActionL (TTestResult& aResult ); + TInt HandleResourceBusySetClientProfileActionL (TTestResult& aResult ); + TInt HandleGetClientProfileActionL( TTestResult& aResult ); + TInt HandleInvalidProfileIdGetClientProfileActionL (TTestResult& aResult ); + TInt HandleGetMaxNumProfilesActionL( TTestResult& aResult ); + TInt HandleGetMaxNumProfilesOperationRejectedL ( TTestResult& aResult ); + TInt HandleEventAppStatusUpdateL ( TTestResult& aResult ); + TInt HandleEventAppListUpdateL ( TTestResult& aResult ); + TInt HandleEventDuplicateAppStatusUpdateL( TTestResult& aResult ); + TInt HandleEventProfileIdListStatusUpdateL( TTestResult& aResult ); + + void RegisterApplicationsL(CUpnpTmServer& aTmServer ); + void SetTmServerSettingsL(); + void TestTimerTimedOutL(); + void TestTimerDiscoveryTimedOut(); + void DeviceVerified(); + void DeviceLostVerified(); + void ServiceVerified(); + +public: // methods from MUpnpTmServerObserver + TTerminalModeErrorCode OnGetApplicationList( TUint aProfileId ); + TTerminalModeErrorCode OnLaunchApp( TUint aAppId, RBuf8& aUrl, TUint aProfileId ); + TTerminalModeErrorCode OnTerminateApp( TUint aAppId, TUint aProfileId ); + TTerminalModeErrorCode OnGetAppStatus( TUint aAppId, TUint& aProfileId ,RBuf8& aStatusType ); + TTerminalModeErrorCode OnGetMaxNumProfiles( TUint& aProfileIdCount ); + TTerminalModeErrorCode OnSetClientProfile( TUint aProfileId, const TDesC8& aClientProfile,RBuf8& aResultProfile ); + TTerminalModeErrorCode OnGetClientProfile( TUint aProfileId, RBuf8& aClientProfile ); + const CUpnpTmClientIconPref& GetClientIconPrefsL( TUint aProfileId ); + +public: // Functions from base classes + + /** + * From CTestModuleBase InitL is used to initialize the + * TmServerTest. It is called once for every instance of + * TestModuleTmServerTest after its creation. + * @since ?Series60_version + * @param aIniFile Initialization file for the test module (optional) + * @param aFirstTime Flag is true when InitL is executed for first + * created instance of TmServerTest. + * @return Symbian OS error code + */ + TInt InitL( TFileName& aIniFile, TBool aFirstTime ); + + /** + * From CTestModuleBase GetTestCasesL is used to inquiry test cases + * from TmServerTest. + * @since ?Series60_version + * @param aTestCaseFile Test case file (optional) + * @param aTestCases Array of TestCases returned to test framework + * @return Symbian OS error code + */ + TInt GetTestCasesL( const TFileName& aTestCaseFile, + RPointerArray& aTestCases ); + + /** + * From CTestModuleBase RunTestCaseL is used to run an individual + * test case. + * @since ?Series60_version + * @param aCaseNumber Test case number + * @param aTestCaseFile Test case file (optional) + * @param aResult Test case result returned to test framework (PASS/FAIL) + * @return Symbian OS error code (test case execution error, which is + * not reported in aResult parameter as test case failure). + */ + TInt RunTestCaseL( const TInt aCaseNumber, + const TFileName& aTestCaseFile, + TTestResult& aResult ); + + /** + * From CTestModuleBase; OOMTestQueryL is used to specify is particular + * test case going to be executed using OOM conditions + * @param aTestCaseFile Test case file (optional) + * @param aCaseNumber Test case number (optional) + * @param aFailureType OOM failure type (optional) + * @param aFirstMemFailure The first heap memory allocation failure value (optional) + * @param aLastMemFailure The last heap memory allocation failure value (optional) + * @return TBool + */ + virtual TBool OOMTestQueryL( const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */, + TOOMFailureType& aFailureType, + TInt& /* aFirstMemFailure */, + TInt& /* aLastMemFailure */ ); + + /** + * From CTestModuleBase; OOMTestInitializeL may be used to initialize OOM + * test environment + * @param aTestCaseFile Test case file (optional) + * @param aCaseNumber Test case number (optional) + * @return None + */ + virtual void OOMTestInitializeL( const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */ ); + + /** + * From CTestModuleBase; OOMHandleWarningL + * @param aTestCaseFile Test case file (optional) + * @param aCaseNumber Test case number (optional) + * @param aFailNextValue FailNextValue for OOM test execution (optional) + * @return None + * + * User may add implementation for OOM test warning handling. Usually no + * implementation is required. + */ + virtual void OOMHandleWarningL( const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */, + TInt& /* aFailNextValue */); + + /** + * From CTestModuleBase; OOMTestFinalizeL may be used to finalize OOM + * test environment + * @param aTestCaseFile Test case file (optional) + * @param aCaseNumber Test case number (optional) + * @return None + * + */ + virtual void OOMTestFinalizeL( const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */ ); + + /** + * Method used to log version of test module + */ + void SendTestModuleVersion(); + +protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + +private: + + /** + * C++ default constructor. + */ + CTmServerTest(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Function returning test case name and pointer to test case function. + * @since ?Series60_version + * @param aCaseNumber test case number + * @return TCaseInfo + */ + const TCaseInfo Case ( const TInt aCaseNumber ) const; + + /** + * [test case declarations] - do not remove + */ + //ADD NEW METHOD DEC HERE" + + /** + * Printing test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt PrintTest( TTestResult& aResult ); + + /** + * Printing loop test case. + * @since ?Series60_version + * @param aResult Test case result (PASS/FAIL) + * @return Symbian OS error code (test case execution error + * that is not returned as test case result in aResult) + */ + TInt LoopTest( TTestResult& aResult ); + + + +public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + TBool iTmServerDeviceType; + TBool iTmServerServiceType; + +protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + +public: + TBool iGetAppList; + TBool iStartApp; + TBool iStopApp; + TBool iSetClientProfile; + TBool iGetClientProfile; + TBool iGetMaxNumProfiles; + TBool iGetAppStatus; + TBool iStatusNotified; + TBool iOperationRejected; + TBool iResourceBusy; + + +private: // Data + // Pointer to test (function) to be executed + TestFunction iMethod; + + // Pointer to logger + CStifLogger * iLog; + + // Normal logger + CStifLogger* iStdLog; + + // Test case logger + CStifLogger* iTCLog; + + // Flag saying if test case title should be added to log file name + TBool iAddTestCaseTitleToLogName; + + // Flag saying if version of test module was already sent + TBool iVersionLogged; + +private: + CUpnpTmServer* iTmServer; + CDiscoverDevice* iSearchDevice; + CTestTimer* iTestTimer; + CDiscoveryTestTimer* iDiscoveryTestTimer; + CUpnpRemotableApp* iRemotableApp; + CUpnpTerminalModeIcon* iTerminalModeIcon; + CUpnpRemotableApp* iRemotableApp1; + CUpnpRemotableApp* iRemotableApp2; + CUpnpRemotableApp* iRemotableApp3; + CUpnpRemotableApp* iRemotableApp4; + CUpnpRemotableApp* iRemotableApp5; + CUpnpTmServerDeviceInfo* iTmServerDeviceInfo; + RPointerArray iRemotableAppArray; + TBool iDeviceVerified; + TBool iDeviceLostVerified; + TBool iServiceVerified; + RPointerArray iClientIconPrefArray; + }; + +#endif // TMSERVERTEST_H + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/src/discoverytesttimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/src/discoverytesttimer.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,58 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + +// INCLUDE FILES +#include "discoverytesttimer.h" +#include "tmservertest.h" + +const TInt KMicroSecond1 = 1000000; + +CDiscoveryTestTimer* CDiscoveryTestTimer::NewL(CTmServerTest& aTmServerTest) + { + return new (ELeave) CDiscoveryTestTimer(aTmServerTest); + } + +CDiscoveryTestTimer::~CDiscoveryTestTimer() + { + Cancel(); + iDiscoveryTimer.Close(); + } + +void CDiscoveryTestTimer::AfterDiscovery(const TInt aDuration) + { + iDiscoveryTimer.After(iStatus, aDuration*KMicroSecond1); + SetActive(); + } + +CDiscoveryTestTimer::CDiscoveryTestTimer(CTmServerTest& aTmServerTest) +:CActive(EPriorityStandard), iTmServerTest(aTmServerTest) + { + CActiveScheduler::Add(this); + iDiscoveryTimer.CreateLocal(); + } + +void CDiscoveryTestTimer::RunL() + { + iTmServerTest.TestTimerDiscoveryTimedOut(); + } + +void CDiscoveryTestTimer::DoCancel() + { + iDiscoveryTimer.Cancel(); + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/src/testtimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/src/testtimer.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,58 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + +// INCLUDE FILES +#include "testtimer.h" +#include "tmservertest.h" + +const TInt KMicroSecond = 1000000; + +CTestTimer* CTestTimer::NewL(CTmServerTest& aTmServerTest) + { + return new (ELeave) CTestTimer(aTmServerTest); + } + +CTestTimer::~CTestTimer() + { + Cancel(); + iTimer.Close(); + } + +void CTestTimer::After(const TInt aDuration) + { + iTimer.After(iStatus, aDuration*KMicroSecond); + SetActive(); + } + +CTestTimer::CTestTimer(CTmServerTest& aTmServerTest) +:CActive(EPriorityStandard), iTmServerTest(aTmServerTest) + { + CActiveScheduler::Add(this); + iTimer.CreateLocal(); + } + +void CTestTimer::RunL() + { + iTmServerTest.TestTimerTimedOutL(); + } + +void CTestTimer::DoCancel() + { + iTimer.Cancel(); + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/src/tmservertest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/src/tmservertest.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,462 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + +// INCLUDE FILES +#include +#include "tmservertest.h" +#include + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CTmServerTest::CTmServerTest +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- + +CTmServerTest::CTmServerTest() + { + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::ConstructL +// Symbian 2nd phase constructor can leave. +// +// Note: If OOM test case uses STIF Logger, then STIF Logger must be created +// with static buffer size parameter (aStaticBufferSize). Otherwise Logger +// allocates memory from heap and therefore causes error situations with OOM +// testing. For more information about STIF Logger construction, see STIF Users +// Guide. +// ----------------------------------------------------------------------------- +// +void CTmServerTest::ConstructL() + { + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + iAddTestCaseTitleToLogName = loggerSettings.iAddTestCaseTitle; + + iStdLog = CStifLogger::NewL( KTmServerTestLogPath, + KTmServerTestLogFile, + CStifLogger::ETxt, + CStifLogger::EFile, + ETrue, + ETrue, + ETrue, + EFalse, + ETrue, + ETrue/*, + 100 */); + iLog = iStdLog; + iVersionLogged = EFalse; + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CTmServerTest* CTmServerTest::NewL() + { + CTmServerTest* self = new (ELeave) CTmServerTest; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +CTmServerTest::~CTmServerTest() + { + iLog = NULL; + delete iStdLog; + iStdLog = NULL; + delete iTCLog; + iTCLog = NULL; + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::InitL +// InitL is used to initialize the Test Module. +// ----------------------------------------------------------------------------- +// +TInt CTmServerTest::InitL( + TFileName& /*aIniFile*/, + TBool /*aFirstTime*/ ) + { + return KErrNone; + + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::GetTestCasesL +// GetTestCases is used to inquire test cases from the Test Module. Test +// cases are stored to array of test cases. The Test Framework will be +// the owner of the data in the RPointerArray after GetTestCases return +// and it does the memory deallocation. +// ----------------------------------------------------------------------------- +// +TInt CTmServerTest::GetTestCasesL( + const TFileName& /*aConfig*/, + RPointerArray& aTestCases ) + { + + // Loop through all test cases and create new + // TTestCaseInfo items and append items to aTestCase array + for( TInt i = 0; Case(i).iMethod != NULL; i++ ) + { + + // Allocate new TTestCaseInfo from heap for a testcase definition. + TTestCaseInfo* newCase = new( ELeave ) TTestCaseInfo(); + + // PushL TTestCaseInfo to CleanupStack. + CleanupStack::PushL( newCase ); + + // Set number for the testcase. + // When the testcase is run, this comes as a parameter to RunTestCaseL. + newCase->iCaseNumber = i; + + // Set title for the test case. This is shown in UI to user. + newCase->iTitle.Copy( Case(i).iCaseName ); + + // Append TTestCaseInfo to the testcase array. After appended + // successfully the TTestCaseInfo object is owned (and freed) + // by the TestServer. + User::LeaveIfError(aTestCases.Append ( newCase ) ); + + // Pop TTestCaseInfo from the CleanupStack. + CleanupStack::Pop( newCase ); + + } + + return KErrNone; + + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::RunTestCaseL +// RunTestCaseL is used to run an individual test case specified +// by aTestCase. Test cases that can be run may be requested from +// Test Module by GetTestCases method before calling RunTestCase. +// ----------------------------------------------------------------------------- +// +TInt CTmServerTest::RunTestCaseL( + const TInt aCaseNumber, + const TFileName& /*aConfig*/, + TTestResult& aResult ) + { + if(!iVersionLogged) + { + SendTestModuleVersion(); + iVersionLogged = ETrue; + } + + // Return value + TInt execStatus = KErrNone; + + // Get the pointer to test case function + TCaseInfo tmp = Case ( aCaseNumber ); + + _LIT( KLogStartTC, "Starting testcase [%S]" ); + iLog->Log( KLogStartTC, &tmp.iCaseName); + + // Check that case number was valid + if ( tmp.iMethod != NULL ) + { + //Open new log file with test case title in file name + if(iAddTestCaseTitleToLogName) + { + //Delete test case logger if exists + if(iTCLog) + { + delete iTCLog; + iTCLog = NULL; + } + + TFileName logFileName; + TName title; + TestModuleIf().GetTestCaseTitleL(title); + + logFileName.Format(KTmServerTestLogFileWithTitle, &title); + + iTCLog = CStifLogger::NewL(KTmServerTestLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + ETrue, + ETrue, + ETrue, + EFalse, + ETrue, + ETrue/*, + 100*/); + iLog = iTCLog; + } + CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install( activeScheduler ); + // Valid case was found, call it via function pointer + iMethod = tmp.iMethod; + //execStatus = ( this->*iMethod )( aResult ); + TRAPD(err, execStatus = ( this->*iMethod )( aResult )); + delete activeScheduler; + if(iAddTestCaseTitleToLogName) + { + //Restore standard log and destroy test case logger + iLog = iStdLog; + delete iTCLog; //Close test case log + iTCLog = NULL; + } + User::LeaveIfError(err); + } + else + { + // Valid case was not found, return error. + execStatus = KErrNotFound; + } + + // Return case execution status (not the result of the case execution) + return execStatus; + + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::OOMTestQueryL +// Used to check if a particular test case should be run in OOM conditions and +// which memory allocations should fail. +// ----------------------------------------------------------------------------- +// +TBool CTmServerTest::OOMTestQueryL( + const TFileName& /* aTestCaseFile */, + const TInt aCaseNumber, + TOOMFailureType& /* aFailureType */, + TInt& aFirstMemFailure, + TInt& aLastMemFailure ) + { + _LIT( KLogOOMTestQueryL, "CTmServerTest::OOMTestQueryL" ); + iLog->Log( KLogOOMTestQueryL ); + + aFirstMemFailure = Case( aCaseNumber ).iFirstMemoryAllocation; + aLastMemFailure = Case( aCaseNumber ).iLastMemoryAllocation; + + return Case( aCaseNumber ).iIsOOMTest; + + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::OOMTestInitializeL +// Used to perform the test environment setup for a particular OOM test case. +// Test Modules may use the initialization file to read parameters for Test +// Module initialization but they can also have their own configure file or +// some other routine to initialize themselves. +// +// NOTE: User may add implementation for OOM test environment initialization. +// Usually no implementation is required. +// ----------------------------------------------------------------------------- +// +void CTmServerTest::OOMTestInitializeL( + const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */ ) + { + _LIT( KLogInfo, "CTmServerTest::OOMTestInitializeL" ); + iLog->Log( KLogInfo ); + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::OOMHandleWarningL +// In some cases the heap memory allocation should be skipped, either due to +// problems in the OS code or components used by the code being tested, or even +// inside the tested components which are implemented this way on purpose (by +// design), so it is important to give the tester a way to bypass allocation +// failures. +// +// NOTE: User may add implementation for OOM test warning handling. Usually no +// implementation is required. +// ----------------------------------------------------------------------------- +// +void CTmServerTest::OOMHandleWarningL( + const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */, + TInt& /* aFailNextValue */ ) + { + _LIT( KLogInfo, "CTmServerTest::OOMHandleWarningL" ); + iLog->Log( KLogInfo ); + } + +// ----------------------------------------------------------------------------- +// CTmServerTest::OOMTestFinalizeL +// Used to perform the test environment cleanup for a particular OOM test case. +// +// NOTE: User may add implementation for OOM test environment finalization. +// Usually no implementation is required. +// ----------------------------------------------------------------------------- +// +void CTmServerTest::OOMTestFinalizeL( + const TFileName& /* aTestCaseFile */, + const TInt /* aCaseNumber */ ) + { + _LIT( KLogInfo, "CTmServerTest::OOMTestFinalizeL" ); + iLog->Log( KLogInfo ); + } + +//----------------------------------------------------------------------------- +// CTmServerTest::SendTestModuleVersion +// Method used to send version of test module +//----------------------------------------------------------------------------- + +void CTmServerTest::SendTestModuleVersion() + { + TVersion moduleVersion; + moduleVersion.iMajor = TEST_MODULE_VERSION_MAJOR; + moduleVersion.iMinor = TEST_MODULE_VERSION_MINOR; + moduleVersion.iBuild = TEST_MODULE_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("upnptmservertest.dll"); + + TBool newVersionOfMethod = ETrue; + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point +// Returns: CTestModuleBase*: Pointer to Test Module object +// ----------------------------------------------------------------------------- +// +EXPORT_C CTestModuleBase* LibEntryL() + { + return CTmServerTest::NewL(); + + } + +// ----------------------------------------------------------------------------- +// SetRequirements handles test module parameters(implements evolution +// version 1 for test module's heap and stack sizes configuring). +// Returns: TInt: Symbian error code. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt SetRequirements( CTestModuleParam*& /*aTestModuleParam*/, + TUint32& /*aParameterValid*/ ) + { + + /* --------------------------------- NOTE --------------------------------- + USER PANICS occurs in test thread creation when: + 1) "The panic occurs when the value of the stack size is negative." + 2) "The panic occurs if the minimum heap size specified is less + than KMinHeapSize". + KMinHeapSize: "Functions that require a new heap to be allocated will + either panic, or will reset the required heap size to this value if + a smaller heap size is specified". + 3) "The panic occurs if the minimum heap size specified is greater than + the maximum size to which the heap can grow". + Other: + 1) Make sure that your hardware or Symbian OS is supporting given sizes. + e.g. Hardware might support only sizes that are divisible by four. + ------------------------------- NOTE end ------------------------------- */ + + // Normally STIF uses default heap and stack sizes for test thread, see: + // KTestThreadMinHeap, KTestThreadMinHeap and KStackSize. + // If needed heap and stack sizes can be configured here by user. Remove + // comments and define sizes. + +/* + aParameterValid = KStifTestModuleParameterChanged; + + CTestModuleParamVer01* param = CTestModuleParamVer01::NewL(); + // Stack size + param->iTestThreadStackSize= 16384; // 16K stack + // Heap sizes + param->iTestThreadMinHeap = 4096; // 4K heap min + param->iTestThreadMaxHeap = 1048576;// 1M heap max + + aTestModuleParam = param; +*/ + return KErrNone; + + } + + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/tsrc/upnptmservertest/src/tmservertestcases.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/tsrc/upnptmservertest/src/tmservertestcases.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,3748 @@ +/** +* Copyright (c) 2010 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: +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include "testtimer.h" +#include "discoverytesttimer.h" +#include "tmservertest.h" + + +// LOCAL CONSTANTS AND MACROS +_LIT8(KTestSvgMimeType, "image/svg+xml"); +_LIT8(KTmServerDevice, "urn:schemas-upnp-org:device:TmServerDevice:1" ); +_LIT8(KTmServerService, "urn:schemas-upnp-org:service:TmApplicationServer:1" ); +_LIT8(KTmServerServiceType, "TmApplicationServer:1" ); +_LIT8(KTmServerServiceType1, "TmClientProfile:1" ); +_LIT8(KBtMacValue, "00257df016d5"); +_LIT8(KArgTypeAppStatusUpdate, "AppStatusUpdate"); +_LIT8(KGetAppStatus, "GetApplicationStatus"); +_LIT8(KAppStatus, "AppStatus"); +_LIT8(KGetApplicationList, "GetApplicationList"); +_LIT8(KAppListing, "AppListing"); +_LIT8(KLaunchApp, "LaunchApplication"); +_LIT8(KTerminateApp, "TerminateApplication"); +_LIT8(KAppLaunchStatus, "AppURI"); +_LIT8(KAppTerminateStatus, "TerminationResult"); +_LIT8(KAppId , "AppID"); +_LIT8(KAppFilter, "AppListingFilter"); +_LIT8(KResultProfile , "resultProfile"); +_LIT8(KSetClientProfile , "SetClientProfile"); +_LIT8(KGetClientProfile, "GetClientProfile"); +_LIT8(KGetMaxNumProfiles, "GetMaxNumProfiles"); +_LIT8(KClientProfile , "clientProfile"); +_LIT8(KNumProfilesAllowed , "numProfilesAllowed"); +_LIT8(KProfileId, "ProfileID"); +_LIT8(KProfileId1, "profileID"); +_LIT8(KBackground, "Background"); +_LIT8(KForeground, "Foreground"); +_LIT8(KAppListFilterValue1, "\"icon@mimetype=\"*svg+xml*\",icon@width=\"*\",icon@height=\"*\",icon@depth=\"*\"\""); +_LIT8(KAppListFilterValue2, "\"name=\"*nav*\",description=\"*\",appInfo@appCategory=\"*\",appInfo@trustLevel=\"*\",displayInfo@contentCategory=\"*\",displayInfo@contentRules=\"*\",displayInfo@trustLevel=\"*\",allowedProfileIDs=\"*\"\""); +_LIT8(KAppListFilterValue3, "\"name=\"*bluetooth*\",description=\"*\",icon@mimetype=\"*svg+xml*\",remotingInfo@protocolID=\"*\",remotingInfo@direction=\"*\",appInfo@appCategory=\"*\",audioInfo@audioType=\"*\",resourceStatus=\"free\",signature=\"*\"\""); +_LIT8(KAppListFilterValue4, "\"name=\"*\",description=\"*Audio*\",icon@mimetype=\"*svg+xml*\",remotingInfo@protocolID=\"*\",remotingInfo@format=\"*\",appInfo@appCategory=\"*\",audioInfo@audioType=\"*\",resourceStatus=\"free\",signature=\"*\"\""); +_LIT8(KWildCard, "*"); +_LIT(KIconPathMusicUnLaunched, "c:\\upnptmserver\\icons\\music_unlaunched.svg"); +_LIT(KIconPathMusicLaunched, "c:\\upnptmserver\\icons\\music_launched.svg"); +_LIT(KIconPathMaps, "c:\\upnptmserver\\icons\\maps.svg"); +_LIT(KIconPathBtA2DpUnLaunched, "c:\\upnptmserver\\icons\\gallery.svg"); +_LIT(KIconPathBtA2DpLaunched, "c:\\upnptmserver\\icons\\homemedia.svg"); +_LIT(KIconPathBtHfp, "c:\\upnptmserver\\icons\\videos.svg"); +_LIT(KIconDevicePath, "c:\\upnptmserver\\icons\\s60_device.svg"); +_LIT8(KDeviceInfo, "10true" + "pre,posttruefalse" + ""); + +_LIT8(KClientProfileInfo, "<clientProfile><clientID>Cl_1</clientID><friendlyName>Client One</friendlyName><manufacturer>man_2</manufacturer><modelName>CL_Model2</modelName><modelNumber>2009</modelNumber><iconPreference><width>240</width><height>240</height></iconPreference><contentRules><rule><ruleId>0</ruleId><ruleValue>0.1</ruleValue></rule><rule><ruleId>1</ruleId></rule></contentRules></clientProfile>"); + +_LIT8(KDeviceLockedClientProfile, "<clientProfile><clientID>Cl_2</clientID></clientProfile>"); + +_LIT8(KXmlSignature, "<Signature Id= "AppListSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11"/><SignatureMethodAlgorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI=""></Reference></SignedInfo></Signature>"); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CTmServerTest::Case +// Returns a test case by number. +// +// This function contains an array of all available test cases +// i.e pair of case name and test function. If case specified by parameter +// aCaseNumber is found from array, then that item is returned. +// +// The reason for this rather complicated function is to specify all the +// test cases only in one place. It is not necessary to understand how +// function pointers to class member functions works when adding new test +// cases. See function body for instructions how to add new test case. +// ----------------------------------------------------------------------------- +// +const TCaseInfo CTmServerTest::Case ( + const TInt aCaseNumber ) const + { + + /** + * To add new test cases, implement new test case function and add new + * line to KCases array specify the name of the case and the function + * doing the test case + * In practice, do following + * 1) Make copy of existing test case function and change its name + * and functionality. Note that the function must be added to + * TmServerTest.cpp file and to TmServerTest.h + * header file. + * + * 2) Add entry to following KCases array either by using: + * + * 2.1: FUNCENTRY or ENTRY macro + * ENTRY macro takes two parameters: test case name and test case + * function name. + * + * FUNCENTRY macro takes only test case function name as a parameter and + * uses that as a test case name and test case function name. + * + * Or + * + * 2.2: OOM_FUNCENTRY or OOM_ENTRY macro. Note that these macros are used + * only with OOM (Out-Of-Memory) testing! + * + * OOM_ENTRY macro takes five parameters: test case name, test case + * function name, TBool which specifies is method supposed to be run using + * OOM conditions, TInt value for first heap memory allocation failure and + * TInt value for last heap memory allocation failure. + * + * OOM_FUNCENTRY macro takes test case function name as a parameter and uses + * that as a test case name, TBool which specifies is method supposed to be + * run using OOM conditions, TInt value for first heap memory allocation + * failure and TInt value for last heap memory allocation failure. + */ + + static TCaseInfoInternal const KCases[] = + { + // [test cases entries] - do not remove + + ENTRY( "Start TM Server Device", CTmServerTest::StartTmServerDeviceL ), + ENTRY( "Publish TM Server Service", CTmServerTest::PublishTmServerServiceL ), + ENTRY( "Stop TM Server Device", CTmServerTest::StopTmServerDeviceL ), + ENTRY( "ReStart TM Server Device", CTmServerTest::ReStartTmServerDeviceL ), + ENTRY( "Handle LaunchApp Command", CTmServerTest::HandleLaunchAppActionL ), + ENTRY( "Handle Invalid AppId LaunchApp Command", CTmServerTest::HandleInvalidAppIdLaunchAppActionL ), + ENTRY( "Handle Invalid ProfileId LaunchApp Command", CTmServerTest::HandleInvalidProfileIdLaunchAppActionL ), + ENTRY( "Handle LaunchApp Command For Non-Existent AppID", CTmServerTest::HandleNonExistentLaunchAppActionL ), + ENTRY( "Handle LaunchApp Command For UnAuthorized AppID", CTmServerTest::HandleUnauthorizedLaunchAppActionL ), + ENTRY( "Handle Device Locked Condition For LaunchApp Command", CTmServerTest::HandleDeviceLockedLaunchAppActionL ), + ENTRY( "Handle TerminateApp Command", CTmServerTest::HandleTerminateAppActionL), + ENTRY( "Handle TerminateApp Command For Non-Existent AppID", CTmServerTest::HandleNonExistentTerminateAppActionL), + ENTRY( "Handle Invalid AppId TerminateApp Command", CTmServerTest::HandleInvalidAppIdTerminateAppActionL), + ENTRY( "Handle Invalid ProfileId TerminateApp Command", CTmServerTest::HandleInvalidProfileIdTerminateAppActionL), + ENTRY( "Handle TerminateApp Command For UnAuthorized AppID", CTmServerTest::HandleUnauthorizedTerminateAppActionL), + ENTRY( "Handle Device Locked Condition For TerminateApp Command", CTmServerTest::HandleDeviceLockedTerminateAppActionL ), + ENTRY( "Handle GetAppStatus Command ", CTmServerTest::HandleGetAppStatusActionL ), + ENTRY( "Handle GetAppStatus Command For All the Applications", CTmServerTest::HandleWildcardGetAppStatusActionL ), + ENTRY( "Handle GetAppStatus Command For Invalid AppId", CTmServerTest::HandleInvalidAppIdGetAppStatusActionL ), + ENTRY( "Handle GetAppStatus Command For Non-Existent AppID", CTmServerTest::HandleNonExistentGetAppStatusActionL ), + ENTRY( "Handle GetAppList Command with Filter1", CTmServerTest:: HandleGetAppListActionFilter1L ), + ENTRY( "Handle GetAppList Command with Filter2", CTmServerTest:: HandleGetAppListActionFilter2L ), + ENTRY( "Handle GetAppList Command with Filter3", CTmServerTest:: HandleGetAppListActionFilter3L ), + ENTRY( "Handle GetAppList Command with Filter4", CTmServerTest:: HandleGetAppListActionFilter4L ), + ENTRY( "Handle GetAppList Command with No Filter", CTmServerTest:: HandleGetAppListActionNoFilterL ), + ENTRY( "Handle GetAppList Command with Invalid Arg1", CTmServerTest:: HandleGetAppListActionInvalidArg1L ), + ENTRY( "Handle GetAppList Command with Invalid Arg2", CTmServerTest:: HandleGetAppListActionInvalidArg2L ), + ENTRY( "Handle GetAppList Command with Invalid Arg3", CTmServerTest:: HandleGetAppListActionInvalidArg3L ), + ENTRY( "Handle GetAppList Command with Invalid Arg4", CTmServerTest:: HandleGetAppListActionInvalidArg4L ), + ENTRY( "Handle GetAppList Command with Invalid Arg5", CTmServerTest:: HandleGetAppListActionInvalidArg5L ), + ENTRY( "Handle Invalid ProfileId GetAppList Command", CTmServerTest:: HandleInvalidProfileIdGetAppListActionL), + ENTRY( "Handle Operation Rejected Condition For GetAppList Command", CTmServerTest:: HandleGetAppListActionOperationRejectedL), + ENTRY( "Handle SetClientProfile Command", CTmServerTest:: HandleSetClientProfileActionL ), + ENTRY( "Handle Invalid ProfileId SetClientProfile Command", CTmServerTest:: HandleInvalidProfileIdSetClientProfileActionL ), + ENTRY( "Handle Invalid Profile SetClientProfile Command", CTmServerTest:: HandleInvalidProfileSetClientProfileActionL ), + ENTRY( "Handle Device Locked Condition For SetClientProfile Command", CTmServerTest:: HandleDeviceLockedSetClientProfileActionL ), + ENTRY( "Handle Resource Busy Condition For SetClientProfile Command", CTmServerTest:: HandleResourceBusySetClientProfileActionL ), + ENTRY( "Handle GetClientProfile Command", CTmServerTest:: HandleGetClientProfileActionL ), + ENTRY( "Handle Invalid ProfileId GetClientProfile Command", CTmServerTest:: HandleInvalidProfileIdGetClientProfileActionL ), + ENTRY( "Handle GetMaxNumProfiles Command", CTmServerTest:: HandleGetMaxNumProfilesActionL ), + ENTRY( "Handle Operation Rejected Condition For GetMaxNumProfiles Command", CTmServerTest:: HandleGetMaxNumProfilesOperationRejectedL ), + ENTRY( "Register Duplicate Application", CTmServerTest::RegisterDuplicateAppL), + ENTRY( "Register Duplicate Applications", CTmServerTest::RegisterDuplicateAppsL), + ENTRY( "UnRegister Application", CTmServerTest::UnRegisterAppL), + ENTRY( "UnRegister Multiple Applications", CTmServerTest::UnRegisterAppsL), + ENTRY( "UnRegister UnRegistered Application", CTmServerTest::UnRegisterUnRegisteredAppL), + ENTRY( "UnRegister Multiple UnRegistered Applications", CTmServerTest::UnRegisterUnRegisteredAppsL), + ENTRY( "Handle Event For AppStatus Update", CTmServerTest::HandleEventAppStatusUpdateL ), + ENTRY( "Handle Event For AppList Update", CTmServerTest::HandleEventAppListUpdateL ), + ENTRY( "Handle Event For Duplicate AppStatus Update", CTmServerTest::HandleEventDuplicateAppStatusUpdateL), + ENTRY( "Handle Event For ProfileIdList Status Update", CTmServerTest::HandleEventProfileIdListStatusUpdateL), + + // OOM Testcases + OOM_ENTRY( "[OOM_StartTmServerDevice]", CTmServerTest::StartTmServerDeviceL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleGetAppListWithFilter]", CTmServerTest:: HandleGetAppListActionFilter1L,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleGetAppListWithoutFilter]", CTmServerTest:: HandleGetAppListActionNoFilterL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleSetClientProfileCommand]", CTmServerTest:: HandleSetClientProfileActionL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleGetAppStatusCommand]", CTmServerTest:: HandleGetAppStatusActionL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleGetAppStatusForAllApplications]", CTmServerTest::HandleWildcardGetAppStatusActionL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleAppStatusUpdateEvent]", CTmServerTest::HandleEventAppStatusUpdateL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_HandleDuplicateAppStatusUpdateEvent]", CTmServerTest::HandleEventDuplicateAppStatusUpdateL,ETrue,1,5 ), + OOM_ENTRY( "[OOM_UnRegisterApplications]", CTmServerTest::UnRegisterAppsL,ETrue,1,5 ) + }; + + // Verify that case number is valid + if( (TUint) aCaseNumber >= sizeof( KCases ) / + sizeof( TCaseInfoInternal ) ) + { + // Invalid case, construct empty object + TCaseInfo null( (const TText*) L"" ); + null.iMethod = NULL; + null.iIsOOMTest = EFalse; + null.iFirstMemoryAllocation = 0; + null.iLastMemoryAllocation = 0; + return null; + } + + // Construct TCaseInfo object and return it + TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName ); + tmp.iMethod = KCases[ aCaseNumber ].iMethod; + tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest; + tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation; + tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation; + return tmp; + } + + +//========================= TEST CASES ======================================================= + +TInt CTmServerTest::StartTmServerDeviceL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Start Terminalmode Server Device" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo,*this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + // Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iDeviceVerified) + { + _LIT( KDescription , "Terminalmode Server Device started successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Start of Terminalmode Server Device Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::PublishTmServerServiceL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Publish Terminalmode server Service" ); + iLog->Log( KLogInfo ); + + iTmServerServiceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo,*this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iServiceVerified) + { + _LIT( KDescription , "Terminalmode server Service published successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Publishing of Terminalmode server Service Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::StopTmServerDeviceL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Stop Terminalmode server Device" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo,*this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + if ( iDeviceVerified ) + { + //Stop the tmserver device and its services + iTmServer->StopL(); + } + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iDeviceLostVerified ) + { + _LIT( KDescription , "Terminalmode server Device stopped successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Stopping of Terminalmode server Device Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::ReStartTmServerDeviceL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "ReStart Terminalmode server Device" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo,*this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + //Start the tmserver device and its services + iTmServer->StartL(); + //Stop the tmserver device and its services + iTmServer->StopL(); + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iDeviceVerified) + { + _LIT( KDescription , "Terminalmode server Device re-started successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Re-starting of Terminalmode server Device Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::RegisterDuplicateAppL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Register Duplicate Application" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + _LIT8(KAppDesc, "Bluetooth A2DP Audio Server"); + iRemotableApp = CUpnpRemotableApp::NewL( KAppId2Value ,_L8("Bluetooth A2DP")); + iRemotableApp->SetAppDescriptionL(KAppDesc()); + + CUpnpTmInfoElement& tmInfoElement = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement.AddTmInfoElementL(_L8("protocolID"),_L8("BTA2DP")); + tmInfoElement.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement1 = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement1.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000003")); + tmInfoElement1.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + iRemotableApp->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpUnLaunched, KIconWidth2, KIconHeight2, KIconDepth1,KTestSvgMimeType)); + iRemotableApp->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpLaunched,KIconWidth3, KIconHeight3, KIconDepth1,KTestSvgMimeType)); + iRemotableApp->SetResourceStatusL(_L8("free")); + + // Register the application + iTmServer->RegisterAppL(iRemotableApp); + + iRemotableApp1 = CUpnpRemotableApp::NewL( KAppId2Value ,_L8("Bluetooth A2DP")); + iRemotableApp1->SetAppDescriptionL(KAppDesc()); + + CUpnpTmInfoElement& tmInfoElement2 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement2.AddTmInfoElementL(_L8("protocolID"),_L8("BTA2DP")); + tmInfoElement2.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement3 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement3.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000003")); + tmInfoElement3.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpUnLaunched, KIconWidth2, KIconHeight2, KIconDepth1,KTestSvgMimeType)); + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpLaunched,KIconWidth3, KIconHeight3, KIconDepth1,KTestSvgMimeType)); + iRemotableApp1->SetResourceStatusL(_L8("free")); + + // Register the application which is already registered + iTmServer->RegisterAppL(iRemotableApp1); + + _LIT( KDescription , "Registering of duplicate app is handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + + delete iTmServer; + iTmServer = NULL; + + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::RegisterDuplicateAppsL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Register Duplicate Applications" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + _LIT8(KAppDesc, "Mobile Navigation Application"); + iRemotableApp = CUpnpRemotableApp::NewL( KAppIdValue ,_L8("Navigation")); + iRemotableApp->SetAppDescriptionL(KAppDesc()); + CUpnpTmInfoElement& tmInfoElement = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement.AddTmInfoElementL(_L8("protocolID"),_L8("VNC")); + + CUpnpTmInfoElement& tmInfoElement1 = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement1.AddTmInfoElementL(_L8("appCategory"),_L8("0x00010001")); + tmInfoElement1.AddTmInfoElementL(_L8("trustLevel"),_L8("0x80")); + + CUpnpTmInfoElement& tmInfoElement2 = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::EDisplayInfo); + tmInfoElement2.AddTmInfoElementL(_L8("contentCategory"),_L8("0x0000001")); + tmInfoElement2.AddTmInfoElementL(_L8("contentRules"),_L8("0x00000FE")); + tmInfoElement2.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + iRemotableApp->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMaps, KIconWidth1, KIconHeight1, KIconDepth,KTestSvgMimeType)); + + // Register the application + iTmServer->RegisterAppL(iRemotableApp); + + _LIT8(KAppDesc1, "RTP Audio Server"); + iRemotableApp1 = CUpnpRemotableApp::NewL( KAppId1Value ,_L8("RTP Server")); + iRemotableApp1->SetAppDescriptionL(KAppDesc1()); + + CUpnpTmInfoElement& tmInfoElement3 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement3.AddTmInfoElementL(_L8("protocolID"),_L8("RTP")); + tmInfoElement3.AddTmInfoElementL(_L8("format"),_L8("99")); + tmInfoElement3.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement4 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement4.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000002")); + tmInfoElement4.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + CUpnpTmInfoElement& tmInfoElement5 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::EAudioInfo); + tmInfoElement5.AddTmInfoElementL(_L8("audioType"),_L8("all")); + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicUnLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp1->SetResourceStatusL(_L8("free")); + + iRemotableAppArray.AppendL(iRemotableApp1); + + iRemotableApp2 = CUpnpRemotableApp::NewL( KAppId1Value ,_L8("RTP Server")); + iRemotableApp2->SetAppDescriptionL(KAppDesc1()); + + CUpnpTmInfoElement& tmInfoElement6 = iRemotableApp2->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement6.AddTmInfoElementL(_L8("protocolID"),_L8("RTP")); + tmInfoElement6.AddTmInfoElementL(_L8("format"),_L8("99")); + tmInfoElement6.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement7 = iRemotableApp2->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement7.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000002")); + tmInfoElement7.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + CUpnpTmInfoElement& tmInfoElement8 = iRemotableApp2->CreateTmInfoElementL(CUpnpTmInfoElement::EAudioInfo); + tmInfoElement8.AddTmInfoElementL(_L8("audioType"),_L8("all")); + iRemotableApp2->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicUnLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp2->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp2->SetResourceStatusL(_L8("free")); + iRemotableAppArray.AppendL(iRemotableApp2); + + // Register the dulplicate applications + iTmServer->RegisterAppsL( iRemotableAppArray); + + _LIT( KDescription , "Registering of duplicate applications is handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + iRemotableAppArray.Close(); + delete iTmServer; + iTmServer = NULL; + + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::UnRegisterAppL( TTestResult& aResult ) + { + _LIT( KLogInfo, "UnRegister Application" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Unregister the application by specifying AppId + iTmServer->UnRegisterApp( KAppIdValue ); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + _LIT( KDescription , "Application is un-registered successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + + delete iTestTimer; + iTestTimer = NULL; + + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::UnRegisterAppsL( TTestResult& aResult ) + { + _LIT( KLogInfo, "UnRegister Multiple Applications" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + RArray appIdArray; + appIdArray.AppendL( KAppId1Value ); + appIdArray.AppendL( KAppId2Value ); + + //Unregister multiple applications by specifying array of AppIds + iTmServer->UnRegisterApps( appIdArray); + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + _LIT( KDescription , "Multiple Applications are un-registered successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + appIdArray.Close(); + + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::UnRegisterUnRegisteredAppL( TTestResult& aResult ) + { + _LIT( KLogInfo, "UnRegister UnRegistered Application" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Unregister the application which is already unregistered + iTmServer->UnRegisterApp( KNonExistentAppIdValue ); + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + _LIT( KDescription , "UnRegistering of UnRegistered Application is handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + + delete iTestTimer; + iTestTimer = NULL; + + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::UnRegisterUnRegisteredAppsL( TTestResult& aResult ) + { + _LIT( KLogInfo, "UnRegister Multiple UnRegistered Applications" ); + iLog->Log( KLogInfo ); + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + RArray appIdArray; + appIdArray.AppendL( KNonExistentAppIdValue ); + appIdArray.AppendL( KNonExistentAppId1Value ); + + //Unregister multiple applications which are already unregistered + iTmServer->UnRegisterApps( appIdArray); + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + _LIT( KDescription , "UnRegistering of UnRegistered Applications is handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + + appIdArray.Close(); + delete iTestTimer; + iTestTimer = NULL; + + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleEventDuplicateAppStatusUpdateL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Event For Duplicate AppStatus Update" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Subscribe to Services + iSearchDevice->SubscribeToServiceL(); + } + RArray updatedAppIdList; + updatedAppIdList.Append(KAppId1Value); + updatedAppIdList.Append(KAppId1Value); + //Update the status of applications which have undergone some change + iTmServer->UpdateAppStatusL(updatedAppIdList); + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if ( iStatusNotified ) + { + _LIT( KDescription , "Handle Event For Duplicate AppStatus Update handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Handle Event For Duplicate AppStatus Update handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + updatedAppIdList.Close(); + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleEventProfileIdListStatusUpdateL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Event For ProfileIdList Status Update" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Subscribes to a service + iSearchDevice->SubscribeToServiceL(); + } + + RArray UnusedProfileIdList; + UnusedProfileIdList.Append(5); + UnusedProfileIdList.Append(6); + //Update the list of profile IDs for profiles which are not used + iTmServer->UpdateUnusedProfileIdsL(UnusedProfileIdList); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if ( iStatusNotified ) + { + _LIT( KDescription , "Handle Event For ProfileIdList Status Update handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Handle Event For ProfileIdList Status Update handling failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + + UnusedProfileIdList.Close(); + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleLaunchAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo , "Handle LaunchApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application remotely by specifying appId and profileId + iSearchDevice->LaunchAppActionL(KAppId1Value,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command handled Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleTerminateAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle TerminateApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application which is already running + iSearchDevice->TerminateAppActionL( KAppId1Value,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if ( iStopApp) + { + _LIT( KDescription , "TerminateApp Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidAppIdLaunchAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid AppId LaunchApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application by specifying invalid appId + iSearchDevice->LaunchAppActionL( KInvalidAppIdValue,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command with invalid AppId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command with invalid AppId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileIdLaunchAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid ProfileId LaunchApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application by specifying invalid profileId + iSearchDevice->LaunchAppActionL( KAppId1Value,KInvalidProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command with invalid ProfileId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command with invalid ProfileId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleNonExistentLaunchAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle LaunchApp Command For Non-Existent AppID" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application by specifying non-existent appId + iSearchDevice->LaunchAppActionL( KNonExistentAppIdValue, KProfileIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command For Non-Existent AppID handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command For Non-Existent AppID handled Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleUnauthorizedLaunchAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle LaunchApp Command For UnAuthorized AppID" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application by specifying unauthorized appId + iSearchDevice->LaunchAppActionL(KAppId5Value,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command For UnAuthorized AppID handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command For UnAuthorized AppID handled Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleDeviceLockedLaunchAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Device Locked Condition For LaunchApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Launch the application + iSearchDevice->LaunchAppActionL(KAppId4Value,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iStartApp ) + { + _LIT( KDescription , "LaunchApp Command For Device Locked Condition handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "LaunchApp Command For Device Locked Condition handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleNonExistentTerminateAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle TerminateApp Command For Non-Existent AppID" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application by specifying unauthorized appId + iSearchDevice->TerminateAppActionL( KNonExistentAppIdValue,KProfileIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iStopApp) + { + _LIT( KDescription , "TerminateApp Command For Non-Existent App ID handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command handling for Non-Existent App Id Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidAppIdTerminateAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid AppId TerminateApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application by specifying invalid appId + iSearchDevice->TerminateAppActionL( KInvalidAppIdValue,KProfileIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iStopApp) + { + _LIT( KDescription , "TerminateApp Command with invalid AppId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command with invalid AppId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileIdTerminateAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid ProfileId TerminateApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application by specifying invalid profileId + iSearchDevice->TerminateAppActionL( KAppId1Value,KInvalidProfileIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iStopApp) + { + _LIT( KDescription , "TerminateApp Command with invalid ProfileId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command with invalid ProfileId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleUnauthorizedTerminateAppActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle TerminateApp Command UnAuthorized AppID" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application by specifying unauthorized appId + iSearchDevice->TerminateAppActionL( KAppId5Value,KProfileIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if ( iStopApp) + { + _LIT( KDescription , "TerminateApp Command For Un-Authorized App ID handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command handling For Un-Authorized App ID Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleDeviceLockedTerminateAppActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Device Locked Condition For TerminateApp Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Terminate the application + iSearchDevice->TerminateAppActionL(KAppId4Value,KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iStopApp ) + { + _LIT( KDescription , "TerminateApp Command For Device Locked Condition handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "TerminateApp Command For Device Locked Condition handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppStatusActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppStatus Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the status of application + iSearchDevice->GetAppStatusActionL( KAppId1Value ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetAppStatus) + { + _LIT( KDescription , "GetAppStatus Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppStatus Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleWildcardGetAppStatusActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppStatus Command For All the Applications" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the status of all the application + iSearchDevice->GetAppStatusActionL( KAppId5Value ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetAppStatus) + { + _LIT( KDescription , "GetAppStatus Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppStatus Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + + +TInt CTmServerTest::HandleInvalidAppIdGetAppStatusActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppStatus Command For Invalid AppId" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the status of the application by specifying invalid appId + iSearchDevice->GetAppStatusActionL( KInvalidAppIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetAppStatus) + { + _LIT( KDescription , "GetAppStatus Command with invalid AppId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppStatus Command with invalid AppId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleNonExistentGetAppStatusActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppStatus Command For Non-Existent AppID" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the status of the application by specifying non existent appId + iSearchDevice->GetAppStatusActionL( KNonExistentAppIdValue ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetAppStatus) + { + _LIT( KDescription , "GetAppStatus Command for Non-Existent App ID handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppStatus Command handling for Non-Existent App ID Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleEventAppStatusUpdateL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Event For AppStatus Update" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Subscribes to a service + iSearchDevice->SubscribeToServiceL(); + } + RArray updatedAppIdList; + updatedAppIdList.Append(KAppId1Value); + updatedAppIdList.Append(KAppId2Value); + + //Update the status of applications which have undergone some change + iTmServer->UpdateAppStatusL(updatedAppIdList); + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if ( iStatusNotified ) + { + _LIT( KDescription , "Handle Event For AppStatus Update handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Handle Event For AppStatus Update handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + updatedAppIdList.Close(); + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleEventAppListUpdateL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Event For AppList Update" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer ->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Subscribes to a service + iSearchDevice->SubscribeToServiceL(); + } + + TInt errorCode; + CUpnpRemotableApp& aRemotableApp = iTmServer->GetRemotableApp(KAppIdValue ,errorCode ); + if (errorCode == KErrNone) + { + _LIT8(KAppDesc, "Mobile Device Display"); + aRemotableApp.SetAppDescriptionL(KAppDesc()); + } + RArray updatedAppIdList; + updatedAppIdList.Append(KAppIdValue); + updatedAppIdList.Append(KAppId2Value); + + //Update the list of applications which have been modified to/from the list + iTmServer->UpdateAppListL(updatedAppIdList); + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if ( iStatusNotified ) + { + _LIT( KDescription , "Handle Event For AppList Update handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Handle Event For AppList Update handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + updatedAppIdList.Close(); + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionFilter1L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Filter1" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying filter value + iSearchDevice->GetAppListActionL(KAppListFilterValue1(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Filter1 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Filter1 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionFilter2L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList with Filter2 Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying filter value + iSearchDevice->GetAppListActionL(KAppListFilterValue2(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Filter2 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Filter2 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionFilter3L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList with Filter3 Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying filter value + iSearchDevice->GetAppListActionL(KAppListFilterValue3(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Filter3 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Filter3 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionFilter4L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList with Filter4 Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying filter value + iSearchDevice->GetAppListActionL(KAppListFilterValue4(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Filter4 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Filter4 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionInvalidArg1L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Invalid Arg1" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidFilter1,"\"name=\"*Audio*\"" ); + //Retrieve the list of applications by specifying invalid filter value + iSearchDevice->GetAppListActionL(KInvalidFilter1(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Invalid Arg1 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Invalid Arg1 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + + +TInt CTmServerTest::HandleGetAppListActionInvalidArg2L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Invalid Arg2" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidFilter2, "\"name=\"*nav*\",appInfo=\"*\"\""); + //Retrieve the list of applications by specifying invalid filter value + iSearchDevice->GetAppListActionL(KInvalidFilter2(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Invalid Arg2 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Invalid Arg2 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionInvalidArg3L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Invalid Arg3" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidFilter3, "\"name=\"*Audio*\",@audioType=\"*\"\""); + //Retrieve the list of applications by specifying invalid filter value + iSearchDevice->GetAppListActionL(KInvalidFilter3(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Invalid Arg3 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Invalid Arg3 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionInvalidArg4L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Invalid Arg4" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidFilter4, "\"icon@mimetype\"*svg+xml*\"\""); + //Retrieve the list of applications by specifying invalid filter value + iSearchDevice->GetAppListActionL(KInvalidFilter4(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Invalid Arg4 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Invalid Arg4 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionInvalidArg5L ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command with Invalid Arg5" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidFilter5, "\"name=\"*nav*\"appInfo@appCategory=\"*\"\""); + //Retrieve the list of applications by specifying invalid filter value + iSearchDevice->GetAppListActionL(KInvalidFilter5(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with Invalid Arg5 handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with Invalid Arg5 handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionNoFilterL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetAppList Command With No Filter" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications + iSearchDevice->GetAppListActionL( KWildCard(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command With No Filter handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command With No Filter handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileIdGetAppListActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid ProfileId GetAppList Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying invalid profileId + iSearchDevice->GetAppListActionL(KWildCard(),KInvalidProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "GetAppList Command with invalid ProfileId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetAppList Command with invalid ProfileId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetAppListActionOperationRejectedL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Operation Rejected Condition For GetAppList Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + iOperationRejected = ETrue; + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the list of applications by specifying profileId + iSearchDevice->GetAppListActionL(KAppListFilterValue1(),KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + if (iGetAppList) + { + _LIT( KDescription , "Handle Operation Rejected Condition For GetAppList Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Handle Operation Rejected Condition For GetAppList Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleSetClientProfileActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle SetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + // Register the client profile + iSearchDevice->SetClientProfileActionL(KProfileIdValue, KClientProfileInfo); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iSetClientProfile) + { + _LIT( KDescription , "SetClientProfile Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "SetClientProfile Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + iClientIconPrefArray.ResetAndDestroy(); + iClientIconPrefArray.Close(); + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileIdSetClientProfileActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid ProfileId SetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Register the client profile with invalid profileId + iSearchDevice->SetClientProfileActionL(KInvalidProfileIdValue, KClientProfileInfo ); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iSetClientProfile) + { + _LIT( KDescription , "SetClientProfile Command with invalid ProfileId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "SetClientProfile Command with invalid ProfileId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileSetClientProfileActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid Profile SetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + _LIT8(KInvalidProfile,"<clientProfile"); + //Register the client profile with invalid profile + iSearchDevice->SetClientProfileActionL(KProfileIdValue, KInvalidProfile()); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iSetClientProfile) + { + _LIT( KDescription , "SetClientProfile Command with invalid Profile handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "SetClientProfile Command with invalid Profile handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleDeviceLockedSetClientProfileActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Device Locked Condition For SetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Register the client profile + iSearchDevice->SetClientProfileActionL(KProfileIdValue, KDeviceLockedClientProfile()); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iSetClientProfile) + { + _LIT( KDescription , "Device Locked Condition for SetClientProfile Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Device Locked Condition for SetClientProfile Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleResourceBusySetClientProfileActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Resource Busy Condition For SetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + iResourceBusy = ETrue; + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Register the client profile + iSearchDevice->SetClientProfileActionL(KProfileIdValue, KClientProfileInfo()); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iSetClientProfile) + { + _LIT( KDescription , "Resource Busy Condition for SetClientProfile Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Resource Busy Condition for SetClientProfile Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetClientProfileActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the tmserver device and its services + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the contents of a client profile stored in the terminal mode device + iSearchDevice->GetClientProfileActionL(KProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetClientProfile) + { + _LIT( KDescription , "GetClientProfile Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetClientProfile Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleInvalidProfileIdGetClientProfileActionL ( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Invalid ProfileId GetClientProfile Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the control point and search for device + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Retrieve the contents of a client profile by specifying invalid profileId + iSearchDevice->GetClientProfileActionL(KInvalidProfileIdValue); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetClientProfile) + { + _LIT( KDescription , "GetClientProfile Command with invalid ProfileId handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetClientProfile Command with invalid ProfileId handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + + +TInt CTmServerTest::HandleGetMaxNumProfilesActionL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle GetMaxNumProfiles Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the control point and search for device + iTmServer->StartL(); + + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Get the maximum number of client profiles supported + iSearchDevice->GetMaxNumProfilesActionL(); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetMaxNumProfiles) + { + _LIT( KDescription , "GetMaxNumProfiles Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "GetMaxNumProfiles Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +TInt CTmServerTest::HandleGetMaxNumProfilesOperationRejectedL( TTestResult& aResult ) + { + _LIT( KLogInfo, "Handle Operation Rejected Condition For GetMaxNumProfiles Command" ); + iLog->Log( KLogInfo ); + + iTmServerDeviceType = ETrue; + + //Sets the information associated with the terminal mode server device + SetTmServerSettingsL(); + iTmServer = CUpnpTmServer::NewL( *iTmServerDeviceInfo, *this ); + + //Register all the desired applications + RegisterApplicationsL(*iTmServer); + + //Start the control point and search for device + iTmServer->StartL(); + iOperationRejected = ETrue; + //Start the control point and search for device + iSearchDevice = CDiscoverDevice::NewL(*this); + iDiscoveryTestTimer = CDiscoveryTestTimer::NewL(*this); + iDiscoveryTestTimer->AfterDiscovery(15); + CActiveScheduler::Start(); + + if ( iDeviceVerified ) + { + //Get the maximum number of client profiles supported + iSearchDevice->GetMaxNumProfilesActionL(); + } + + iTestTimer = CTestTimer::NewL(*this); + iTestTimer->After(15); + CActiveScheduler::Start(); + + if (iGetMaxNumProfiles) + { + _LIT( KDescription , "Operation Rejected Condition For GetMaxNumProfiles Command handled successfully"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + else + { + aResult.iResult = KErrGeneral; + _LIT( KDescription , "Operation Rejected Condition For GetMaxNumProfiles Command handling Failed"); + aResult.SetResult( KErrNone, KDescription ); + iLog->Log( KDescription ); + } + delete iDiscoveryTestTimer; + iDiscoveryTestTimer = NULL; + delete iTestTimer; + iTestTimer = NULL; + REComSession::FinalClose(); + return KErrNone; + } + +// ======================================================================================================== + +void CTmServerTest::SetTmServerSettingsL() + { + iTmServerDeviceInfo = CUpnpTmServerDeviceInfo::NewL(CUpnpSettings::GetIapL()); + iTmServerDeviceInfo->SetDeviceInfoL( KDeviceInfo ); + iTmServerDeviceInfo->SetBtAddressL( KBtMacValue ); + iTmServerDeviceInfo->SetStartConn(ETrue); + iTmServerDeviceInfo->AddDeviceIconL(CUpnpTerminalModeIcon::NewL(KIconDevicePath, KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + } + +void CTmServerTest::RegisterApplicationsL(CUpnpTmServer& aTmServer ) + { + RArray allowedProfileIdList; + allowedProfileIdList.Append(0); + allowedProfileIdList.Append(1); + allowedProfileIdList.Append(2); + allowedProfileIdList.Append(2); + allowedProfileIdList.Append(3); + allowedProfileIdList.Append(4); + allowedProfileIdList.Append(5); + allowedProfileIdList.Append(6); + + _LIT8(KAppDesc, "Mobile Navigation Application"); + iRemotableApp = CUpnpRemotableApp::NewL( KAppIdValue ,_L8("Navigation")); + iRemotableApp->SetAppDescriptionL(KAppDesc()); + iRemotableApp->SetAllowedProfileIdListL(allowedProfileIdList); + CUpnpTmInfoElement& tmInfoElement = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement.AddTmInfoElementL(_L8("protocolID"),_L8("VNC")); + + CUpnpTmInfoElement& tmInfoElement1 = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement1.AddTmInfoElementL(_L8("appCategory"),_L8("0x00010001")); + tmInfoElement1.AddTmInfoElementL(_L8("trustLevel"),_L8("0x80")); + + CUpnpTmInfoElement& tmInfoElement2 = iRemotableApp->CreateTmInfoElementL(CUpnpTmInfoElement::EDisplayInfo); + tmInfoElement2.AddTmInfoElementL(_L8("contentCategory"),_L8("0x0000001")); + tmInfoElement2.AddTmInfoElementL(_L8("contentRules"),_L8("0x00000FE")); + tmInfoElement2.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + iRemotableApp->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMaps, KIconWidth1, KIconHeight1, KIconDepth,KTestSvgMimeType)); + aTmServer.RegisterAppL(iRemotableApp); + allowedProfileIdList.Close(); + + _LIT8(KAppDesc1, "RTP Audio Server"); + iRemotableApp1 = CUpnpRemotableApp::NewL( KAppId1Value ,_L8("RTP Server")); + iRemotableApp1->SetAppDescriptionL(KAppDesc1()); + + CUpnpTmInfoElement& tmInfoElement3 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement3.AddTmInfoElementL(_L8("protocolID"),_L8("RTP")); + tmInfoElement3.AddTmInfoElementL(_L8("format"),_L8("99")); + tmInfoElement3.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement4 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement4.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000002")); + tmInfoElement4.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + CUpnpTmInfoElement& tmInfoElement5 = iRemotableApp1->CreateTmInfoElementL(CUpnpTmInfoElement::EAudioInfo); + tmInfoElement5.AddTmInfoElementL(_L8("audioType"),_L8("all")); + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicUnLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp1->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathMusicLaunched,KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp1->SetResourceStatusL(_L8("free")); + + iRemotableAppArray.AppendL(iRemotableApp1); + + _LIT8(KAppDesc2, "Bluetooth A2DP Audio Server"); + iRemotableApp2 = CUpnpRemotableApp::NewL( KAppId2Value ,_L8("Bluetooth A2DP")); + iRemotableApp2->SetAppDescriptionL(KAppDesc2()); + + CUpnpTmInfoElement& tmInfoElement6 = iRemotableApp2->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement6.AddTmInfoElementL(_L8("protocolID"),_L8("BTA2DP")); + tmInfoElement6.AddTmInfoElementL(_L8("direction"),_L8("out")); + + CUpnpTmInfoElement& tmInfoElement7 = iRemotableApp2->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement7.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000003")); + tmInfoElement7.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + iRemotableApp2->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpUnLaunched, KIconWidth2, KIconHeight2, KIconDepth1,KTestSvgMimeType)); + iRemotableApp2->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtA2DpLaunched,KIconWidth3, KIconHeight3, KIconDepth1,KTestSvgMimeType)); + iRemotableApp2->SetResourceStatusL(_L8("free")); + iRemotableAppArray.AppendL(iRemotableApp2); + + _LIT8(KAppDesc3, "Bluetooth HFP Audio"); + RArray allowedProfileIdList1; + allowedProfileIdList1.Append(0); + iRemotableApp3 = CUpnpRemotableApp::NewL( KAppId3Value,_L8("Bluetooth HFP")); + iRemotableApp3->SetAppDescriptionL(KAppDesc3()); + iRemotableApp3->SetAllowedProfileIdListL(allowedProfileIdList1); + + CUpnpTmInfoElement& tmInfoElement8 = iRemotableApp3->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement8.AddTmInfoElementL(_L8("protocolID"),_L8("BTHFP")); + tmInfoElement8.AddTmInfoElementL(_L8("direction"),_L8("bi")); + + CUpnpTmInfoElement& tmInfoElement9 = iRemotableApp3->CreateTmInfoElementL(CUpnpTmInfoElement::EAppInfo); + tmInfoElement9.AddTmInfoElementL(_L8("appCategory"),_L8("0x0000004")); + tmInfoElement9.AddTmInfoElementL(_L8("trustLevel"),_L8("0x00000001")); + + iRemotableApp3->AddIconL(CUpnpTerminalModeIcon::NewL(KIconPathBtHfp, KIconWidth, KIconHeight, KIconDepth,KTestSvgMimeType)); + iRemotableApp3->SetResourceStatusL(_L8("busy")); + iRemotableAppArray.AppendL(iRemotableApp3); + allowedProfileIdList1.Close(); + + _LIT8(KAppDesc4, "Device Attestation Protocol"); + iRemotableApp4 = CUpnpRemotableApp::NewL( KAppId4Value ,_L8("Device Attestation")); + iRemotableApp4->SetAppDescriptionL(KAppDesc4()); + + CUpnpTmInfoElement& tmInfoElement11 = iRemotableApp4->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement11.AddTmInfoElementL(_L8("protocolID"),_L8("DAP")); + iRemotableAppArray.AppendL(iRemotableApp4); + + iRemotableApp5 = CUpnpRemotableApp::NewL( KAppId5Value ,_L8("Device Attestation")); + iRemotableApp5->SetAppDescriptionL(KAppDesc4()); + + RArray allowedProfileIdList2; + allowedProfileIdList2.Append(1); + allowedProfileIdList2.Append(1); + iRemotableApp5->SetAllowedProfileIdListL(allowedProfileIdList2); + + CUpnpTmInfoElement& tmInfoElement12 = iRemotableApp5->CreateTmInfoElementL(CUpnpTmInfoElement::ERemotingInfo); + tmInfoElement12.AddTmInfoElementL(_L8("protocolID"),_L8("DAP")); + iRemotableAppArray.AppendL(iRemotableApp5); + allowedProfileIdList2.Close(); + + aTmServer.SetXmlSignatureL(KXmlSignature); + aTmServer.RegisterAppsL(iRemotableAppArray); + iRemotableAppArray.Close(); + } + +void CTmServerTest::TestTimerTimedOutL() + { + iTmServer->StopL(); + delete iSearchDevice; + iSearchDevice = NULL; + delete iTmServer; + iTmServer = NULL; + delete iTmServerDeviceInfo; + iTmServerDeviceInfo = NULL; + CActiveScheduler::Stop(); + } + +void CTmServerTest::TestTimerDiscoveryTimedOut() + { + CActiveScheduler::Stop(); + } + +void CTmServerTest::DeviceVerified() + { + iDeviceVerified = ETrue; + } + +void CTmServerTest::DeviceLostVerified() + { + iDeviceLostVerified = ETrue; + } + +void CTmServerTest::ServiceVerified() + { + iServiceVerified = ETrue; + } + +CDiscoverDevice* CDiscoverDevice::NewL(CTmServerTest& aTmServerTest) + { + CDiscoverDevice* self = new (ELeave) CDiscoverDevice(aTmServerTest); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +CDiscoverDevice::CDiscoverDevice(CTmServerTest& aTmServerTest): + iTmServerTest(aTmServerTest) + { + + } + +void CDiscoverDevice::ConstructL() + { + CDesC8ArrayFlat* targetDeviceTypes = new (ELeave) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( targetDeviceTypes ); + targetDeviceTypes->AppendL( KTmServerDevice() ); + CUpnpControlPoint::ConstructL( *targetDeviceTypes ); + CleanupStack::Pop( targetDeviceTypes ); + targetDeviceTypes->Reset(); + delete targetDeviceTypes; + targetDeviceTypes = NULL; + + //SSDP search for Terminalmode server devices + if (iTmServerTest.iTmServerDeviceType) + { + SearchL( KTmServerDevice() ); + } + else if (iTmServerTest.iTmServerServiceType) + { + SearchL( KTmServerService() ); + } + } + +CDiscoverDevice::~CDiscoverDevice() + { + + } + + +void CDiscoverDevice::StateUpdatedL( CUpnpService* aService ) + { + CUpnpDevice& device = aService->Device(); + if (aService->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + TInt err = TmServerStateUpdated( device, aService ); + } + else + { + User::Leave(KErrGeneral); + } + } + +TInt CDiscoverDevice::TmServerStateUpdated( CUpnpDevice& aDevice, + CUpnpService*& aService ) + { + CUpnpStateVariable* appStatusUpdate = aService->StateVariable( KArgTypeAppStatusUpdate ); + if( !appStatusUpdate ) + { + iTmServerTest.iStatusNotified = EFalse; + return KErrArgument; + } + else + { + const TDesC8& deviceUuid = aDevice.Uuid(); + const TDesC8& statusBuf = appStatusUpdate->Value(); + + iTmServerTest.iStatusNotified = ETrue; + } + return KErrNone; + } + +void CDiscoverDevice::DeviceDiscoveredL( CUpnpDevice* aDevice ) + { + if( iTmServerTest.iTmServerDeviceType) + { + if(aDevice->DeviceType().Compare(KTmServerDevice) == KErrNone ) + { + iTmServerTest.DeviceVerified(); + } + } + else if( iTmServerTest.iTmServerServiceType) + { + if(aDevice->ServiceDescriptionReceiveState()== CUpnpDevice::EAllServicesAdded) + { + iTmServerTest.ServiceVerified(); + } + } + } + +void CDiscoverDevice::DeviceDisappearedL( CUpnpDevice* /*aDevice */) + { + iTmServerTest.DeviceLostVerified(); + } + +void CDiscoverDevice::ActionResponseReceivedL( CUpnpAction* aAction ) + { + CUpnpService& service = aAction->Service(); + if( service.ServiceType().Length() <= 0 ) + { + User::Leave(KErrArgument); + } + if (aAction->Name().Compare(KGetApplicationList) == KErrNone) + { + aAction->ArgumentValue( KAppListing ); + iTmServerTest.iGetAppList = ETrue; + } + else if (aAction->Name().Compare(KLaunchApp) == KErrNone) + { + aAction->ArgumentValue( KAppLaunchStatus ); + iTmServerTest.iStartApp = ETrue; + } + else if (aAction->Name().Compare(KTerminateApp) == KErrNone) + { + aAction->ArgumentValue( KAppTerminateStatus ); + iTmServerTest.iStopApp = ETrue; + } + else if (aAction->Name().Compare(KGetAppStatus) == KErrNone) + { + aAction->ArgumentValue( KAppStatus ); + iTmServerTest.iGetAppStatus = ETrue; + } + else if (aAction->Name().Compare(KSetClientProfile) == KErrNone) + { + aAction->ArgumentValue( KResultProfile ); + iTmServerTest.iSetClientProfile = ETrue; + } + else if (aAction->Name().Compare(KGetClientProfile) == KErrNone) + { + aAction->ArgumentValue( KClientProfile ); + iTmServerTest.iGetClientProfile = ETrue; + } + else if (aAction->Name().Compare(KGetMaxNumProfiles) == KErrNone) + { + aAction->ArgumentValue( KNumProfilesAllowed ); + iTmServerTest.iGetMaxNumProfiles = ETrue; + } + } + + void CDiscoverDevice::HttpResponseReceivedL( CUpnpHttpMessage* /*aMessage*/ ) + { + + } + + +TInt CDiscoverDevice::GetAppListActionL( const TDesC8& aAppListFilter ,TInt aProfileId ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KGetApplicationList ); + if( action ) + { + TBuf8<8> buf; + buf.Num(aProfileId); + action->SetArgumentL(KAppFilter, aAppListFilter ); + action->SetArgumentL(KProfileId, buf ); + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + } + return KErrNotFound; + } + + + +TInt CDiscoverDevice::LaunchAppActionL( TInt aAppId, TInt aProfileId ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KLaunchApp ); + if( action ) + { + TBuf8<8> buf; + buf.Num(aAppId); + action->SetArgumentL( KAppId, buf ); + buf.Zero(); + buf.Num(aProfileId); + action->SetArgumentL( KProfileId, buf ); + } + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + return KErrNotFound; + } + +TInt CDiscoverDevice::TerminateAppActionL( TInt aAppId, TInt aProfileId ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KTerminateApp ); + if( action ) + { + TBuf8<8> buf; + buf.Num(aAppId); + action->SetArgumentL( KAppId, buf ); + buf.Zero(); + buf.Num(aProfileId); + action->SetArgumentL( KProfileId, buf ); + } + + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + return KErrNotFound; + } + +TInt CDiscoverDevice::GetAppStatusActionL( TInt aAppId ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KGetAppStatus ); + if( action ) + { + TBuf8<8> buf; + buf.Num(aAppId); + if ( aAppId == KAppId1Value || aAppId == KNonExistentAppIdValue ) + { + action->SetArgumentL( KAppId, buf ); + } + else if( aAppId == KAppId5Value ) + { + _LIT8(KWildCard, "*"); + action->SetArgumentL( KAppId, KWildCard()); + } + else + { + action->SetArgumentL( KAppId, KNullDesC8()); + } + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + } + return KErrNotFound; + } + +TInt CDiscoverDevice::SetClientProfileActionL(TInt aProfileId, const TDesC8& aClientInfoValue ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType1 ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KSetClientProfile); + if( action ) + { + TBuf8<8> buf; + buf.Num(aProfileId); + action->SetArgumentL(KProfileId1, buf ); + action->SetArgumentL(KClientProfile, aClientInfoValue ); + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + } + return KErrNotFound; + } + +TInt CDiscoverDevice::GetClientProfileActionL(TInt aProfileId ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType1 ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KGetClientProfile); + if( action ) + { + TBuf8<8> buf; + buf.Num(aProfileId); + action->SetArgumentL(KProfileId1, buf ); + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + } + return KErrNotFound; + } + +TInt CDiscoverDevice::GetMaxNumProfilesActionL( ) + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + return KErrBadHandle; + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + return KErrNotFound; + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType1 ) != KErrNotFound ) + { + CUpnpAction* action = services[i]->CreateActionLC( KGetMaxNumProfiles); + if( action ) + { + SendL( action ); + CleanupStack::Pop( action ); + return action->SessionId(); + } + else + { + return KErrGeneral; + } + } + } + return KErrNotFound; + } + +void CDiscoverDevice::SubscribeToServiceL() + { + const RPointerArray& deviceList = DeviceList(); + if( deviceList.Count() == KErrNone ) + { + User::Leave( KErrBadHandle ); + } + TInt i(0); + while ( deviceList[i]->DeviceType().Compare(KTmServerDevice()) != KErrNone ) + { + i++; + } + if( i == deviceList.Count()) + { + User::Leave ( KErrNotFound ); + } + RPointerArray& services = const_cast(deviceList[i])->ServiceList(); + + for( TInt i(0); i < services.Count(); i++ ) + { + if( services[i]->ServiceType().Match( KTmServerServiceType ) != KErrNotFound ) + { + SubscribeL( services[i] ); + } + } + } + +TTerminalModeErrorCode CTmServerTest::OnGetApplicationList(TUint aProfileId ) + { + if(iOperationRejected ) + { + return ETerminalModeOperationRejected; + } + else if ( ( aProfileId == 0 ) || ( aProfileId == 1 ) || ( aProfileId == 2) || ( aProfileId == 3 ) + || ( aProfileId == 4 ) || ( aProfileId == 5 ) || ( aProfileId == 6 ) ) + { + return ETerminalModeSuccess; + } + return ETerminalModeInvalidProfileId; + } + +TTerminalModeErrorCode CTmServerTest::OnLaunchApp( TUint aAppId, RBuf8& aUrl, TUint aProfileId ) + { + if ( ( aProfileId != 0 ) && ( aProfileId != 1 ) && ( aProfileId != 2) && ( aProfileId != 3 ) + && ( aProfileId != 4 ) && ( aProfileId != 5 ) && ( aProfileId != 6 ) ) + { + return ETerminalModeInvalidProfileId; + } + aUrl.Close(); + if ( aAppId == KAppIdValue ) + { + _LIT8(KUrl, "VNC://192.168.4.1:5900"); + aUrl.Create(KUrl()); + } + else if ( aAppId == KAppId1Value ) + { + _LIT8(KUrl, "RTP://192.168.2.1:5900"); + aUrl.Create(KUrl()); + } + else if ( aAppId == KAppId2Value ) + { + _LIT8(KUrl, "BTA2DP://192.168.2.1:5900"); + aUrl.Create(KUrl()); + } + else if ( aAppId == KAppId3Value) + { + _LIT8(KUrl, "BTHFP://192.168.2.1:5900"); + aUrl.Create(KUrl()); + } + else if ( aAppId == KAppId4Value) + { + return ETerminalModeDeviceLocked; + } + else + { + return ETerminalModeUnauthorizedApp; + } + return ETerminalModeSuccess; + } + +TTerminalModeErrorCode CTmServerTest::OnTerminateApp( TUint aAppId, TUint aProfileId ) + { + if ( ( aProfileId != 0 ) && ( aProfileId != 1 ) && ( aProfileId != 2) && ( aProfileId != 3 ) + && ( aProfileId != 4 ) && ( aProfileId != 5 ) && ( aProfileId != 6 ) ) + { + return ETerminalModeInvalidProfileId; + } + if ( aAppId == KAppIdValue|| aAppId == KAppId1Value || aAppId == KAppId2Value || aAppId == KAppId3Value) + { + return ETerminalModeSuccess; + } + else if ( aAppId == KAppId4Value) + { + return ETerminalModeDeviceLocked; + } + else + { + return ETerminalModeUnauthorizedApp; + } + } + +TTerminalModeErrorCode CTmServerTest::OnGetAppStatus( TUint aAppId, TUint& aProfileId ,RBuf8& aStatusType ) + { + aProfileId = KErrNone; + aStatusType.Close(); + if ( aAppId == KAppIdValue ) + { + aStatusType.Create(KBackground()); + } + else if ( aAppId == KAppId1Value ) + { + aStatusType.Create(KForeground()); + } + else if ( aAppId == KAppId2Value ) + { + aStatusType.Create(KBackground()); + } + else if ( aAppId == KAppId3Value ) + { + aStatusType.Create(KForeground()); + } + else + { + aStatusType.Create(KBackground()); + } + return ETerminalModeSuccess; + } + +TTerminalModeErrorCode CTmServerTest::OnGetMaxNumProfiles( TUint& aProfileIdCount ) + { + if (iOperationRejected ) + { + return ETerminalModeOperationRejected; + } + else + { + aProfileIdCount = 9; + return ETerminalModeSuccess; + } + } + +TTerminalModeErrorCode CTmServerTest::OnSetClientProfile(TUint aProfileId, const TDesC8& aClientProfile,RBuf8& aResultProfile ) + { + _LIT8(KClientInfo,"Cl_2"); + if(iResourceBusy) + { + return ETerminalModeResourceBusy; + } + else if(aClientProfile.Compare(KClientInfo()) == KErrNone ) + { + return ETerminalModeDeviceLocked; + } + else if ( ( aClientProfile.Find(_L8("<")) == KErrNotFound ) && + ( aClientProfile.Find(_L8("<clientProfile><")) == KErrNotFound )) + { + return ETerminalModeInvalidProfile; + } + CUpnpTmClientIconPref* clientIconPref = NULL; + if ( aProfileId == 0 ) + { + // different mime type but same dimension + clientIconPref = CUpnpTmClientIconPref::NewL(0); + clientIconPref->SetWidth(88); + clientIconPref->SetHeight(88); + } + else if ( aProfileId == 1 ) + { + // different mime type and different dimension + clientIconPref = CUpnpTmClientIconPref::NewL(1); + clientIconPref->SetMimeTypeL(_L8("image/bmp")); + clientIconPref->SetWidth(70); + clientIconPref->SetHeight(80); + } + else if ( aProfileId == 2 ) + { + // different mime type and no dimension specified by the client + clientIconPref = CUpnpTmClientIconPref::NewL(2); + clientIconPref->SetMimeTypeL(_L8("image/bmp")); + } + else if ( aProfileId == 3 ) + { + // same mime type but different dimension + clientIconPref = CUpnpTmClientIconPref::NewL(3); + clientIconPref->SetMimeTypeL(_L8("image/svg+xml")); + clientIconPref->SetWidth(100); + clientIconPref->SetHeight(100); + } + else if ( aProfileId == 4 ) + { + // same mime type but no dimension specified by the client + clientIconPref = CUpnpTmClientIconPref::NewL(4); + clientIconPref->SetMimeTypeL(_L8("image/svg+xml")); + } + else if ( aProfileId == 5 ) + { + // same mime type and same dimension + clientIconPref = CUpnpTmClientIconPref::NewL(5); + clientIconPref->SetMimeTypeL(_L8("image/svg+xml")); + clientIconPref->SetWidth(88); + clientIconPref->SetHeight(88); + } + else if ( aProfileId == 6 ) + { + // different mime type(jpeg) and different dimensions + clientIconPref = CUpnpTmClientIconPref::NewL(6); + clientIconPref->SetMimeTypeL(_L8("image/jpeg")); + clientIconPref->SetWidth(36); + clientIconPref->SetHeight(44); + } + else + { + return ETerminalModeInvalidProfileId; + } + iClientIconPrefArray.AppendL(clientIconPref); + RBuf8 clientProfile; + clientProfile.Create(aClientProfile); + aResultProfile.Close(); + aResultProfile.Create(clientProfile); + clientProfile.Close(); + return ETerminalModeSuccess; + } + +TTerminalModeErrorCode CTmServerTest::OnGetClientProfile( TUint aProfileId, RBuf8& aClientProfile) + { + if ( ( aProfileId == 0 ) || ( aProfileId == 1 ) || ( aProfileId == 2) || ( aProfileId == 3 ) + || ( aProfileId == 4 ) || ( aProfileId == 5 ) || ( aProfileId == 6 ) ) + { + aClientProfile.Close(); + aClientProfile.Create(KClientProfile()); + return ETerminalModeSuccess; + } + return ETerminalModeInvalidProfileId; + } + +const CUpnpTmClientIconPref& CTmServerTest::GetClientIconPrefsL( TUint aProfileId ) + { + CUpnpTmClientIconPref* clientIconPref = NULL; + for ( TInt i(0); i < iClientIconPrefArray.Count(); i++ ) + { + if ( iClientIconPrefArray[i]->ClientProfileId() == aProfileId ) + { + clientIconPref = iClientIconPrefArray[i]; + break; + } + } + return *clientIconPref; + } + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/group/bld.inf Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,37 @@ +/** +* Copyright (c) 2010 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: This file provides the information required for exporting +* domain headers to system inlcude path. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/upnptmserver.h MW_LAYER_PLATFORM_EXPORT_PATH( upnptmserver.h ) +../inc/upnptmserverobserver.h MW_LAYER_PLATFORM_EXPORT_PATH( upnptmserverobserver.h ) +../inc/upnpremotableapp.h MW_LAYER_PLATFORM_EXPORT_PATH( upnpremotableapp.h ) +../inc/upnpremotableapp.inl MW_LAYER_PLATFORM_EXPORT_PATH( upnpremotableapp.inl ) +../inc/upnptminfoelement.h MW_LAYER_PLATFORM_EXPORT_PATH( upnptminfoelement.h ) +../inc/upnptminfoelement.inl MW_LAYER_PLATFORM_EXPORT_PATH( upnptminfoelement.inl ) +../inc/upnptmserverdeviceinfo.h MW_LAYER_PLATFORM_EXPORT_PATH( upnptmserverdeviceinfo.h ) +../inc/upnptmserverdeviceinfo.inl MW_LAYER_PLATFORM_EXPORT_PATH( upnptmserverdeviceinfo.inl ) +../inc/upnpterminalmodeicon.h MW_LAYER_PLATFORM_EXPORT_PATH( upnpterminalmodeicon.h ) +../inc/upnpterminalmodeicon.inl MW_LAYER_PLATFORM_EXPORT_PATH( upnpterminalmodeicon.inl ) +../inc/terminalmodeconsts.h MW_LAYER_PLATFORM_EXPORT_PATH( terminalmodeconsts.h ) +../inc/upnptmclienticonpref.h MW_LAYER_PLATFORM_EXPORT_PATH( upnptmclienticonpref.h ) +../inc/upnptmclienticonpref.inl MW_LAYER_PLATFORM_EXPORT_PATH( upnptmclienticonpref.inl ) diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/terminalmodeconsts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/terminalmodeconsts.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,119 @@ +/** +* Copyright (c) 2010 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: Class defines all the error codes related to Terminal Mode Service +* +*/ + +#ifndef __TERMINALMODECONSTS_H__ +#define __TERMINALMODECONSTS_H__ + +/** + * Error codes for Terminal Mode extention + * These error codes are located in the non-standard error code range + * (800 – 899). + */ +enum TTerminalModeErrorCode + { + /** + * Terminal Mode success error code. + * Represents the no-error condition. + */ + ETerminalModeSuccess = 200, + + /** + * Terminal Mode failure error code. + * Represents the error condition. + */ + ETerminalModeFailure = 201, + + /** + *Terminal Mode error range marker. + */ + ETerminalModeErrorRangeBegin = 700, + + /** + * Operation Rejected. + * Terminal Mode Server rejected the operation. + */ + ETerminalModeOperationRejected = 701, + + /** + * Malformed or Non-existent AppID. + * The AppID is of incorrect format or does not exist. + */ + ETerminalModeBadAppId = 810, + + /** + * Unauthorized AppID. + * The application identified by this AppID cannot be used remotely. + */ + ETerminalModeUnauthorizedApp = 811, + + /** + * Cannot determine application status. + * The status of the application cannot be cur-rently determined. + * Client should try again later. + */ + ETerminalModeAppStatusError = 812, + + /** + * Failed to launch application. + * The application is available on the mobile device but failed + * to launch. + */ + ETerminalModeAppLaunchError = 813, + + /** + * The requested application resource is busy. + * This error can occur when the resource is already busy and + * resourceStatus in the AppListing is set equal to “NA”. + */ + ETerminalModeResourceBusy = 814, + + + /** + * Failed to process the action as the device hosting the TmApplicationServer + * service is locked + */ + ETerminalModeDeviceLocked = 815, + + /** + * Failed to process the action as the input argument passed is invalid + */ + ETerminalModeInvalidArgument = 820, + + /** + * The clientProfile argument passed does not conform to A_ARG_TYPE_ClientProfile + * XML specifications. + */ + ETerminalModeInvalidProfile = 825, + + /** + * Failed to process the action as the the profile identifier does not exist + * or the application cannot use the specified profile identifier. + */ + ETerminalModeInvalidProfileId = 830, + + /** + * Invalid license.The HU does not have valid license or has not started license + * verification process for the service. + */ + ETerminalModeInvalidLicense = 891, + /** + * Terminal Mode error range marker. + */ + ETerminalModeErrorRangeEnd = 899 + }; + +#endif // __TERMINALMODECONSTS_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnpremotableapp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnpremotableapp.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,130 @@ +/** +* Copyright (c) 2010 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: CUpnpRemotableApp class declaration +* +*/ + +#ifndef __UPNPREMOTABLEAPP_H__ +#define __UPNPREMOTABLEAPP_H__ + +#include +#include +#include + +/** +* Class represents a Remotable App or just "app" in the +* context of Terminal Mode Service. +* The Automotive Server (or equivalent) is responsible for creating an object +* of this class and registering it with the Terminal Mode Service. +* The Terminal Mode Service will maintain a list of these registered apps throughout +* it's lifetime. The Automotive Server can remove apps from this list by +* unregistering them. +*/ +class CUpnpRemotableApp : public CBase + { +public: + /** + * Standard Symbian Two-Phase constructor + * @param aAppId The locally unique ID of the App being registered. + * The Terminal Mode Service will check for the uniqueness + * of this ID when this Remotable app object is registered. + * @param aAppName The Name of the App being registered. The Terminal Mode + * Service will *not* check for uniqueness. However, it's + * recommended that this is unique as well. + * @see CUpnpTmServer::RegisterAppL, CUpnpTmServer::RegisterAppsL + */ + IMPORT_C static CUpnpRemotableApp* NewL( TUint aAppId ,const TDesC8& aAppName ); + + ~CUpnpRemotableApp(); + /** + * Method that sets the brief description about the application( remotable app ) + * An optional element. + * @param aDescription Description of the Application + */ + IMPORT_C void SetAppDescriptionL( const TDesC8& aDescription ); + /** + * Method to set the list of allowed profile IDs associated with the remotable app. + * An optional element. + * @aProfileIdList Reference to an array of profile IDs. + * A copy of array is maintained. + */ + IMPORT_C void SetAllowedProfileIdListL( const RArray& aProfileIdList ); + /** + * Method that adds a new icon to this Remotable App. + * An optional element. + * @param aIcon [in] The Icon object. Must be instantiated by the caller prior to + * this call. Should be non-NULL. + * The ownership is transferred to the CUpnpRemotableApp object. + * @see CUpnpTerminalModeIcon + */ + IMPORT_C void AddIconL( CUpnpTerminalModeIcon* aIcon ); + /** + * Method that creates a new terminal mode info object and adds it to the list of + * terminal mode info objects supported by this app. The terminal mode info object thus + * created will be internally maintained by Remotable App object.A reference of the same + * will be returned to the caller. + * Only protocolID of the remotingInfo element is the required element as per the schema, + * otherwise all other info types and their elements are optional. + * @param aTerminalModeInfoType Terminal Mode Info Type as an Enum value. + * @see CUpnpTerminalModeInfoElement + */ + IMPORT_C CUpnpTmInfoElement& CreateTmInfoElementL( CUpnpTmInfoElement + ::TTerminalModeInfoType aTerminalModeInfoType ); + /** + * Method is used to define the current status of the resource. + * An optional element. + * @param aResourceStatus Status of the resource. Can take one of these values; + * Free, busy or NA + */ + IMPORT_C void SetResourceStatusL( const TDesC8& aResourceStatus ); + /** + * "Getter" method for retrieving the list of icons associated with this + * Remotable app object.An optional element. + * @return Returns RPointerArray of icons. + * @see CUpnpTerminalModeIcon + */ + inline const RPointerArray& IconList()const; + /** + * "Getter" Method for retrieving the list of terminal mode info details associated with + * this Remotable app object. + * @return Returns RPointerArray of terminal mode info objects. + * @see CUpnpTerminalModeInfo + */ + inline const RPointerArray& TmInfoElementList()const; + + // inlined "Getter" methods + inline TUint AppId()const; + inline const TDesC8& AppName()const; + inline const TDesC8& AppDescription()const; + inline const TDesC8& ResourceStatus()const; + inline const RArray& AllowedProfileIdList()const; + +protected: + CUpnpRemotableApp( TUint aAppId ); + void ConstructL( const TDesC8& aAppName ); + +private: + TUint iAppId; + RBuf8 iAppName; + RBuf8 iAppDescription; + RBuf8 iResourceStatus; + RPointerArray iIconList; + RPointerArray iTmInfoElementList; + RArray iProfileIdList; + }; + +#include + +#endif //__UPNPREMOTABLEAPP_H__ + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnpremotableapp.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnpremotableapp.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,98 @@ +/** +* Copyright (c) 2010 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 __UPNPREMOTABLEAPP_INL__ +#define __UPNPREMOTABLEAPP_INL__ + + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::IconList +// Method is used to retreive icon list. +// @return Returns reference to the list of CUpnpTerminalModeIcon objects +// --------------------------------------------------------------------------------- +// +inline const RPointerArray& CUpnpRemotableApp::IconList()const + { + return iIconList; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::TmInfoElementList +// Method is used to retrieve terminal mode info list +// @return Returns reference to an array of CUpnpTmInfoElement objects +// --------------------------------------------------------------------------------- +// +inline const RPointerArray& CUpnpRemotableApp::TmInfoElementList()const + { + return iTmInfoElementList; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::AppId +// Method is used to retrieve application ID. +// @return Returns appID. +// --------------------------------------------------------------------------------- +// +inline TUint CUpnpRemotableApp::AppId()const + { + return iAppId; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::AppName +// Method is used to retrieve applicationName. +// @return Returns application name. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpRemotableApp::AppName()const + { + return iAppName; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::AppDescription +// Method is used to retrieve brief description of the application. +// @return Returns application description. +// --------------------------------------------------------------------------------- +inline const TDesC8& CUpnpRemotableApp::AppDescription()const + { + return iAppDescription; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::ResourceStatus +// Method is used to retrieve current sttaus of the resource. +// @return Returns the resource status of the application. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpRemotableApp::ResourceStatus()const + { + return iResourceStatus; + } + +// --------------------------------------------------------------------------------- +// CUpnpRemotableApp::AllowedProfileIdList +// Method is used to retrieve list of allowed profile IDs for the application. +// @return Returns the reference to the array of profile IDs. +// --------------------------------------------------------------------------------- +// +inline const RArray& CUpnpRemotableApp::AllowedProfileIdList()const + { + return iProfileIdList; + } + +#endif //__UPNPREMOTABLEAPP_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnpterminalmodeicon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnpterminalmodeicon.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,105 @@ +/** +* Copyright (c) 2010 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: CUpnpTerminalModeIcon class declaration +* +*/ + +#ifndef __UPNPTERMINALMODEICON_H__ +#define __UPNPTERMINALMODEICON_H__ + +#include + +// CLASS DECLARATION +/** +* This class encapsulates an icon used in any operation of the +* Terminal Mode Service implemented. +* This represents device and application icons (as provided by Automotive Server). +*/ +class CUpnpTerminalModeIcon : public CBase + { +public: + /** + * Standard Symbian Two-Phase constructor. Returns a pointer to the new element. + * @param aPath icon path + * @param aWidth icon width + * @param aHeight icon height + * @param aDepth icon depth + * @param aMimeType icon mime type + */ + IMPORT_C static CUpnpTerminalModeIcon* NewL(const TDesC16& aPath, const TInt aWidth, + const TInt aHeight,const TInt aDepth, const TDesC8& aMimeType ); + /** + * Destructor. + */ + ~CUpnpTerminalModeIcon(); + +public: + /** + * Returns the icon filename + * @return Returns the icon filename along with complete filepath. + */ + inline const TDesC& IconFilename()const; + + /** + * Returns the width of the icon. + * @return Returns width in pixels or KErrNotFound + */ + inline TInt Width()const; + + /** + * Returns the height of the icon. + * @return Returns height in pixels or KErrNotFound + */ + inline TInt Height()const; + + /** + * Returns the color depth of the icon. + * @return Returns icon depth or KErrNotFound + */ + inline TInt Depth()const; + + /** + * Returns the mime type. + * @return Returns Icon mime type + */ + inline const TDesC8& MimeType()const; + +private: + /** + * C++ default constructor. + * @param aWidth icon width + * @param aHeight icon height + * @param aDepth icon depth + */ + CUpnpTerminalModeIcon( const TInt aWidth,const TInt aHeight,const TInt aDepth ); + /** + * 2nd phase constructor + * @param aPath icon path + * @param aMimeType icon mime type + */ + void ConstructL( const TDesC16& aPath,const TDesC8& aMimeType ); + +private: + HBufC* iFilename; + TInt iIconWidth; + TInt iIconHeight; + TInt iIconDepth; + HBufC8* iIconMimeType; + }; + +#include + +#endif //__UPNPTERMINALMODEICON_H__ + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnpterminalmodeicon.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnpterminalmodeicon.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,80 @@ +/** +* Copyright (c) 2010 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: CUpnpTerminalModeIcon INL file +* +*/ + +#ifndef __UPNTERMINALMODEICON_INL__ +#define __UPNTERMINALMODEICON_INL__ + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::IconFilename +// Returns the icon filename along with the complete filepath. +// --------------------------------------------------------------------------------- +// +inline const TDesC& CUpnpTerminalModeIcon::IconFilename()const + { + if ( iFilename ) + { + return *iFilename; + } + return KNullDesC(); + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::Width +// Returns the width of the icon. +// --------------------------------------------------------------------------------- +// +inline TInt CUpnpTerminalModeIcon::Width()const + { + return iIconWidth; + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::Height +// Returns the height of the icon. +// --------------------------------------------------------------------------------- +// +inline TInt CUpnpTerminalModeIcon::Height()const + { + return iIconHeight; + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::Depth +// Returns the depth of the icon. +// ------------------------------------------------------------------------------------- +// +inline TInt CUpnpTerminalModeIcon::Depth()const + { + return iIconDepth; + } + +// --------------------------------------------------------------------------------- +// CUpnpTerminalModeIcon::MimeType +// Returns the mime type of the icon. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTerminalModeIcon::MimeType()const + { + if ( iIconMimeType ) + { + return *iIconMimeType; + } + return KNullDesC8(); + } + + +#endif //__UPNTERMINALMODEICON_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmclienticonpref.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmclienticonpref.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,119 @@ +/** +* Copyright (c) 2010 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: CUpnpTmClientIconPref class declaration. +* +*/ + +#ifndef __UPNPTMCLIENTICONPREF_H__ +#define __UPNPTMCLIENTICONPREF_H__ + +#include + +const TUint KDefaultDepthValue = 24; + +// CLASS DECLARATION +/** + * The class specifies the icon preferences corresponding to each Client + * Profile.It describes the mime type and the dimensions that client adhering to + * a particular profile supports. AutomotiveServer sets the icon preferences and + * sends the same to TM Service when requested. + */ +class CUpnpTmClientIconPref: public CBase + { +public: + /** + * Two-phased constructor. returns a pointer to the new element. + * @param aProfileId Client profile ID + * @param aWidth icon width + * @param aHeight icon height + * @param aDepth icon depth + * @param aMimeType icon mime type + */ + IMPORT_C static CUpnpTmClientIconPref* NewL( TUint aProfileId ); + /** + * Destructor. + */ + ~CUpnpTmClientIconPref(); + +public: + // inlined "setter" and "getter" methods + /** + * Returns the profileID. + * @return Returns the profileID of the client profile. + */ + inline TUint ClientProfileId()const; + /** + * Returns the mime type. + * @return Returns icon mime type + */ + inline const TDesC8& MimeType()const; + /** + * Returns the width of the icon. + * @return Returns width in pixels or KErrNotFound + */ + inline TInt Width()const; + /** + * Returns the height of the icon. + * @return Returns height in pixels or KErrNotFound + */ + inline TInt Height()const; + /** + * Returns the color depth of the icon. + * @return Returns icon depth or KErrNotFound + */ + inline TInt Depth()const; + /** + * Method is used to provide the preferred mime type of the client. + * @param aMimeType icon mime type + */ + IMPORT_C void SetMimeTypeL( const TDesC8& aMimeType ); + /** + * Sets icon width + * @param aWidth icon width + */ + inline void SetWidth( const TInt aWidth ); + /** + * Sets icon height + * @param aHeight icon height + */ + inline void SetHeight( const TInt aHeight ); + /** + * Sets icon depth + * @param aDepth icon depth + */ + inline void SetDepth( const TInt aDepth ); + +private: + /** + * C++ default constructor. + */ + CUpnpTmClientIconPref( TUint aProfileId ); + /** + * 2nd phase constructor + */ + void ConstructL( ); + +private: // Data + TUint iClientProfileId; + HBufC8* iIconMimeType; + TInt iIconWidth; + TInt iIconHeight; + TInt iIconDepth; + }; + +#include + +#endif //__UPNPTMCLIENTICONPREF_H__ + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmclienticonpref.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmclienticonpref.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,105 @@ +/** +* Copyright (c) 2010 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: CUpnpTmClientIconPref INL file +* +*/ + +#ifndef __UPNPTMCLIENTICONPREF_INL__ +#define __UPNPTMCLIENTICONPREF_INL__ + + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::ClientProfileId +// Returns the profileID of the client profile. +// --------------------------------------------------------------------------------- +// +inline TUint CUpnpTmClientIconPref::ClientProfileId()const + { + return iClientProfileId; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::MimeType +// Returns the mime type of the icon. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTmClientIconPref::MimeType()const + { + return *iIconMimeType; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::Width +// Returns the width of the icon. +// --------------------------------------------------------------------------------- +// +inline TInt CUpnpTmClientIconPref::Width()const + { + return iIconWidth; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::Height +// Returns the height of the icon. +// --------------------------------------------------------------------------------- +// +inline TInt CUpnpTmClientIconPref::Height()const + { + return iIconHeight; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::Depth +// Returns the depth of the icon. +// ------------------------------------------------------------------------------------- +// +inline TInt CUpnpTmClientIconPref::Depth()const + { + return iIconDepth; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::SetWidthL +// Method is used to set the width of the icon which TM client supports +// @param aWidth Width of the icon +// --------------------------------------------------------------------------------- +// +inline void CUpnpTmClientIconPref::SetWidth( TInt aWidth ) + { + iIconWidth = aWidth; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::SetHeightL +// Method is used to set the height of the icon which TM client supports +// @param aHeight Height of the icon +// --------------------------------------------------------------------------------- +// +inline void CUpnpTmClientIconPref::SetHeight( TInt aHeight ) + { + iIconHeight = aHeight; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmClientIconPref::SetDepthL +// Method is used to set the color depth of the icon which TM client supports +// @param aDepth Color depth of the icon +// --------------------------------------------------------------------------------- +// +inline void CUpnpTmClientIconPref::SetDepth( TInt aDepth ) + { + iIconDepth = aDepth; + } + +#endif //__UPNPTMCLIENTICONPREF_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptminfoelement.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptminfoelement.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,75 @@ +/** +* Copyright (c) 2010 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: CUpnpTmInfoElement class declaration +* +*/ + +#ifndef __UPNPTMINFOELEMENT_H__ +#define __UPNPTMINFOELEMENT_H__ + +#include +#include + +//Literals +_LIT8(KRemotingInfo, "remotingInfo" ); +_LIT8(KAppInfo, "appInfo" ); +_LIT8(KDisplayInfo, "displayInfo" ); +_LIT8(KAudioInfo, "audioInfo" ); + +/** + * Class represents the list of key-value pairs for each terminal mode info type. + * Used by the AutomotiveServer to provide name-value pairs for the associated application + */ +class CUpnpTmInfoElement : public CBase + { +public: + enum TTerminalModeInfoType + { + ERemotingInfo, + EAppInfo, + EDisplayInfo, + EAudioInfo + }; + /** + * Standard Symbian Two-phased constructor. + */ + static CUpnpTmInfoElement* NewL( TTerminalModeInfoType aTerminalModeInfoType ); + // Destructor + ~CUpnpTmInfoElement(); + /** + * Method is used to set terminal mode info key-value pair + */ + IMPORT_C void AddTmInfoElementL( const TDesC8& aName,const TDesC8& aValue ); + // Unexported getter method + void GetTmInfoElementL( RBuf8& aInfoElementName, + RBuf8& aInfoElementValue, TInt aIndex )const; + // inlined getter methods + inline const TDesC8& TerminalModeInfoType( )const; + inline TInt TmInfoElementCount()const; + +private: + CUpnpTmInfoElement(); + void ConstructL( TTerminalModeInfoType aTerminalModeInfoType ); + +private: + HBufC8* iInfoTypeBuffer; + RArray iInfoElementNameArray; + RArray iInfoElementValueArray; + RBuf8 iElementName; + RBuf8 iElementValue; + }; + +#include + +#endif //__UPNPTMINFOELEMENT_H__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptminfoelement.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptminfoelement.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,42 @@ +/** +* Copyright (c) 2010 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 __UPNPTMINFOELEMENT_INL__ +#define __UPNPTMINFOELEMENT_INL__ + + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::TerminalModeInfoType +// Method is used to retrieve terminal mode info type +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTmInfoElement::TerminalModeInfoType( )const + { + return *iInfoTypeBuffer; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmInfoElement::TmInfoElementCount +// Method is used to retrieve the number of key-value pairs for each info type +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmInfoElement::TmInfoElementCount()const + { + return iInfoElementNameArray.Count(); + } + +#endif //__UPNPTMINFOELEMENT_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmserver.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,159 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServer class declaration +* +*/ + +#ifndef __UPNPTMSERVER_H__ +#define __UPNPTMSERVER_H__ + +// Include Files +#include // CBase +#include +#include +#include + +//Forward Declaration +class CUpnpTmServerImpl; + + +/** + * The Main interface for the Terminal Mode Service. + * The client of this class (Automotive Server or equivalent) is responsible + * for registering/unregistering the remotable apps and updating the status + * of the running apps. + * The client should also "start" and "stop" the service through the API + * provided in this class + */ +class CUpnpTmServer: public CBase + { +public: + /** + * Standard Symbian Two-phased constructor. + * @param aDeviceInfo The IAP and device Settings that the + * Terminal Mode Service needs to operate. + * A valid IAP ID is mandatory. + * @param aUpnpTmServerObserver The callback interface that the client + * application must implement. + */ + IMPORT_C static CUpnpTmServer* NewL( CUpnpTmServerDeviceInfo& aDeviceInfo, + MUpnpTmServerObserver& aUpnpTmServerObserver ); + ~CUpnpTmServer(); + +public: + /** + * Method to register a single App (aka Remotable App ). + * The caller must create a CUpnpRemotableApp object and + * populate it before calling this method. + * @param aRemotableApp A pointer to a Remotable App object. + * "Ownership" of the object is passed. + * Must not be NULL. + */ + IMPORT_C void RegisterAppL( CUpnpRemotableApp* aRemotableApp ); + /** + * Method to register a list of Apps (aka Remotable Apps). + * The caller must create all the CUpnpRemotableApp objects + * and populate them before calling this method. + * This list of apps will be appended to existing list of + * registered apps. + * @param aRemotableAppList A RPointerArray of Remotable App objects. + * "Ownership" of all the objects is passed. + * None of the objects must be NULL. + */ + IMPORT_C void RegisterAppsL( const RPointerArray& aRemotableAppList ); + /** + * Method to unregister a single App from the service. + * The specified App must be registered with the + * Terminal Mode Service. + * @param aAppId The ID of the app to be unregistered + */ + IMPORT_C TInt UnRegisterApp( TUint aAppId ); + /** + * Method to unregister multiple Apps from the service. + * The specified Apps must be registered with the + * Terminal Mode Service. + * In case of duplicate appIDs ,TM service will sort out the duplicate ones + * and will unregister only once for a particular appID. + * Even if a single app from the requested array is unable to get + * un-registered the method should return KErrNotFound. + * @param aAppIdArray The list of IDs of the apps to be unregistered + */ + IMPORT_C TInt UnRegisterApps( const RArray& aAppIdArray ); + /** + * Method to set the XML signature of the registered apps + * This is done as specified in XML Signature Syntax. + * The signature value is opaque to the TM Service. + * @param aSignature XML formatted buffer + */ + IMPORT_C void SetXmlSignatureL( const TDesC8& aSignature ); + /** + * Method to Start the Terminal Moder Server Device and its services. + * This must be called to initiate all the UPnP related + * activities. + */ + IMPORT_C void StartL(); + /** + * Method to Stop the Terminal Moder Server Device and its services. + * No further UPnP related activities will occur after this. + */ + IMPORT_C void StopL(); + /** + * Method to fetch the Remotable App object by passing the + * App ID of the same. Method is invoked by the Automotive Server + * when it wishes to modify any of the existing remotable app. + * @param aAppId App ID of the requested App + * @param aErr[out] Error code + * @return Returns reference to CUpnpRemotableApp object + */ + IMPORT_C CUpnpRemotableApp& GetRemotableApp( TUint aAppId, TInt& aErr ); + /** + * Method through which the notification of applications whose status + * has changed is sent across to the Car Kit through the Service . + * TM Service ignores the duplicate appIDs and sends only the list of + * unique appIDs. + * @param aUpdatedAppIdList List of appIDs whose status has changed + */ + IMPORT_C void UpdateAppStatusL( const RArray& aUpdatedAppIdList ); + /** + * Method through which the notification of applications whose entries + * in the application list have changed is sent across to the Car Kit + * through the Service. + * TM Service ignores the duplicate appIDs and sends only the list of + * unique appIDs. + * @param aUpdatedAppIdList List of appIDs whose entries haave changed + */ + IMPORT_C void UpdateAppListL( const RArray& aUpdatedAppIdList ); + /** + * Method through which the notification of profileIDs which are not used + * used by any Terminal Mode service hosted on the Terminal Mode device + * is sent across to the Car Kit through the Service. + * TM Service ignores the duplicate profileIDs and sends only the list of + * unique profileIDs. + * @param aUnusedProfileIdList List of profile IDs for profiles which are + * currently not being used by any Terminal Mode service + */ + IMPORT_C void UpdateUnusedProfileIdsL( const RArray& aUnusedProfileIdList ); + +private: + CUpnpTmServer(); + void ConstructL( CUpnpTmServerDeviceInfo& aDeviceInfo, + MUpnpTmServerObserver& aUpnpRemoteServer ); + +private: + // The "body"/implementation + CUpnpTmServerImpl* iTmServerImpl; + }; + +#endif // __UPNPTMSERVER_H__ + diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmserverdeviceinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmserverdeviceinfo.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,98 @@ +/** +* Copyright (c) 2010 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: CUpnpTmServerDeviceInfo class declaration +* +*/ + +#ifndef __UPNPTMSERVERDEVICEINFO_H__ +#define __UPNPTMSERVERDEVICEINFO_H__ + + +// INCLUDES +#include +#include + +/** +* This class represents device-specific parameters associated with +* Terminal Mode Server Device +*/ + +class CUpnpTmServerDeviceInfo: public CBase + { +public: + /** + * Standard Symbian Two-phased constructor. + * @param aIapId IAP ID. 32 bit unsigned integer. IAP stands for + * internet access point.It is mandatory to set IAP ID + * + */ + IMPORT_C static CUpnpTmServerDeviceInfo* NewL( TUint32 aIapId ); + /** + * Method to set the icon information associated with the Terminal Mode + * Server Device. It provides device icon information to the TM Sevice. + * @param aDeviceIcon Pointer to TM Icon object. + * Ownership of the object is passed. + * @see CUpnpTerminalModeIcon + */ + IMPORT_C void AddDeviceIconL( CUpnpTerminalModeIcon* aDeviceIcon ); + /** + * Method to set the Nokia specific additional information + * about the terminal mode server device. + * The entire deviceInfo element should as an xml formatted buffer should + * be provided as an input. + * The device info value is opaque to the TM Service. + * @param aDeviceInfo XML formatted buffer containing deviceInfo element. + */ + IMPORT_C void SetDeviceInfoL( const TDesC8& aDeviceInfo ); + /** + * Method to set Bluetooth MAC address of the TM server device. + * If this value is populated then it means that the device + * supports Bluetooth communication + * @param aBtAddress Bt MAC address + */ + IMPORT_C void SetBtAddressL( const TDesC8& aBtAddress ); + /** + * A setter to indicate that server device is able to initiate + * Bluetooth connection to client or not. + * @param aStartConn Boolean value + */ + inline void SetStartConn( TBool aStartConn ); + /** + * inlined "getter" methods for Terminal Mode Service's use. + */ + inline TUint32 IapId()const; + inline const RPointerArray& DeviceIconList()const; + inline const TDesC8& DeviceInfo( )const; + inline const TDesC8& BtAddress( )const; + inline TBool StartConn()const; + ~CUpnpTmServerDeviceInfo(); + +private: + CUpnpTmServerDeviceInfo( ); + void ConstructL( TUint32 aIapId ); + +private: + TUint32 iIapId; + HBufC8* iDeviceInfo; + HBufC8* iBtAddr; + TBool iStartConnValue; + RPointerArray iDeviceIconList; + }; + +#include + +#endif // __UPNPTMSERVERDEVICEINFO_H__ + + +// End of File diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmserverdeviceinfo.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmserverdeviceinfo.inl Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,91 @@ +/** +* Copyright (c) 2010 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 __UPNPTMSERVERDEVICEINFO_INL__ +#define __UPNPTMSERVERDEVICEINFO_INL__ + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::SetStartConn +// Method to set the boolean value which indicates whether the server device +// is able to initiate bluetooth connection to client or not. +// @param aStartConn Boolean value ( True or false ) +// --------------------------------------------------------------------------------- +// +inline void CUpnpTmServerDeviceInfo::SetStartConn( TBool aStartConn ) + { + iStartConnValue = aStartConn; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::IapId +// Method is used to retrieve IAP ID. +// --------------------------------------------------------------------------------- +// +inline TUint32 CUpnpTmServerDeviceInfo::IapId()const + { + return iIapId; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::DeviceIconList +// Method is used to retrieve an array of device icons. +// --------------------------------------------------------------------------------- +// +inline const RPointerArray& CUpnpTmServerDeviceInfo::DeviceIconList()const + { + return iDeviceIconList; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::DeviceInfo +// Method is used to retrieve additional information related to the device. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTmServerDeviceInfo::DeviceInfo()const + { + if ( iDeviceInfo ) + { + return *iDeviceInfo; + } + return KNullDesC8(); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::BtAddress +// Method is used to retrieve the BT MAC address of the TM server device. +// --------------------------------------------------------------------------------- +// +inline const TDesC8& CUpnpTmServerDeviceInfo::BtAddress()const + { + if ( iBtAddr ) + { + return *iBtAddr; + } + return KNullDesC8(); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmServerDeviceInfo::StartConn +// Method is used to fetch the the boolean value for BT start connection preferences. +// --------------------------------------------------------------------------------- +// +inline TBool CUpnpTmServerDeviceInfo::StartConn()const + { + return iStartConnValue; + } + +#endif //__UPNPTMSERVERDEVICEINFO_INL__ diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice_plat/inc/upnptmserverobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice_plat/inc/upnptmserverobserver.h Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,114 @@ +/** +* Copyright (c) 2010 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: MUpnpTmServerObserver interface definition +* +*/ + +#ifndef __UPNPTMSERVEROBSERVER_H__ +#define __UPNPTMSERVEROBSERVER_H__ + +#include +#include + +/** + * This is the main callback interface which the Terminal Mode Server application + * needs to implement to handle the soap action requests from the Terminal Mode Clients. + * It also provides a method to fetch client's icon preferences from AutomotiveServer. + * + */ +class MUpnpTmServerObserver + { +public: + /** + * Method to intimate Automotive Server about the arrival of GetApplicationList soap action. + * This is a synchronous call and the implementing class must return immediately + * @param aProfileId Profile ID of the client profile whose parameter settings will be + * applied for generating the application list + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnGetApplicationList( TUint aProfileId ) = 0; + /** + * Method to launch an app through the Automotive Server. + * This is a synchronous call and the implementing class must return after + * launching the app. + * @param aAppId The App ID as registered with the Terminal Mode Service. + * @param aUrl[out] AS provides the actual URL where the application is running. + * @param aProfileId Profile ID of the client profile whose parameter settings will be + * applied for launching and executing the application + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnLaunchApp( TUint aAppId, RBuf8& aUrl, TUint aProfileId = 0 ) = 0; + /** + * Method to terminate an app that is already running. + * @param aAppID The ID of the App as registered with the Terminal Mode Service. + * @param aProfileId Profile ID of the client profile whose parameter settings will be + * applied to the application during execution + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnTerminateApp( TUint aAppId, TUint aProfileId = 0 ) = 0; + /** + * Method through which the Terminal Mode Service Service can retrieve the status of a + * given app. + * @param aAppID The ID of the App as registered with the Terminal Mode Service. + * @param aProfileId [out]Profile ID of the client profile + * @param aStatusType [out]The App Status object to be populated + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnGetAppStatus( TUint aAppId, TUint& aProfileId ,RBuf8& aStatusType ) = 0; + /** + * AutomotiveServer returns the the value of the state variable MaxNumProfiles + * in response to the GetMaxNumProfiles action + * @param aProfileIdCount[out] The maximum number of client profiles that are supported + * simultaneously by the TmClientProfile service. + * @return Returns TerminalModeError code + */ + virtual TTerminalModeErrorCode OnGetMaxNumProfiles( TUint& aProfileIdCount ) = 0; + /** + * Method to intimate AutomotiveServer whenever the control point invokes action to register + * a client profile and notify the Terminal Mode device about its preferences, settings + * and capabilities. + * @param aProfileId The identifier of the profile record where the client profile + * settings must be stored + * @param aClientProfile Profile information about Terminal Mode client and its capabilities + * which needs to be updated in the profile record + * @param aResultProfile[out] The updated client profile. + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnSetClientProfile( TUint aProfileId, const TDesC8& aClientProfile, + RBuf8& aResultProfile ) = 0; + /** + * Method to intimate AutomotiveServer whenever the control point invokes action to + * to access the contents of a client profile stored in the Terminal Mode device + * @param aProfileId The identifier of the profile record where the client profile + * settings must be stored + * @param aClientProfile[out] Client profile corresponding to the profileID input variable + * @return Returns Terminal Mode Error code + */ + virtual TTerminalModeErrorCode OnGetClientProfile( TUint aProfileId, RBuf8& aClientProfile ) = 0; + /** + * Method to fetch the Terminal Mode Client( Car Kit )'s icon preferences from the + * AutomotiveServer for a particular client profile corresponding to the profileID supplied. + * In case client profile has no icon preferences associated with it, AutomotiveServer + * returns the Client Icon Preference object with default values. + * This method is invoked whenever the http request for a particular application icon + * comes to Terminal Mode Service. + * @param aProfileId ProfileID corresponding to a particular client profile. + * @return Returns reference to the Client Icon Preference object. + * @see CUpnpTmClientIconPref + */ + virtual const CUpnpTmClientIconPref& GetClientIconPrefsL( TUint aProfileId ) = 0; + }; + +#endif // __UPNPTMSERVEROBSERVER_H__ + diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/controlpointbase/src/upnpcpbdescriptionagent.cpp --- a/upnp/upnpstack/controlpointbase/src/upnpcpbdescriptionagent.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/controlpointbase/src/upnpcpbdescriptionagent.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -215,7 +215,7 @@ RBuf8 description; if(deviceDescription->UrlBase().Length()!=0) { - description.Create(aDeviceDescPath.Length()+deviceDescription->UrlBase().Length()); + description.CreateL(aDeviceDescPath.Length()+deviceDescription->UrlBase().Length()); description.Copy(deviceDescription->UrlBase()); TInt firstSlash(aDeviceDescPath.Locate( KSlash8()[0] ) ); if(firstSlash==0) @@ -228,7 +228,7 @@ else { TBuf<25> ipBuf; - description.Create(KUrlMaxLength); + description.CreateL(KUrlMaxLength); description.Copy(KHttp()); aAddr.Output ( ipBuf); diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/controlpointbase/src/upnpcpbembeddeddevicedescription.cpp --- a/upnp/upnpstack/controlpointbase/src/upnpcpbembeddeddevicedescription.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/controlpointbase/src/upnpcpbembeddeddevicedescription.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -300,7 +300,6 @@ { iResult = KErrNotFound; } - } } else diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/controlpointbase/src/upnpserviceinfo.cpp --- a/upnp/upnpstack/controlpointbase/src/upnpserviceinfo.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/controlpointbase/src/upnpserviceinfo.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -233,19 +233,19 @@ { result = RUpnpGenaMessageFactory::SubscribeL( subscribe, servAddress, aPath, timeoutBuf ); - break; + break; } case EResubscription: { result = RUpnpGenaMessageFactory::ResubscribeL( subscribe, servAddress, aPath, timeoutBuf ); - break; + break; } case EUnSubscription: { result = RUpnpGenaMessageFactory::UnsubscribeL( subscribe, servAddress, aPath); - break; + break; } default: { @@ -253,16 +253,15 @@ User::Leave(KErrArgument); break; } + } if(result == NULL) { // To avoid Coverity FORWARD_NULL errors User::Leave(KErrArgument); } - result->SetType( aType ); iSessionId = result->SessionId(); - return result; } diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/dlnawebserver/group/dlnawebserver.mmp --- a/upnp/upnpstack/dlnawebserver/group/dlnawebserver.mmp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/dlnawebserver/group/dlnawebserver.mmp Tue Aug 31 16:06:48 2010 +0300 @@ -87,7 +87,6 @@ //Max file size related libs -LIBRARY commonui.lib LIBRARY flogger.lib DEFFILE DLNAwebserver diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/dlnawebserver/src/upnphttpbuffer.cpp --- a/upnp/upnpstack/dlnawebserver/src/upnphttpbuffer.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/dlnawebserver/src/upnphttpbuffer.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -87,7 +87,7 @@ // void CUpnpHttpBuffer::ConstructL() { - iBuffer.Create( 0 ); + iBuffer.CreateL( 0 ); iChunkParser = CUpnpHttpChunkParser::NewL(); } diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/dlnawebserver/src/upnphttpchunkparser.cpp --- a/upnp/upnpstack/dlnawebserver/src/upnphttpchunkparser.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/dlnawebserver/src/upnphttpchunkparser.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -107,6 +107,7 @@ { case EUnknown: iContext = EHeader; + break; case EHeader: interrupt = ParseHeader(aBuffer,aPos); break; diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/dlnawebserver/src/upnphttpsession.cpp --- a/upnp/upnpstack/dlnawebserver/src/upnphttpsession.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/dlnawebserver/src/upnphttpsession.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -1445,7 +1445,7 @@ CUpnpHttpHeader* hdr = List->First(); - if(hdr != NULL) + if(hdr != NULL) { HBufC8* newHeader = NULL; newHeader = HBufC8::NewLC( KTransferPending801().Length() ); @@ -1456,6 +1456,7 @@ CleanupStack::PopAndDestroy( newHeader ); } + msg->SetOutFilenameL( *iOutFilename ); CleanupStack::Pop( msg ); NotifyUpperLayerLD( msg ); diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/dlnawebserver/src/upnptcpserver.cpp --- a/upnp/upnpstack/dlnawebserver/src/upnptcpserver.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/dlnawebserver/src/upnptcpserver.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -330,7 +330,7 @@ #endif CUpnpTcpSession* sess = ConnectionAcceptedL( iClientSocket ); - iSessionList.Append( sess ); + iSessionList.AppendL( sess ); } else diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/messagehandler/src/upnpipfiltering.cpp --- a/upnp/upnpstack/messagehandler/src/upnpipfiltering.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/messagehandler/src/upnpipfiltering.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -241,7 +241,7 @@ } // create heap descriptor - iListBuf.Create( buf->Size() ); + iListBuf.CreateL( buf->Size() ); buf->Read( 0, iListBuf, buf->Size() ); // clean up; diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpdevice.cpp --- a/upnp/upnpstack/serviceframework/src/upnpdevice.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpdevice.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -544,7 +544,7 @@ for (TInt i = 0; i < iDeviceList.Count(); i++ ) { - aDevices.Append( iDeviceList[i] ); + TRAP_IGNORE(aDevices.AppendL( iDeviceList[i] )); iDeviceList[i]->GetAllDevices(aDevices); } diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpdeviceimplementation.cpp --- a/upnp/upnpstack/serviceframework/src/upnpdeviceimplementation.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpdeviceimplementation.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -19,7 +19,7 @@ // INCLUDE FILES #include -#include +#include #include #include "upnpfileutils.h" diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpdeviceimplementationbase.cpp --- a/upnp/upnpstack/serviceframework/src/upnpdeviceimplementationbase.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpdeviceimplementationbase.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -19,7 +19,7 @@ // INCLUDE FILES #include -#include +#include #include "upnpfileutils.h" #include "upnpicon.h" diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpdispatcherengine.cpp --- a/upnp/upnpstack/serviceframework/src/upnpdispatcherengine.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpdispatcherengine.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -174,7 +174,7 @@ // adds a new customer for CUpnpDispatcherEngine if ( iCustomers.Find( &aCustomer ) == KErrNotFound ) { - iCustomers.Append( &aCustomer ); + TRAP_IGNORE(iCustomers.AppendL( &aCustomer )); } } // ----------------------------------------------------------------------------- @@ -352,7 +352,7 @@ CleanupClosePushL( currServs ); for ( TInt j = 0; j < iDevs[i].iServiceCount; j++ ) { - currServs.Append( (const TUpnpService*)&iServs[servIndex+j] ); + currServs.AppendL( (const TUpnpService*)&iServs[servIndex+j] ); } CleanupStack::Check(&currServs); servIndex += iDevs[i].iServiceCount; @@ -366,7 +366,7 @@ currServs.Reset(); CleanupStack::Pop( &currServs ); - iNewDevices.Append( device ); + iNewDevices.AppendL( device ); } delete[] iDevs; @@ -542,7 +542,7 @@ request->AddServices(array); CleanupStack::Pop(request); - iPendingRequests.Append(request); + iPendingRequests.AppendL(request); } } @@ -693,7 +693,7 @@ request->AddArgumentL( aString ); CleanupStack::Pop(request); - iPendingRequests.Append(request); + iPendingRequests.AppendL(request); } } @@ -837,7 +837,7 @@ } CleanupStack::Pop(request); - iPendingRequests.Append(request); + iPendingRequests.AppendL(request); } } diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpsilentdeviceimplementation.cpp --- a/upnp/upnpstack/serviceframework/src/upnpsilentdeviceimplementation.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpsilentdeviceimplementation.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -19,7 +19,7 @@ // INCLUDE FILES #include -#include +#include #include #include "upnpfileutils.h" diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/serviceframework/src/upnpsoapmessagefactory.cpp --- a/upnp/upnpstack/serviceframework/src/upnpsoapmessagefactory.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/serviceframework/src/upnpsoapmessagefactory.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -217,7 +217,6 @@ CUpnpHttpHeader* hdr = hdrList->First(); - while ( hdr ) { TBool flag = EFalse; diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/upnphttptransfer/src/httpfile.cpp --- a/upnp/upnpstack/upnphttptransfer/src/httpfile.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/upnphttptransfer/src/httpfile.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -231,7 +231,7 @@ } } - iHeaderArray.Append( CHttpHeader::NewL( aFieldName, aFieldValue ) ); + iHeaderArray.AppendL( CHttpHeader::NewL( aFieldName, aFieldValue ) ); } // -------------------------------------------------------------------------- diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/upnputils/src/upnpdevicelibrary.cpp --- a/upnp/upnpstack/upnputils/src/upnpdevicelibrary.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/upnputils/src/upnpdevicelibrary.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -631,7 +631,7 @@ element->SetRenew(CUpnpTimeoutElement::EOnce); element->SetTimeout(aMessage->CacheControl()); element->SetLocal(EFalse); - iElementArray.Append(element); + iElementArray.AppendL(element); CleanupStack::Pop(); // element } @@ -662,7 +662,7 @@ element->SetRenew(CUpnpTimeoutElement::EOnce); element->SetTimeout(aMessage->CacheControl()); element->SetLocal(EFalse); - iElementArray.Append(element); + iElementArray.AppendL(element); CleanupStack::Pop(); // element } @@ -679,7 +679,7 @@ element->SetRenew(CUpnpTimeoutElement::EOnce); element->SetTimeout(aMessage->CacheControl()); element->SetLocal(EFalse); - iElementArray.Append(element); + iElementArray.AppendL(element); CleanupStack::Pop(); // element } diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack/upnputils/src/upnpdominterface.cpp --- a/upnp/upnpstack/upnputils/src/upnpdominterface.cpp Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack/upnputils/src/upnpdominterface.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -30,9 +30,9 @@ #include "upnpcustomlog.h" -#include -#include -#include +#include +#include +#include diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack_plat/upnp_device_api/inc/upnpdevicedescriptionstore.h --- a/upnp/upnpstack_plat/upnp_device_api/inc/upnpdevicedescriptionstore.h Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack_plat/upnp_device_api/inc/upnpdevicedescriptionstore.h Tue Aug 31 16:06:48 2010 +0300 @@ -20,9 +20,9 @@ #define C_CUPNPDEVICEDESCRIPTIONSTORE_H #include -#include -#include -#include +#include +#include +#include #include class CUpnpDevice; diff -r 8116cc943311 -r 5c72fd91570d upnp/upnpstack_plat/upnp_utils_api/inc/upnpdominterface.h --- a/upnp/upnpstack_plat/upnp_utils_api/inc/upnpdominterface.h Mon Mar 15 12:43:29 2010 +0200 +++ b/upnp/upnpstack_plat/upnp_utils_api/inc/upnpdominterface.h Tue Aug 31 16:06:48 2010 +0300 @@ -26,7 +26,7 @@ #include #include #include -#include +#include namespace UpnpDomInterface {