diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/connserv_params/src/connservparams.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/connserv_params/src/connservparams.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,354 @@ +// Copyright (c) 2006-2009 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: +// + +/** + @file connservparams.cpp +*/ + +#include +#include + +#include +#include +#include +#include "cs_connservparams.h" +#include + +using namespace ConnectionServ; +using namespace Meta; + +START_ATTRIBUTE_TABLE( XAccessPointGenericParameterSet, KConnectionServGenericParamImplUid, KAccessPointGenericParameterSetType ) + REGISTER_ATTRIBUTE( XAccessPointGenericParameterSet, iApInfo, TMeta ) + REGISTER_ATTRIBUTE( XAccessPointGenericParameterSet, iApStatus, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + +START_ATTRIBUTE_TABLE( XAccessPointGenericQuery, KConnectionServGenericParamImplUid, KAccessPointGenericQueryType ) + REGISTER_ATTRIBUTE( XAccessPointGenericQuery, iApsToMatch, TMetaArray ) + REGISTER_ATTRIBUTE( XAccessPointGenericQuery, iApStatusFilter, TMeta ) + REGISTER_ATTRIBUTE( XAccessPointGenericQuery, iParameterSetTypesToReturn, TMetaArray ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + + +// Used internally by the notification mechanism. +// Contains 2 bit maps. The collector session with index i will mark bit i in each of these, +// to denote: +// iRunning - whether the collector knows about this access point and must match to allow report of this AP +// iReceived - whether the collector has received any data for this access point +// iInSet - that the cache entry matches the collector's interpretation of the query filter +// iToReport - that the cache entry needs to be reported to the client +START_ATTRIBUTE_TABLE( XNotificationCacheParameterSet, KConnectionServGenericParamImplUid, KNotificationCacheParameterSetType ) + REGISTER_ATTRIBUTE( XNotificationCacheParameterSet, iRunning, TMeta ) + REGISTER_ATTRIBUTE( XNotificationCacheParameterSet, iReceived, TMeta ) + REGISTER_ATTRIBUTE( XNotificationCacheParameterSet, iInSet, TMeta ) + REGISTER_ATTRIBUTE( XNotificationCacheParameterSet, iToReport, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + +// Used internally by the notification mechanism between different core data collectors. +// To allow the separation of the collector of MCPRs and the collector of data from those MCPRs. +// iMcprCommsId - the comms id of the MCPR of this access point.. for passing between collectors +// iMcprPtr - pointer to the same MCPR +START_ATTRIBUTE_TABLE( XCoreCollectorSharedParameterSet, KConnectionServGenericParamImplUid, KCoreCollectorSharedParameterSetType ) + REGISTER_ATTRIBUTE( XCoreCollectorSharedParameterSet, iMcprCommsId, TMeta ) + REGISTER_ATTRIBUTE( XCoreCollectorSharedParameterSet, iMcprPtr, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + +// Used internally to contain information about the IP Proto layer by CConnection legacy calls. +START_ATTRIBUTE_TABLE( XIpProtoAccessPointParameterSet, KConnectionServGenericParamImplUid, KIpProtoAccessPointParameterSetType ) + REGISTER_ATTRIBUTE( XIpProtoAccessPointParameterSet, iIapId, TMeta ) + REGISTER_ATTRIBUTE( XIpProtoAccessPointParameterSet, iNetworkId, TMeta ) + REGISTER_ATTRIBUTE( XIpProtoAccessPointParameterSet, iConnectionType, TMeta ) + REGISTER_ATTRIBUTE( XIpProtoAccessPointParameterSet, iControlClientId, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + +// Only used internally at the moment, by EnumerateConnections +START_ATTRIBUTE_TABLE( XAccessPointPlaneStatusParameterSet, KConnectionServGenericParamImplUid, KAccessPointPlaneStatusParameterSetType ) + REGISTER_ATTRIBUTE( XAccessPointPlaneStatusParameterSet, iPlaneStatus, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + +// Only used internally at the moment, by EnumerateConnections +START_ATTRIBUTE_TABLE( XAccessPointPlaneStatusQuery, KConnectionServGenericParamImplUid, KAccessPointPlaneStatusQueryType ) + REGISTER_ATTRIBUTE( XAccessPointPlaneStatusQuery, iPlaneStatusFilter, TMeta ) +END_ATTRIBUTE_TABLE_BASE( XConnectionServParameterSet, 0 ) + + + + + +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KConnectionServGenericParamImplUid, CConnectionServGenericParamsFactory::NewL), + }; + +/** +ECOM Implementation Factories +*/ + +//extern "C" { IMPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount); } + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + + return ImplementationTable; + } + +/** +Plugin Implementation +*/ + +XConnectionServParameterSet* CConnectionServGenericParamsFactory::NewL(TAny* aConstructionParameters) + { + TInt32 type = reinterpret_cast(aConstructionParameters); + switch (type) + { + case (KAccessPointGenericParameterSetType): + return new (ELeave) XAccessPointGenericParameterSet; + case (KAccessPointGenericQueryType): + return new (ELeave) XAccessPointGenericQuery; + case (KNotificationCacheParameterSetType): + return new (ELeave) XNotificationCacheParameterSet; + case (KCoreCollectorSharedParameterSetType): + return new (ELeave) XCoreCollectorSharedParameterSet; + case (KIpProtoAccessPointParameterSetType): + return new (ELeave) XIpProtoAccessPointParameterSet; + case (KAccessPointPlaneStatusParameterSetType): + return new (ELeave) XAccessPointPlaneStatusParameterSet; + case (KAccessPointPlaneStatusQueryType): + return new (ELeave) XAccessPointPlaneStatusQuery; + default: + User::Leave(KErrNotFound); + } + return NULL; + } + + +/*virtual*/ void XAccessPointGenericParameterSet::UpdateWithL(const XParameterSet& aRhsBase) + { + const XAccessPointGenericParameterSet& aRhs = static_cast(aRhsBase); + if(aRhs.AccessPointInfo().AccessPoint()) + { + iApInfo = aRhs.iApInfo; + } + iApStatus.UpdateWith(aRhs.iApStatus); + } + +/*virtual*/ void XAccessPointGenericParameterSet::CopyFieldsRequiredByQueryFromL( + const CParameterBundleBase& aQueryBundle,const XConnectionServParameterSet& aSourceBase) + { + const XAccessPointGenericParameterSet& aSource = static_cast(aSourceBase); + const CParameterSetContainer* aQueryCtr = aQueryBundle.GetParamSetContainer(0); + User::LeaveIfNull((TAny*)aQueryCtr); + const XAccessPointGenericQuery* aQuerySet = XAccessPointGenericQuery::FindInParamSetContainer(*aQueryCtr); + User::LeaveIfNull((TAny*)aQuerySet); + iApInfo = aSource.iApInfo; + iApStatus.CopyFieldsRequiredByQueryFrom(aQuerySet->AccessPointStatusFilter(),aSource.iApStatus); + } + +/*virtual*/ TInt XAccessPointGenericParameterSet::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + TAccessPointInfo inf = this->AccessPointInfo(); + TAccessPointStatus stat = this->AccessPointStatus(); + aBuf.AppendFormat(_L("GPS: AP:%d C:%c R:%c A:%c S:%c"),&ignoreOverflow, + inf.AccessPoint(), + TAccessPointStatus::FlagValueAsChar(stat.Configured()), + TAccessPointStatus::FlagValueAsChar(stat.Restricted()), + TAccessPointStatus::FlagValueAsChar(stat.Available()), + TAccessPointStatus::FlagValueAsChar(stat.Started()) ); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + + +/*virtual*/ XAccessPointGenericQuery::~XAccessPointGenericQuery() + { + iApsToMatch.Close(); + iParameterSetTypesToReturn.Close(); + } + +TBool CompareTypeIds(const STypeId& aFirst, const STypeId& aSecond) + { + return( aFirst == aSecond ); + } + +/*virtual*/ TBool XAccessPointGenericQuery::ShouldReturnType(const STypeId& aTypeId) const + { + return iParameterSetTypesToReturn.Find(aTypeId,TIdentityRelation(CompareTypeIds)) != KErrNotFound ; + } + +/*virtual*/ TInt XAccessPointGenericQuery::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + aBuf.AppendFormat(_L("GQ: APs("),&ignoreOverflow); + + const RArray& aps = this->AccessPointsToMatch(); + TAccessPointStatusFilter apsf = this->AccessPointStatusFilter(); + const RArray& types = this->GetParameterSetTypesToReturn(); + + TInt i=0; + for( ; iRunningValue(), + this->ReceivedValue(), + this->InSetValue(), + this->ToReportValue() ); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + + +/*virtual*/ void XCoreCollectorSharedParameterSet::UpdateWithL(const XParameterSet& aRhsBase) + { + const XCoreCollectorSharedParameterSet& aRhs = static_cast(aRhsBase); + + if(aRhs.iMcprPtr) + { + iMcprPtr=aRhs.iMcprPtr; + iMcprCommsId=aRhs.iMcprCommsId; + } + } + +/*virtual*/ TInt XCoreCollectorSharedParameterSet::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + aBuf.AppendFormat(_L("CCSPS:mcpr %08x"),&ignoreOverflow, + reinterpret_cast(this->McprPtr()) ); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + + +/*virtual*/ void XIpProtoAccessPointParameterSet::UpdateWithL(const XParameterSet& aRhsBase) + { + const XIpProtoAccessPointParameterSet& aRhs = static_cast(aRhsBase); + + iIapId = aRhs.iIapId; + iNetworkId = aRhs.iNetworkId; + iConnectionType = aRhs.iConnectionType; + iControlClientId = aRhs.iControlClientId; + } + +/*virtual*/ TInt XIpProtoAccessPointParameterSet::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + aBuf.AppendFormat(_L("IPPAPS:IAP:%d Net:%d ConnType:%d"),&ignoreOverflow, + this->IapId(), + this->NetworkId(), + this->ConnectionType() ); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + + +/*virtual*/ void XAccessPointPlaneStatusParameterSet::UpdateWithL(const XParameterSet& aRhsBase) + { + const XAccessPointPlaneStatusParameterSet& aRhs = static_cast(aRhsBase); + iPlaneStatus.UpdateWithL(aRhs.iPlaneStatus); + } + +/*virtual*/ void XAccessPointPlaneStatusParameterSet::CopyFieldsRequiredByQueryFromL( + const CParameterBundleBase& aQueryBundle,const XConnectionServParameterSet& aSourceBase) + { + const XAccessPointPlaneStatusParameterSet& aSource = static_cast(aSourceBase); + const CParameterSetContainer* aQueryCtr = aQueryBundle.GetParamSetContainer(0); + User::LeaveIfNull((TAny*)aQueryCtr); + const XAccessPointPlaneStatusQuery* aQuerySet = XAccessPointPlaneStatusQuery::FindInParamSetContainer(*aQueryCtr); + User::LeaveIfNull((TAny*)aQuerySet); + + iPlaneStatus.CopyFieldsRequiredByQueryFrom(aQuerySet->PlaneStatusFilter(),aSource.iPlaneStatus); + } + +/*virtual*/ TInt XAccessPointPlaneStatusParameterSet::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + const TAccessPointPlaneStatus& ps = this->PlaneStatus(); + aBuf.AppendFormat(_L("PlSt:T..M..C%c.S..F.."),&ignoreOverflow, + TAccessPointStatus::FlagValueAsChar(ps.Connection_Exists())); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + +/*virtual*/ TInt XAccessPointPlaneStatusQuery::AppendPrintableTo(TDes& aBuf) const + { +#ifdef __CFLOG_ACTIVE + TDes16IgnoreOverflow ignoreOverflow; + const TAccessPointPlaneStatusFilter& psf = this->PlaneStatusFilter(); + aBuf.AppendFormat(_L("PlSt:T..M..C%c.S..F.."),&ignoreOverflow, + TAccessPointStatusFilter::FilterValueAsChar(psf.Connection_Exists())); + return KErrNone; +#else + (void)aBuf; + return KErrNotSupported; +#endif // __CFLOG_ACTIVE + } + +