# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272883164 -10800 # Node ID e53adc4c49de71717623e94119d5da024696f165 # Parent 592244873960907525e50bed84d195861a2145ed Revision: 201018 Kit: 201018 diff -r 592244873960 -r e53adc4c49de commsfwsupport/commselements/commsfw/src/cftransport.cpp --- a/commsfwsupport/commselements/commsfw/src/cftransport.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/commsfwsupport/commselements/commsfw/src/cftransport.cpp Mon May 03 13:39:24 2010 +0300 @@ -1108,7 +1108,7 @@ TRuntimeCtxIdOp op(nodeId); op.Set(iPointerSalt, iThreadRegister.SelfWorkerId()); //TODO - it would be better to print the whole address (aCookie.Size() bytes starting from &aCookie == aCookie.Printable();) - __CFLOG_VAR(( KLogCommsFw, KLogFwTransport, _L8("RegisterItf(%08x) => %08x:%08x"), nodeId.Ptr(), *reinterpret_cast(&aCookie), *(reinterpret_cast(&aCookie) + 1))); + __CFLOG_VAR(( KLogCommsFw, KLogFwTransport, _L8("RegisterItf(%08x) => %08x %08x"), nodeId.Ptr(), *reinterpret_cast(&aCookie), *(reinterpret_cast(&aCookie) + 1))); #ifdef SYMBIAN_TRACE_ENABLE __ASSERT_ALWAYS(!iIntfRegister.Find(TIntPtr(nodeId.Ptr())), Panic(ECFTransBadRegistration)); @@ -1135,7 +1135,7 @@ { //This transport implementation currently only registers TNodeId //TODO - it would be better to print the whole address (aCookie.Size() bytes starting from &aCookie == aCookie.Printable();) - __CFLOG_VAR(( KLogCommsFw, KLogFwTransport, _L8("DeregisterItf(%08x => %08x:%08x"), address_cast(aCookie).Ptr(), *reinterpret_cast(&aCookie), *(reinterpret_cast(&aCookie) + 1))); + __CFLOG_VAR(( KLogCommsFw, KLogFwTransport, _L8("DeregisterItf(%08x) => %08x %08x"), address_cast(aCookie).Ptr(), *reinterpret_cast(&aCookie), *(reinterpret_cast(&aCookie) + 1))); --iRegisteredCount; __ASSERT_ALWAYS(iRegisteredCount >= 0, Panic(ECFExcessInterfaceDeregistration)); aCookie.SetNull(); diff -r 592244873960 -r e53adc4c49de commsfwsupport/commselements/commsfw/src/cfutil.cpp --- a/commsfwsupport/commselements/commsfw/src/cfutil.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/commsfwsupport/commselements/commsfw/src/cfutil.cpp Mon May 03 13:39:24 2010 +0300 @@ -438,6 +438,7 @@ { do { + CleanupStack::PushL(dir); const TInt cnt = dir->Count(); for(TInt i = 0; i < cnt; ++i) { @@ -445,7 +446,7 @@ fullEntry.Set(entry.iName, &ff.File(), NULL); AddL(TOwnEntry(fullEntry, entry)); } - delete dir; + CleanupStack::PopAndDestroy(dir); } while(ff.FindWild(dir) == KErrNone); } @@ -469,46 +470,46 @@ TParse fullEntry; CDir* dir; RArray files; + CleanupClosePushL(files); TBool found; if(ff.FindWildByDir(aFileMask, aDir, dir) == KErrNone) { do { + CleanupStack::PushL(dir); const TInt cnt = dir->Count(); for(TInt i = 0; i < cnt; ++i) { const TEntry& entry = (*dir)[i]; - if(files.Count()!=0) - { + if(files.Count()!=0) + { found = EFalse; for( TInt Index=0;Index(Server()); - __ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount)); - s->iNumSessions--; - COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions)); - - CCommonWorkerThread& selfWorker = WorkerThread(); - if (selfWorker.ShuttingDown()) - { - COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions)); - if (s->iNumSessions <= 0) - { - if(selfWorker.IsMainThread()) - { - selfWorker.PitBoss().SessionShutdownComplete(); - } - else - { - selfWorker.MaybeTriggerThreadShutdownCallback(); - } - } - } + if (s) // guard against leave during construction (e.g. a leave from CWorkerSession::ConstructL()). + { + __ASSERT_DEBUG(s->iNumSessions>0, User::Panic(KDenFaultPanic, ECommonNegativeSessionCount)); + s->iNumSessions--; + COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("CWorkerSession(%08x):\t~CWorkerSession() iNumSessions=%d (remaining)"), this, s->iNumSessions)); + + CCommonWorkerThread& selfWorker = WorkerThread(); + if (selfWorker.ShuttingDown()) + { + COMMONLOG((WorkerId(), KECommonSessDetailTag, _L8("Shutdown requested: %d sessions"), s->iNumSessions)); + if (s->iNumSessions <= 0) + { + if(selfWorker.IsMainThread()) + { + selfWorker.PitBoss().SessionShutdownComplete(); + } + else + { + selfWorker.MaybeTriggerThreadShutdownCallback(); + } + } + } + } } EXPORT_C void CWorkerSession::ProcessSubSessions(TWorkerId aPeerId, TSubSessionProcessor aSubSessionProcessor, TAny* aArg) diff -r 592244873960 -r e53adc4c49de commsfwtools/preparedefaultcommsdatabase/defaultcommdb/group/createcommdbs.pl --- a/commsfwtools/preparedefaultcommsdatabase/defaultcommdb/group/createcommdbs.pl Fri Apr 16 16:15:03 2010 +0300 +++ b/commsfwtools/preparedefaultcommsdatabase/defaultcommdb/group/createcommdbs.pl Mon May 03 13:39:24 2010 +0300 @@ -212,13 +212,13 @@ $zDrive = $release . $cedPlatfrom . '/' . $cedVariant . '/z'; $zDriveCre = $zDrive . $cccccc00Root . $cccccc00NameCre; $CdbEmpty = $zDrive . $cccccc00Root . $cccccc00Nametxt; +$romCdb = $epocRoot . 'epoc32/' . 'data/z' . $cccccc00Root . $cccccc00NameCre; if ($::command eq 'build') { $ced = $release . $cedPlatfrom . '/' . $cedVariant . '/ced.exe'; $emulatorstore = $epocRoot . 'epoc32/' . $cedPlatfrom . $cdbIn; $winsCdb = $epocRoot . 'epoc32/' . $cedPlatfrom . '/c' . $cccccc00Root . "persists/" . $cccccc00NameCre; - $romCdb = $epocRoot . 'epoc32/' . 'data/z' . $cccccc00Root . $cccccc00NameCre; if ($platType =~ 'emulator') { @@ -317,7 +317,10 @@ else { print("$data->{$platType}->{sourceCfg} older than $data->{$platType}->{destinationCdb}\n"); - print("Construction aborted.\n"); + print("Construction aborted. Copy-younger of resource CRE only\n"); + #copy to z drive + print("CopyIfYounger $winsCdb to $zDriveCre\n"); + CopyIfYounger($winsCdb, $zDriveCre); } } else @@ -347,6 +350,14 @@ { print("$data->{$platType}->{destinationCdb}\n"); print("$CdbEmpty\n"); + if($::platform =~ /wins/i) + { + print("$zDriveCre \n"); + } + else + { + print("$romCdb\n"); + } } sub RunCed diff -r 592244873960 -r e53adc4c49de commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl --- a/commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl Fri Apr 16 16:15:03 2010 +0300 +++ b/commsfwtools/preparedefaultcommsdatabase/installdefaultcommdb/group/installdefaultcommdb.pl Mon May 03 13:39:24 2010 +0300 @@ -94,19 +94,22 @@ $CdbDest = $data->{$platType}->{destinationCdb}; +## +## NOTE: all copying and releasing is now done from defaultcommdb - this installdefaultcommdb should be entirely deleted, system model updated, etc +## -if ($::command eq 'build') -{ - PreBuild(); -} -elsif ($::command eq 'clean') -{ - Clean(); -} -elsif ($::command eq 'releasables') -{ - Releasables(); -} +#if ($::command eq 'build') +#{ +# PreBuild(); +#} +#elsif ($::command eq 'clean') +#{ +# Clean(); +#} +#elsif ($::command eq 'releasables') +#{ +# Releasables(); +#} # # Subs. diff -r 592244873960 -r e53adc4c49de commsfwutils/commsbufs/group/testmbuf.iby --- a/commsfwutils/commsbufs/group/testmbuf.iby Fri Apr 16 16:15:03 2010 +0300 +++ b/commsfwutils/commsbufs/group/testmbuf.iby Mon May 03 13:39:24 2010 +0300 @@ -23,6 +23,7 @@ file=ABI_DIR\DEBUG_DIR\TS_CTMBUFMGR.DLL \System\libs\TS_CTMBUFMGR.DLL data=EPOCROOT##EPOC32\release\wins\udeb\z\TestData\scripts\mbuftest.script \testdata\scripts\mbuftest.script +data=EPOCROOT##EPOC32\release\wins\udeb\z\TestData\scripts\mbuftest.script \testdata\scripts\mbuftest_zc.script data=EPOCROOT##EPOC32\release\wins\udeb\z\TestData\configs\MBufTest05-CopyIn.ini \testdata\configs\MBufTest05-CopyIn.ini data=EPOCROOT##EPOC32\release\wins\udeb\z\TestData\configs\MBufTest05-CopyOut.ini \testdata\configs\MBufTest05-CopyOut.ini data=EPOCROOT##EPOC32\release\wins\udeb\z\TestData\configs\MBufTest06-1st.ini \testdata\configs\MBufTest06-1st.ini diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/bwins/esocksvrU.DEF --- a/datacommsserver/esockserver/bwins/esocksvrU.DEF Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/bwins/esocksvrU.DEF Mon May 03 13:39:24 2010 +0300 @@ -1047,4 +1047,10 @@ ?Self@PRClientLeft@PRClientLeftActivity@@SAABUTNodeActivity@MeshMachine@@XZ @ 1046 NONAME ; struct MeshMachine::TNodeActivity const & PRClientLeftActivity::PRClientLeft::Self(void) ?FirstTriple@PRClientLeft@PRClientLeftActivity@@SAABUTStateTriple@NetStateMachine@@XZ @ 1047 NONAME ; struct NetStateMachine::TStateTriple const & PRClientLeftActivity::PRClientLeft::FirstTriple(void) ?Accept@TAwaitingStop@CoreNetStates@@UAEHXZ @ 1048 NONAME ; int CoreNetStates::TAwaitingStop::Accept(void) - + ?GetVDataTable@TTierTypeIdFactoryQuery@ESock@@UBEPBUSVDataTableEntry@Meta@@XZ @ 1049 NONAME ; struct Meta::SVDataTableEntry const * ESock::TTierTypeIdFactoryQuery::GetVDataTable(void) const + ?GetAttribPtr@TTierTypeIdFactoryQuery@ESock@@UBEPAEH@Z @ 1050 NONAME ; unsigned char * ESock::TTierTypeIdFactoryQuery::GetAttribPtr(int) const + ??0TTierTypeIdFactoryQuery@ESock@@QAE@VTUid@@@Z @ 1051 NONAME ; ESock::TTierTypeIdFactoryQuery::TTierTypeIdFactoryQuery(class TUid) + ??0TTierTypeIdFactoryQuery@ESock@@QAE@XZ @ 1052 NONAME ; ESock::TTierTypeIdFactoryQuery::TTierTypeIdFactoryQuery(void) + ?Match@TTierTypeIdFactoryQuery@ESock@@MAE?AW4TMatchResult@MFactoryQuery@Factories@@AAUTFactoryObjectInfo@5@@Z @ 1053 NONAME ; enum Factories::MFactoryQuery::TMatchResult ESock::TTierTypeIdFactoryQuery::Match(struct Factories::TFactoryObjectInfo &) + ?GetVDataTableStatic@TTierTypeIdFactoryQuery@ESock@@SAPBUSVDataTableEntry@Meta@@XZ @ 1054 NONAME ; struct Meta::SVDataTableEntry const * ESock::TTierTypeIdFactoryQuery::GetVDataTableStatic(void) + diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/eabi/esocksvrU.DEF --- a/datacommsserver/esockserver/eabi/esocksvrU.DEF Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/eabi/esocksvrU.DEF Mon May 03 13:39:24 2010 +0300 @@ -1948,3 +1948,15 @@ _ZN20PRClientLeftActivity12PRClientLeft11FirstTripleEv @ 1947 NONAME _ZN20PRClientLeftActivity12PRClientLeft4SelfEv @ 1948 NONAME _ZN13CoreNetStates13TAwaitingStop6AcceptEv @ 1949 NONAME + _ZN5ESock23TTierTypeIdFactoryQuery19GetVDataTableStaticEv @ 1950 NONAME + _ZN5ESock23TTierTypeIdFactoryQuery5MatchERN9Factories18TFactoryObjectInfoE @ 1951 NONAME + _ZN5ESock23TTierTypeIdFactoryQueryC1E4TUid @ 1952 NONAME + _ZN5ESock23TTierTypeIdFactoryQueryC1Ev @ 1953 NONAME + _ZN5ESock23TTierTypeIdFactoryQueryC2E4TUid @ 1954 NONAME + _ZN5ESock23TTierTypeIdFactoryQueryC2Ev @ 1955 NONAME + _ZNK5ESock23TTierTypeIdFactoryQuery12GetAttribPtrEi @ 1956 NONAME + _ZNK5ESock23TTierTypeIdFactoryQuery13GetVDataTableEv @ 1957 NONAME + _ZTIN5ESock23TTierTypeIdFactoryQueryE @ 1958 NONAME + _ZTVN5ESock23TTierTypeIdFactoryQueryE @ 1959 NONAME + _ZThn4_N5ESock23TTierTypeIdFactoryQuery5MatchERN9Factories18TFactoryObjectInfoE @ 1960 NONAME + diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/eintsock/ss_eintsock_msgs.inl --- a/datacommsserver/esockserver/eintsock/ss_eintsock_msgs.inl Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/eintsock/ss_eintsock_msgs.inl Mon May 03 13:39:24 2010 +0300 @@ -195,6 +195,10 @@ { TParams* params = reinterpret_cast(ParamBlock()); params->iSender = aSender; + + // caution - TRuntimeCtxId assignment operator overloaded - it assumes a properly constructed destination, which it isn't here + // so we in-place construct it + new (¶ms->iImplCookie)Messages::TNodeId(); params->iImplCookie = aImplCookie; } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/inc/SS_conn.H --- a/datacommsserver/esockserver/inc/SS_conn.H Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/inc/SS_conn.H Mon May 03 13:39:24 2010 +0300 @@ -35,6 +35,8 @@ class TClearProgressQueue; class TRequestCSRCreation; class TProcessStateChange; + class TEnqueueStateChange; + class TAwaitingStateChange; class TProcessIncomingConnection; class TProcessProgressRequest; class TParseECNAttach; @@ -42,10 +44,8 @@ class TProcessBinderResponseForCpr; class TCompleteLegacyAttach; class TProcessEnumResponse; - class TGenerateConnectionUpProgress; class TGenerateConnectionDownProgress; - class TNoTagOrCancelAllInterfaceWorker; class TCancelAllInterfaceNotificationWorker; } @@ -139,6 +139,8 @@ friend class ConnStates::TClearProgressQueue; friend class ConnStates::TRequestCSRCreation; friend class ConnStates::TProcessStateChange; + friend class ConnStates::TAwaitingStateChange; + friend class ConnStates::TEnqueueStateChange; friend class ConnStates::TProcessIncomingConnection; friend class ConnStates::TProcessProgressRequest; friend class ConnStates::TParseECNAttach; diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/inc/ss_DataMonitoringProvider.h --- a/datacommsserver/esockserver/inc/ss_DataMonitoringProvider.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/inc/ss_DataMonitoringProvider.h Mon May 03 13:39:24 2010 +0300 @@ -172,7 +172,7 @@ public: TNotificationRequest(CDataMonitoringResponder* aResponder, TSubSessionUniqueId aClientId) : iThreshold(0), iResponder(aResponder), iClientId(aClientId), iCancelled(EFalse), iWrapped(EFalse) - { + { } TUint32 Threshold() const @@ -205,7 +205,7 @@ void SetCancelled() { - iCancelled = ETrue; + iCancelled = ETrue; } TBool Wrapped() const @@ -220,6 +220,7 @@ static TInt CompareThresholds(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond); static TBool CompareClientIds(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond); + static TBool CompareClientIdsAndCancelledFlag(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond); private: TUint32 iThreshold; diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/inc/ss_connstates.h --- a/datacommsserver/esockserver/inc/ss_connstates.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/inc/ss_connstates.h Mon May 03 13:39:24 2010 +0300 @@ -235,10 +235,18 @@ // //Progress & Progress Request +DECLARE_SMELEMENT_HEADER( TAwaitingStateChange, MeshMachine::TState, NetStateMachine::MState, TContext ) + virtual TBool Accept(); +DECLARE_SMELEMENT_FOOTER( TAwaitingStateChange ) + DECLARE_SMELEMENT_HEADER( TProcessStateChange, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, TContext ) //From the framework virtual void DoL(); DECLARE_SMELEMENT_FOOTER( TProcessStateChange ) +DECLARE_SMELEMENT_HEADER( TEnqueueStateChange, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, TContext ) //From the framework + virtual void DoL(); +DECLARE_SMELEMENT_FOOTER( TEnqueueStateChange ) + DECLARE_SMELEMENT_HEADER( TProcessProgressRequest, SubSessStates::TECABStateTransitionBase, NetStateMachine::MStateTransition, TContext ) //From the client virtual void DoL(); DECLARE_SMELEMENT_FOOTER( TProcessProgressRequest ) @@ -258,7 +266,9 @@ virtual void DoL(); DECLARE_SMELEMENT_FOOTER( TGenerateConnectionDownProgress ) - +DECLARE_SMELEMENT_HEADER( TGenerateConnectionUninitialisedProgress, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, TContext ) //From the framework + virtual void DoL(); +DECLARE_SMELEMENT_FOOTER( TGenerateConnectionUninitialisedProgress ) diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/inc/ss_nodemessages.h --- a/datacommsserver/esockserver/inc/ss_nodemessages.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/inc/ss_nodemessages.h Mon May 03 13:39:24 2010 +0300 @@ -115,6 +115,23 @@ EXPORT_DATA_VTABLE_AND_FN }; +class TTierTypeIdFactoryQuery : public TFactoryQueryBase + { +public: + IMPORT_C TTierTypeIdFactoryQuery(); + + IMPORT_C explicit TTierTypeIdFactoryQuery(const TUid aTierTypeId); + +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); + +public: + TUid iTierTypeId; + + DECLARE_MVIP_CTR(TTierTypeIdFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + class TDefaultConnectionFactoryQuery : public TFactoryQueryBase /** Class implementing MFactoryQuery to find a connection provider. diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/inc/ss_nodemessages_legacy_internal.h --- a/datacommsserver/esockserver/inc/ss_nodemessages_legacy_internal.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/inc/ss_nodemessages_legacy_internal.h Mon May 03 13:39:24 2010 +0300 @@ -319,6 +319,10 @@ virtual void DoDataSentNotification(TUint32 aSentBytes); virtual void DoDataReceivedNotification(TUint32 aReceivedBytes); +protected: + virtual void DoComplete(TInt aError); + + private: IMPORT_C static CLegacyDataMonitoringResponder* NewL(ESock::RLegacyResponseMsg& aResponseMsg); CLegacyDataMonitoringResponder(ESock::RLegacyResponseMsg& aResponseMsg); diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_DataMonitoringProvider.cpp --- a/datacommsserver/esockserver/ssock/ss_DataMonitoringProvider.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_DataMonitoringProvider.cpp Mon May 03 13:39:24 2010 +0300 @@ -114,8 +114,8 @@ // Ensure this client has not registered before or if it has, any outstanding requests are // marked as cancelled. - TInt requestIdx = iReceivedNotificationRequests.Find(notificationRequest, TIdentityRelation(TNotificationRequest::CompareClientIds)); - if(requestIdx != KErrNotFound && !iReceivedNotificationRequests[requestIdx]->Cancelled()) + TInt requestIdx = iReceivedNotificationRequests.Find(notificationRequest, TIdentityRelation(TNotificationRequest::CompareClientIdsAndCancelledFlag)); + if(requestIdx != KErrNotFound) { delete notificationRequest; CDataMonitoringResponder::Error(aResponder, KErrInUse); @@ -162,14 +162,17 @@ TNotificationRequest exemplarRequest(NULL, aClientId); // Locate the request matching the specified client ID - TInt requestIdx = iReceivedNotificationRequests.Find(&exemplarRequest, TIdentityRelation(TNotificationRequest::CompareClientIds)); - if(requestIdx != KErrNotFound && !iReceivedNotificationRequests[requestIdx]->Cancelled()) + TInt requestIdx = iReceivedNotificationRequests.Find(&exemplarRequest, TIdentityRelation(TNotificationRequest::CompareClientIdsAndCancelledFlag)); + if(requestIdx != KErrNotFound) { TNotificationRequest* notificationRequest = iReceivedNotificationRequests[requestIdx]; // Cancel it and complete the client notificationRequest->SetCancelled(); CDataMonitoringResponder::CancelRequest(notificationRequest->Responder()); + + iReceivedNotificationRequests.Remove(requestIdx); + delete notificationRequest; } } @@ -187,8 +190,8 @@ // Ensure this client has not registered before or if it has, any outstanding requests are // marked as cancelled. - TInt requestIdx = iSentNotificationRequests.Find(notificationRequest, TIdentityRelation(TNotificationRequest::CompareClientIds)); - if(requestIdx != KErrNotFound && !iSentNotificationRequests[requestIdx]->Cancelled()) + TInt requestIdx = iSentNotificationRequests.Find(notificationRequest, TIdentityRelation(TNotificationRequest::CompareClientIdsAndCancelledFlag)); + if(requestIdx != KErrNotFound) { delete notificationRequest; CDataMonitoringResponder::Error(aResponder, KErrInUse); @@ -235,14 +238,17 @@ TNotificationRequest exemplarRequest(NULL, aClientId); // Locate the request matching the specified client id - TInt requestIdx = iSentNotificationRequests.Find(&exemplarRequest, TIdentityRelation(TNotificationRequest::CompareClientIds)); - if(requestIdx != KErrNotFound && !iSentNotificationRequests[requestIdx]->Cancelled()) + TInt requestIdx = iSentNotificationRequests.Find(&exemplarRequest, TIdentityRelation(TNotificationRequest::CompareClientIdsAndCancelledFlag)); + if(requestIdx != KErrNotFound) { TNotificationRequest* notificationRequest = iSentNotificationRequests[requestIdx]; // Cancel it and complete the client notificationRequest->SetCancelled(); CDataMonitoringResponder::CancelRequest(notificationRequest->Responder()); + + iSentNotificationRequests.Remove(requestIdx); + delete notificationRequest; } } @@ -527,6 +533,21 @@ } } +/** + Compares two TNotificationRequest objects using their client ids and the cancelled flag as the criteria. +*/ +TBool TNotificationRequest::CompareClientIdsAndCancelledFlag(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond) + { + if(aFirst.ClientId() == aSecond.ClientId()) + { + return aFirst.Cancelled() == aSecond.Cancelled(); + } + else + { + return EFalse; + } + } + EXPORT_START_ATTRIBUTE_TABLE_AND_FN(TDataMonitoringProvisioningInfoBase, TDataMonitoringProvisioningInfoBase::iUid, TDataMonitoringProvisioningInfoBase::iId) REGISTER_ATTRIBUTE(TDataMonitoringProvisioningInfoBase, iDataVolumesPtr, TMeta) REGISTER_ATTRIBUTE(TDataMonitoringProvisioningInfoBase, iThresholdsPtr, TMeta) diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_conn.cpp --- a/datacommsserver/esockserver/ssock/ss_conn.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_conn.cpp Mon May 03 13:39:24 2010 +0300 @@ -151,8 +151,8 @@ THROUGH_NODEACTIVITY_ENTRY(KErrorTag, ConnActivities::CStartAttachActivity::TSetIdleIfStopOutstanding, MeshMachine::TErrorTag) NODEACTIVITY_ENTRY(KErrorTag, CoreNetStates::TSendClientLeavingRequestToServiceProviders, MeshMachine::TAwaitingLeaveComplete, MeshMachine::TNoTag) - NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSetIdleIfNoServiceProviders, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) - LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) + NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) + LAST_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TGenerateConnectionUninitialisedProgress) NODEACTIVITY_END() } @@ -204,10 +204,10 @@ THROUGH_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TGenerateConnectionDownProgress, MeshMachine::TNoTag) NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendClientLeavingRequestToServiceProviders, MeshMachine::TAwaitingLeaveComplete, MeshMachine::TNoTag) - NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSetIdleIfNoServiceProviders, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) + NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) LAST_NODEACTIVITY_ENTRY(CoreNetStates::KNoBearer, MeshMachine::TDoNothing) - LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) + LAST_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TGenerateConnectionUninitialisedProgress) NODEACTIVITY_END() } @@ -269,22 +269,35 @@ THROUGH_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TCancelAllLegacyRMessage2Activities, ConnStates::TNoTagBlockedByLegacyRMessage2Activities) NODEACTIVITY_ENTRY(KNoTag, ConnStates::TProcessClose, TECABState, MeshMachine::TNoTag) //TDestroyAwaitingLeaveCompleteLoop loops back to its own triple if more SPs - NODEACTIVITY_ENTRY(KNoTag, TECABTransition, TECABState, CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards) - LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) //Never gets here + NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, TECABState, CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards) + LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) NODEACTIVITY_END() } +//-------------------------------------------------- +//Progress/TStateChange activities. +//ConnectionStateChangeNotificationActivity acts on the subscription and completes the client with progresses +//ConnectionStateChangeActivity acts on TStateChange coming from the stack. namespace ConnectionStateChangeNotificationActivity { DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityConnectionStateChangeRequest, ConnectionStateChangeNotification, TCFInternalEsock::TSubSess, CESockClientActivityBase::NewL) FIRST_NODEACTIVITY_ENTRY(SubSessStates::TAwaitingIPC, MeshMachine::TNoTag) THROUGH_NODEACTIVITY_ENTRY(KNoTag, SubSessStates::TAcquireMessageOwnership, MeshMachine::TNoTag) - //TAwaitingStateChangeLoop also cancels the activity when requested - NODEACTIVITY_ENTRY(KNoTag, ConnStates::TProcessProgressRequest, TECABState >, MeshMachine::TNoTagBackward) + NODEACTIVITY_ENTRY(KNoTag, ConnStates::TProcessProgressRequest, TECABState, MeshMachine::TNoTag) + + NODEACTIVITY_ENTRY(KNoTag, ConnStates::TProcessStateChange, TECABState, MeshMachine::TNoTagBackward) LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) //Never gets here NODEACTIVITY_END() } +namespace ConnectionStateChangeActivity +{ +DECLARE_DEFINE_NODEACTIVITY(ECFActivityStateChange, ConnectionStateChange, TCFMessage::TStateChange) + NODEACTIVITY_ENTRY(KNoTag, ConnStates::TEnqueueStateChange, ConnStates::TAwaitingStateChange, MeshMachine::TNoTag) +NODEACTIVITY_END() +} + + namespace ConnectionWaitForIncomingActivity { //Synchronised, waits for Start to complete DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityConnectionWaitForIncoming, ConnectionWaitForIncoming, TCFInternalEsock::TSubSess, CStartAttachActivity::NewWaitForIncomingConnectionActivityL) @@ -297,15 +310,6 @@ NODEACTIVITY_END() } -// -//Activities serving framework requests -namespace ConnectionStateChangeActivity -{ -DECLARE_DEFINE_NODEACTIVITY(ECFActivityStateChange, ConnectionStateChange, TCFMessage::TStateChange) - NODEACTIVITY_ENTRY(KNoTag, ConnStates::TProcessStateChange, MeshMachine::TAwaitingMessageState, MeshMachine::TNoTag) -NODEACTIVITY_END() -} - namespace ConnectionGoingDownActivity { @@ -316,8 +320,8 @@ THROUGH_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TCancelAllLegacyRMessage2Activities, ConnStates::TNoTagBlockedByLegacyRMessage2Activities) THROUGH_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TGenerateConnectionDownProgress, MeshMachine::TNoTag) NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendClientLeavingRequestToServiceProviders, MeshMachine::TAwaitingLeaveComplete, MeshMachine::TNoTag) - NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSetIdleIfNoServiceProviders, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) - LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) + NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, MeshMachine::TAwaitingLeaveComplete, ConnectionCleanupActivities::TNoTagOrNoTagBackwards) + LAST_NODEACTIVITY_ENTRY(KNoTag, ConnStates::TGenerateConnectionUninitialisedProgress) NODEACTIVITY_END() } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_connstates.cpp --- a/datacommsserver/esockserver/ssock/ss_connstates.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_connstates.cpp Mon May 03 13:39:24 2010 +0300 @@ -625,6 +625,159 @@ return EFalse; } + + +//---------------------------------------------------- +//Handling Progress/TStateChange +DEFINE_SMELEMENT(ConnStates::TAwaitingStateChange, NetStateMachine::MState, ConnStates::TContext) +TBool ConnStates::TAwaitingStateChange::Accept() + { + TCFMessage::TStateChange* progressMsg = message_cast(&iContext.iMessage); + if (progressMsg) + { + TStateChange& progress = progressMsg->iStateChange; + + // Check whether KDataTransferUnblocked is received and if yes, then traslate it to KConnectionUp (== KLinkLayerOpen) + // the log only sees the translated version, this goes into the queue, so it alright I suppose. + if (progress.iStage == KDataTransferUnblocked ) + { + progress.iStage = KConnectionUp; // KLinkLayerOpen + } + if (progress.iError == KErrForceDisconnected) + { + progress.iError = KErrDisconnected; + } + + // CConnection trusts that locally generated progresses are to be trusted, + // but some of the legacy progresses coming from the stack need some filtering. + // Here's the filtering. + if (iContext.iSender != iContext.Node().Id()) + { + if (progress.iStage == KConnectionUninitialised) + { + //KConnectionUninitialised has been deprecated in the stack and it will be ignored + //when reported by it. It is still valid towards the application. Here it is being reported by the stack. + //The original KConnectionUninitialised denoted CAgentReference destruction and as such speculated too + //much about the sturcture of the stack (notably: there isn't necesserily an agent anymore. + //As defined KConnectionUninitialised would need to be reported after TCFControlClient::TGoneDown or TCFServiceProvider::TStopped, + //except the stack decomposes after TCFControlClient::TGoneDown or TCFServiceProvider::TStopped and the progress path along with + //it. It is therefore impossible for the stack to generate KConnectionUninitialised after + //TCFControlClient::TGoneDown or TCFServiceProvider::TStopped. CConnection takes over and will generate KConnectionUninitialised + //when detatching from the service providers (see ConnStates::TGenerateConnectionUninitialisedProgress) + LOG( ESockLog::Printf(KESockConnectionTag, _L("CConnection %08x:\tProgressNotification(TInt aStage %d, TInt aError %d) - deprecated progress, ignoring"), + &(iContext.Node()), progress.iStage, progress.iError) ); + progressMsg->ClearMessageId(); + return EFalse; + } + } + LOG( ESockLog::Printf(KESockConnectionTag, _L("CConnection %08x:\tProgressNotification(TInt aStage %d, TInt aError %d)"), + &(iContext.Node()), progress.iStage, progress.iError) ); + + CConnection& cc = iContext.Node(); + if (cc.iLastProgress == progress) + { + progressMsg->ClearMessageId(); + return EFalse; //ignore this duplicate + } + cc.iLastProgress = progress; + + if (progress.iError != KErrNone) + { + cc.iLastProgressError = progress; //Save last progress in error for use by LastProgressErrorL() + } + return ETrue; + } + return EFalse; + } + +//Progress & Progress Request +DEFINE_SMELEMENT(ConnStates::TEnqueueStateChange, NetStateMachine::MStateTransition, ConnStates::TContext) +void ConnStates::TEnqueueStateChange::DoL() + { + TStateChange& progress = message_cast(iContext.iMessage).iStateChange; + //Diagnostic assertion. + + //If ECFActivityConnectionStateChangeRequest is running, it has not been + //presented with the TStateChange message (channel activity id != 0?) which is a serious mistake. + __ASSERT_DEBUG(iContext.Node().CountActivities(ECFActivityConnectionStateChangeRequest)==0, User::Panic(KSpecAssert_ESockSSockscnsts, 9)); + + CConnection& cc = iContext.Node(); +#ifdef ESOCK_LOGGING_ACTIVE + // Check to see if the progress queue is full causing older progress to be discarded. + // This has the potential to cause problems if a critical progress item is lost. + // Normally the queue is large enough such that this doesn't happen but this log entry + // serves as a warning if it ever does. + if( cc.iProgressQueue.IsFull() ) + { + LOG( ESockLog::Printf(KESockConnectionTag, _L("CConnection %08x:\tThe maximum progress queue size of %d has been exceeded - discarding old progress to make space for new item"), this, KMaxProgressQueueLength); ) + } +#endif + + //Add the progress to queue + cc.iProgressQueue.Enque(progress); + } + + +DEFINE_SMELEMENT(ConnStates::TProcessProgressRequest, NetStateMachine::MStateTransition, ConnStates::TContext) +void ConnStates::TProcessProgressRequest::DoL() + { + __ASSERT_DEBUG(iContext.iNodeActivity, ConnPanic(KPanicNoActivity)); + CESockClientActivityBase& ac = static_cast(*iContext.iNodeActivity); + TUint selectedProgressStage = ac.Int1(); + TStateChange progress; + TBool found = EFalse; + + __ASSERT_DEBUG((subsessmessage_cast(&iContext.iMessage)), ConnPanic(KPanicIncorrectMessage)); + + //Process the queue looking for the progress of interest + found = iContext.Node().iProgressQueue.Deque(progress); + if (found && selectedProgressStage != KConnProgressDefault) + { + // For a selected progress request, dequeue entries until we find one which + // matches the criteria. If we dequeue all entries, fall through without + // completing the message. It it not considered useful to retain un-matching + // entries on the queue if a selected progress request is pending. + while (found) + { + if (progress.iStage == selectedProgressStage || progress.iError != KErrNone) + { + break; + } + found = iContext.Node().iProgressQueue.Deque(progress); + } + } + + if (found) + { + //We have found a progress of interest, finish + TPckg progressPkg(progress); + ac.WriteL(0,progressPkg); + ac.SetIdle(); //We are done + } + } + +DEFINE_SMELEMENT(ConnStates::TProcessStateChange, NetStateMachine::MStateTransition, ConnStates::TContext) +void ConnStates::TProcessStateChange::DoL() + { + __ASSERT_DEBUG(iContext.iNodeActivity, ConnPanic(KPanicNoActivity)); + CESockClientActivityBase& ac = static_cast(*iContext.iNodeActivity); + TUint selectedProgressStage = ac.Int1(); + + //Are we here as a result of receiving TStateChange (rather than ECNProgressNotification)? + TCFMessage::TStateChange& progress = message_cast(iContext.iMessage); + + if (selectedProgressStage == KConnProgressDefault || + selectedProgressStage == progress.iStateChange.iStage || + KErrNone != progress.iStateChange.iError) + { + //We have found a progress of interest, finish + TPckg progressPkg(progress.iStateChange); + ac.WriteL(0,progressPkg); + ac.SetIdle(); //We are done + } + } + + DEFINE_SMELEMENT(ConnStates::TGenerateConnectionUpProgress, NetStateMachine::MStateTransition, ConnStates::TContext) void ConnStates::TGenerateConnectionUpProgress::DoL() { @@ -657,119 +810,19 @@ } } -// -//Progress & Progress Request -DEFINE_SMELEMENT(ConnStates::TProcessStateChange, NetStateMachine::MStateTransition, ConnStates::TContext) -void ConnStates::TProcessStateChange::DoL() - { - TStateChange& progress = message_cast(iContext.iMessage).iStateChange; - - //Check whether KDataTransferUnblocked is received and if yes, then traslate it to KConnectionUp (== KLinkLayerOpen) - // the log only sees the translated version, this goes into the queue, so it alright I suppose. - if (progress.iStage == KDataTransferUnblocked ) - { - progress.iStage = KConnectionUp; // KLinkLayerOpen - } - if (progress.iError == KErrForceDisconnected) - { - progress.iError = KErrDisconnected; - } - - LOG( ESockLog::Printf(KESockConnectionTag, _L("CConnection %08x:\tProgressNotification(TInt aStage %d, TInt aError %d)"), - &(iContext.Node()), progress.iStage, progress.iError) ); - - //Diagnostic assertion. - //If ECFActivityConnectionStateChangeRequest is running, it has not been - //presented with the TStateChange message (channel activity id != 0?) which is a serious mistake. - __ASSERT_DEBUG(iContext.Node().CountActivities(ECFActivityConnectionStateChangeRequest)==0, User::Panic(KSpecAssert_ESockSSockscnsts, 9)); - - CConnection& cc = iContext.Node(); - if (cc.iLastProgress == progress) - { - return; //ignore this duplicate - } - cc.iLastProgress = progress; - - if (progress.iError != KErrNone) - { - cc.iLastProgressError = progress; //Save last progress in error for use by LastProgressErrorL() - } - - #ifdef ESOCK_LOGGING_ACTIVE - // Check to see if the progress queue is full causing older progress to be discarded. - // This has the potential to cause problems if a critical progress item is lost. - // Normally the queue is large enough such that this doesn't happen but this log entry - // serves as a warning if it ever does. - if( cc.iProgressQueue.IsFull() ) - { - LOG( ESockLog::Printf(KESockConnectionTag, _L("CConnection %08x:\tThe maximum progress queue size of %d has been exceeded - discarding old progress to make space for new item"), this, KMaxProgressQueueLength); ) - } - #endif - - //Add the progress to queue - cc.iProgressQueue.Enque(progress); - } - -DEFINE_SMELEMENT(ConnStates::TProcessProgressRequest, NetStateMachine::MStateTransition, ConnStates::TContext) -void ConnStates::TProcessProgressRequest::DoL() - { - __ASSERT_DEBUG(iContext.iNodeActivity, ConnPanic(KPanicNoActivity)); - CESockClientActivityBase& ac = static_cast(*iContext.iNodeActivity); - TUint selectedProgressStage = ac.Int1(); - - TStateChange progress; - TBool found = EFalse; - - //Are we here as a result of receiving TStateChange (rather than ECNProgressNotification)? - TCFMessage::TStateChange* msg = message_cast(&iContext.iMessage); - if (msg) - { //Yes, we have been triggered by a TStateChange message - //Check if this is the progress we are waiting for, otherwise dump the progress - //Check whether KDataTransferUnblocked is received and if yes, then traslate it to KConnectionUp (== KLinkLayerOpen) - if (msg->iStateChange.iStage == KDataTransferUnblocked ) - { - msg->iStateChange.iStage = KConnectionUp; // KLinkLayerOpen - } - if (selectedProgressStage == KConnProgressDefault - || selectedProgressStage == msg->iStateChange.iStage - || KErrNone != msg->iStateChange.iError) - { - progress = msg->iStateChange; - found = ETrue; - } - } - else - { //No, we must have been triggered by a ECNProgressNotification message - __ASSERT_DEBUG((subsessmessage_cast(&iContext.iMessage)), ConnPanic(KPanicIncorrectMessage)); - - //Process the queue looking for the progress of interest - found = iContext.Node().iProgressQueue.Deque(progress); - if (found && selectedProgressStage != KConnProgressDefault) - { - // For a selected progress request, dequeue entries until we find one which - // matches the criteria. If we dequeue all entries, fall through without - // completing the message. It it not considered useful to retain un-matching - // entries on the queue if a selected progress request is pending. - while (found) - { - if (progress.iStage == selectedProgressStage || progress.iError != KErrNone) - { - break; - } - found = iContext.Node().iProgressQueue.Deque(progress); - } - } - } - - if (found) - { - //We have found a progress of interest, finish - TPckg progressPkg(progress); - ac.WriteL(0,progressPkg); - ac.SetIdle(); //We are done - } - } - +DEFINE_SMELEMENT(ConnStates::TGenerateConnectionUninitialisedProgress, NetStateMachine::MStateTransition, ConnStates::TContext) +void ConnStates::TGenerateConnectionUninitialisedProgress::DoL() + { + if (iContext.Node().CountActivities(ECFActivityDestroy) == 0) + {//TGenerateConnectionUninitialisedProgress is called when the stack goes away + //below the CConnection's feet and it sometimes goes away because CConnection is + //being ECNClosed and therefore sitting on an electric chair. It is risky, but + //above all uselsess to send the progress when when app clearly doesn't want + //to see it. + TCFMessage::TStateChange msg(TStateChange(KConnectionUninitialised, KErrNone)); + RNodeInterface::OpenPostMessageClose(iContext.Node().Id(), iContext.Node().Id(), msg); + } + } // //Legacy enumeration @@ -1597,8 +1650,6 @@ { if ( iContext.iMessage.IsMessage() ) { -// __ASSERT_DEBUG(iContext.Node().GetClientIter(RNodeInterface::ECtrl|RNodeInterface::EData)[0] == NULL, -// User::Panic(KCorePRPanic, KPanicClientsStillPresent)); if (iContext.Node().GetFirstClient(TCFClientType(TCFClientType::EServProvider)) == NULL) { // This was the last service provider return NetStateMachine::EForward | MeshMachine::KNoTag; diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_nodemessages.cpp --- a/datacommsserver/esockserver/ssock/ss_nodemessages.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_nodemessages.cpp Mon May 03 13:39:24 2010 +0300 @@ -134,6 +134,7 @@ EDefaultSCPRFactoryQuery =1010, EDefaultFlowFactoryQuery =1011, EDefaultProtocolIntfFactoryQuery =1012, + ETierTypeIdFactoryQuery =1013, }; //no need to serialise return value @@ -263,6 +264,10 @@ REGISTER_ATTRIBUTE(TMetaConnectionFactoryQuery, iTierImplUid, TMeta) END_ATTRIBUTE_TABLE() +EXPORT_START_ATTRIBUTE_TABLE_AND_FN(TTierTypeIdFactoryQuery, KESockInternalMessagesImplementationUid, ETierTypeIdFactoryQuery) + REGISTER_ATTRIBUTE(TTierTypeIdFactoryQuery, iTierTypeId, TMeta) +END_ATTRIBUTE_TABLE() + EXPORT_START_ATTRIBUTE_TABLE_AND_FN(TDefaultConnectionFactoryQuery, KESockInternalMessagesImplementationUid, EDefaultConnectionFactoryQuery) REGISTER_ATTRIBUTE(TDefaultConnectionFactoryQuery, iMCprId, TMeta) END_ATTRIBUTE_TABLE() @@ -330,6 +335,7 @@ DEFINE_MVIP_CTR(TDefaultSCPRFactoryQuery) DEFINE_MVIP_CTR(TDefaultFlowFactoryQuery) DEFINE_MVIP_CTR(TDefaultProtocolIntfFactoryQuery) +DEFINE_MVIP_CTR(TTierTypeIdFactoryQuery) const TImplementationProxy SignatureImplementationTable[] = @@ -373,6 +379,7 @@ MVIP_CTR_ENTRY(EDefaultSCPRFactoryQuery, TDefaultSCPRFactoryQuery), //1008 MVIP_CTR_ENTRY(EDefaultFlowFactoryQuery, TDefaultFlowFactoryQuery), MVIP_CTR_ENTRY(EDefaultProtocolIntfFactoryQuery, TDefaultProtocolIntfFactoryQuery), + MVIP_CTR_ENTRY(ETierTypeIdFactoryQuery, TTierTypeIdFactoryQuery), //1013 }; @@ -641,6 +648,23 @@ return prov->ProviderInfo() == iProviderInfo? MFactoryQuery::EMatch : MFactoryQuery::EContinue; } +EXPORT_C TTierTypeIdFactoryQuery::TTierTypeIdFactoryQuery() + { + + } + +EXPORT_C TTierTypeIdFactoryQuery::TTierTypeIdFactoryQuery(const TUid aTierTypeId) +: iTierTypeId(aTierTypeId) + { + + } + +EXPORT_C MFactoryQuery::TMatchResult TTierTypeIdFactoryQuery::Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo) + { + CTierManagerBase* prov = static_cast(aFactoryObjectInfo.iInfo.iFactoryObject); + return prov->TierId() == iTierTypeId ? MFactoryQuery::EMatch : MFactoryQuery::EContinue; + } + EXPORT_C TDefaultConnectionFactoryQuery::TDefaultConnectionFactoryQuery(const Messages::TNodeId& aMCprId) : iMCprId(aMCprId) { diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_nodemessages_legacy.cpp --- a/datacommsserver/esockserver/ssock/ss_nodemessages_legacy.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_nodemessages_legacy.cpp Mon May 03 13:39:24 2010 +0300 @@ -103,18 +103,8 @@ ASSERT(aContext.Activity() != NULL); RNodeInterface* rcpt = NULL; - /* At the connection level we want to go down active serviceprovider, as there are multiple - and the first one is usually an scpr */ - if (aContext.Activity()->ActivitySigId() == ECFActivityConnectionLegacyRMessage2Handler) - { - rcpt = aContext.Node().GetFirstClient(TClientType(TCFClientType::EServProvider, TCFClientType::EActive), + rcpt = aContext.Node().GetFirstClient(TClientType(TCFClientType::EServProvider, TCFClientType::EActive), Messages::TClientType(0, Messages::TClientType::ELeaving)); - } - else - { - rcpt = aContext.Node().GetFirstClient(TClientType(TCFClientType::EServProvider), - Messages::TClientType(0, Messages::TClientType::ELeaving)); - } if(rcpt) { @@ -508,6 +498,11 @@ } +void CLegacyDataMonitoringResponder::DoComplete(TInt aError) + { + iLegacyResponseMsg.Complete(aError); + } + void CLegacyDataMonitoringResponder::DoCancelRequest() { iLegacyResponseMsg.Complete(KErrCancel); @@ -731,9 +726,9 @@ RLegacyResponseMsg responseMsg(aContext, iMessage, iMessage.Int0()); CDataMonitoringResponder* responder = CLegacyDataMonitoringResponder::NewL(responseMsg); - ADataMonitoringProtocolReq& dataMonItf = *static_cast(interface); - switch(iDirection) - { + ADataMonitoringProtocolReq& dataMonItf = *static_cast(interface); + switch(iDirection) + { case ESent: dataMonItf.RequestDataSentNotification(responder, delta, volume, iClientId); break; @@ -741,19 +736,20 @@ case EReceived: dataMonItf.RequestDataReceivedNotification(responder, delta, volume, iClientId); break; + default: delete responder; - } + } // coverity [leaked_storage] - responder is owned by dataMonItf.RequestDataSentNotification, dataMonItf.RequestDataReceivedNotification // therefore we don't need to push them onto the cleanup stack. - } + } void TLegacyDataMonitoringNotificationRequest::Cancel(MeshMachine::TNodeContextBase& aContext) { TAny* interface = FetchInterfaceL(aContext.Node(), EDataMonitoringApiExt); ASSERT(interface); - if (interface) + if (interface) { ADataMonitoringProtocolReq& dataMonItf = *static_cast(interface); diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_roles.cpp --- a/datacommsserver/esockserver/ssock/ss_roles.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_roles.cpp Mon May 03 13:39:24 2010 +0300 @@ -1797,7 +1797,6 @@ else { err = KErrNoMemory; - CleanupStack::Pop(startupInfo); } return err; diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_sapshim.cpp --- a/datacommsserver/esockserver/ssock/ss_sapshim.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_sapshim.cpp Mon May 03 13:39:24 2010 +0300 @@ -1365,18 +1365,11 @@ } else if (iHostResolverNotify) {//workaroud to indicate to CHostResolver we've got connection info - if (aBindTo.iNodeId.Ptr()) - { - iHostResolverNotify->StartSending(); - } - else + if (!aBindTo.iNodeId.Ptr()) { iHostResolverNotify->Error(KErrDisconnected); } } - - - } @@ -1415,6 +1408,13 @@ iStartRequest.Close(); SetStarted(); ClearStopped(); + + // A held-over resolution request will now work (if it ever will) + if (iHostResolverNotify) + { + iHostResolverNotify->StartSending(); + } + return; } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_secpol.cpp --- a/datacommsserver/esockserver/ssock/ss_secpol.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_secpol.cpp Mon May 03 13:39:24 2010 +0300 @@ -166,7 +166,11 @@ */ { - __ASSERT_ALWAYS(aMsg.Function() == ECNControl, Fault(ENotImplementedYet)); + // ECNControl is all we are expecting + if(aMsg.Function() != ECNControl) + { + return EFail; + } TInt optionLevel = aMsg.Int0(); diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_tiermanager.cpp --- a/datacommsserver/esockserver/ssock/ss_tiermanager.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_tiermanager.cpp Mon May 03 13:39:24 2010 +0300 @@ -113,13 +113,21 @@ if (aMessage.IsMessage()) { TCFInternalEsock::TCreateCSR& msg = message_cast(aMessage); - // Maps Tier to ImplId For ECOM since ImplId is used in Factory - CommsDat::CMDBSession* dbs = CommsDat::CMDBSession::NewLC(KCDVersion1_2); - msg.iUid= TierManagerUtils::MapTierIdtoTierImplIdL(msg.iUid, *dbs); - CleanupStack::PopAndDestroy(dbs); - CCommsFactoryBase* factory = static_cast(FindOrCreateFactoryL(msg.iUid)); - TAlwaysFindFactoryQuery query; - CSelectionRequest* sr = CSelectionRequest::NewL(address_cast(aSender), factory->FindOrCreateObjectL(query)->Id()); + TTierTypeIdFactoryQuery tierTypeQuery(msg.iUid); + ACommsFactoryNodeId* obj = Find(tierTypeQuery); // match the address family to tierTypeId in factory container + if (!obj) + { + // object not found, use the commsdat to find the Tier Manager + CommsDat::CMDBSession* dbs = CommsDat::CMDBSession::NewLC(KCDVersion1_2); + // Maps Tier to ImplId For ECOM since ImplId is used in Factory + msg.iUid= TierManagerUtils::MapTierIdtoTierImplIdL(msg.iUid, *dbs); + CleanupStack::PopAndDestroy(dbs); + CCommsFactoryBase* factory = static_cast(FindOrCreateFactoryL(msg.iUid)); + TAlwaysFindFactoryQuery query; // since there is only one Tier Manager per Tier Manager factory, return the first one + obj = factory->FindOrCreateObjectL(query); + } + + CSelectionRequest* sr = CSelectionRequest::NewL(address_cast(aSender), obj->Id()); RClientInterface::OpenPostMessageClose(Id(), aSender, TCFInternalEsock::TCSRCreated(sr->Id()).CRef()); aMessage.ClearMessageId(); } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/ssock/ss_tiermanagerutils.cpp --- a/datacommsserver/esockserver/ssock/ss_tiermanagerutils.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/ssock/ss_tiermanagerutils.cpp Mon May 03 13:39:24 2010 +0300 @@ -738,27 +738,25 @@ EXPORT_C TUid TierManagerUtils::MapTierIdtoTierImplIdL(TUid aTierUid,CommsDat::CMDBSession& aDbs ) /** mapping TM Id to TM ImplId in Commsdat */ { - TUid ImplUid; - // if it does not exist, it returns tier id - ImplUid = aTierUid; + TUid ImplUid; + // if it does not exist, it returns tier id + ImplUid = aTierUid; + + CCDTierRecord* tierRec = static_cast(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord)); + CleanupStack::PushL(tierRec); + tierRec->iRecordTag = aTierUid.iUid; + + TBool found = tierRec->FindL(aDbs); - CMDBRecordSet* recSet = new (ELeave) CMDBRecordSet(KCDTIdTierRecord); - CleanupStack::PushL(recSet); - recSet->LoadL(aDbs); - const TInt recCnt = recSet->iRecords.Count(); - - for(TInt i = 0; i < recCnt; i++) - { - CCDTierRecord* rec = static_cast(recSet->iRecords[i]); - if(rec->iRecordTag == aTierUid.iUid) - { - ImplUid.iUid = rec->iTierImplUid; - } - } - - CleanupStack::PopAndDestroy(recSet); - return ImplUid; - } + if (found) + { + ImplUid.iUid = tierRec->iTierImplUid; + } + + CleanupStack::PopAndDestroy(tierRec); + return ImplUid; + + } // // CCommsDatIapView // diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_EsockTestSteps/inc/Connections.TestSteps.h --- a/datacommsserver/esockserver/test/TE_EsockTestSteps/inc/Connections.TestSteps.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/inc/Connections.TestSteps.h Mon May 03 13:39:24 2010 +0300 @@ -25,6 +25,7 @@ #define CONNECTIONS_TESTSTEPS_H #include +#include #include "Te_EsockStepBase.h" _LIT(KTe_ConnectionName,"ConnName"); @@ -41,6 +42,9 @@ _LIT(KTe_CommDbBearerCSD,"KCommDbBearerCSD"); _LIT(KTe_CommDbBearerWcdma,"KCommDbBearerWcdma"); _LIT(KTe_CommDbBearerLAN,"KCommDbBearerLAN"); +_LIT(KTe_ParameterType, "ParameterType"); +_LIT(KTe_ParameterExpectedValue,"ParameterExpectedValue"); + //mobility api _LIT(KTe_MobilityAPIName,"MobilityExtName"); @@ -424,6 +428,22 @@ _LIT(KCheckNegativeProgressNotificationStep,"CheckNegativeProgressNotificationStep"); +class CGetParameters_IntStep : public CTe_EsockStepBase + { +public: + CGetParameters_IntStep(CCEsockTestBase*& aEsockTest); + TVerdict doSingleTestStep(); + TInt ConfigureFromIni(); +private: + TPtrC iConnectionName; + TPtrC iFieldName; + CommsDat::TMDBElementId iRecordTypeId; + TInt iExpectedValue; + }; + +_LIT(KGetParameters_IntStep,"GetParameters_IntStep"); + + #endif // CONNECTIONS_TESTSTEPS_H diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_EsockTestSteps/inc/EsockTestBase.h --- a/datacommsserver/esockserver/test/TE_EsockTestSteps/inc/EsockTestBase.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/inc/EsockTestBase.h Mon May 03 13:39:24 2010 +0300 @@ -517,6 +517,8 @@ TInt CreateAvailabilityExtension(const TDesC& aAvailabilityExtensionName); TInt RegisterForProgressNotificationEvent(const TEventContainerParams& aParams); TInt ReceiveProgressNotificationEvent(TNifProgress*& aNifProgress, const TDesC& aEventName, TUint aTimeoutInMiliSec = 0); + TInt GetParameters(TPtrC aConnectionName, ESock::CCommsDataObjectBase& aDataObject); + TInt GetIntSetting(TPtrC aConnectionName, const TDesC& aSettingName, TUint32& aValue); //mobility extensions RCommsMobilityApiExt* FindMobilityExtension(const TDesC& aMobilityExtensionName); diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp --- a/datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp Mon May 03 13:39:24 2010 +0300 @@ -22,6 +22,9 @@ #include "SocketServer.TestSteps.h" #include "Sockets.TestSteps.h" #include +#include +#include +#include #ifdef _DEBUG @@ -1205,4 +1208,103 @@ } +// GetParameters_Int +//------------------------------- +CGetParameters_IntStep::CGetParameters_IntStep(CCEsockTestBase*& aEsockTest) +: CTe_EsockStepBase(aEsockTest) + { + SetTestStepName(KGetParameters_IntStep); + } + +TInt CGetParameters_IntStep::ConfigureFromIni() + { + // Read in appropriate fields + if((GetStringFromConfig(iSection, KTe_ConnectionName, iConnectionName) != 1) + || (iConnectionName.Length() == 0)) + { + INFO_PRINTF1(_L("Couldn't find appropriate field in config file")); + return KErrNotFound; + } + + if((GetStringFromConfig(iSection, KTe_ParameterType, iFieldName) != 1) + || (iFieldName.Length() == 0)) + { + INFO_PRINTF1(_L("Couldn't find appropriate field in config file")); + return KErrNotFound; + } + _LIT(KIapTableIdDes, "IAP\\Id" ); + if (iFieldName.Compare(KIapTableIdDes) == 0) + { + iRecordTypeId = CommsDat::KCDTIdIAPRecord | CommsDat::KCDTIdRecordTag; + } + /*else + * Don't get too angry, but so far, this generic looking test step only does IAP + * There are nice arrays in CED that can be used to address any field. If you're + * desperate, please pull them in and modify this test step to be able to retrieve + * any field + */ + + if(!GetIntFromConfig(iSection, KTe_ParameterExpectedValue, iExpectedValue)) + { + INFO_PRINTF1(_L("Couldn't find appropriate field in config file")); + return KErrNotFound; + } + + return KErrNone; + } + + +TVerdict CGetParameters_IntStep::doSingleTestStep() + { + TInt ret = KErrNone; + ESock::XConnectionQuerySet* querySet = NULL; + TRAP(ret, querySet = ESock::XConnectionQuerySet::NewL() ); + + if ( ret == KErrNone ) + { + TRAP(ret, ESock::XUintQuery::NewL(iRecordTypeId, *querySet) ); + } + ESock::CConnectionQuerySet* connectionQuerySet = NULL; + if ( ret == KErrNone ) + { + TRAP(ret, connectionQuerySet = ESock::CConnectionQuerySet::NewL(querySet) ); + } + + if( (ret = iEsockTest->GetParameters(iConnectionName, *connectionQuerySet)) != KErrNone) + { + INFO_PRINTF2(_L("RConnection::GetParameters returned %d"), ret); + SetTestStepError(ret); + return EFail; + } + + ESock::XConnectionQuerySet& outputQuerySet = connectionQuerySet->DataObject(); + ESock::XUintQuery* iapTableIdQuery = static_cast(outputQuerySet.FindQuery( iRecordTypeId )); + __ASSERT_DEBUG(iapTableIdQuery, User::Panic(KSpecAssert_ESockTestCnctnsT, 2)); + if (iapTableIdQuery->Error() != KErrNone) + { + INFO_PRINTF2(_L("RConnection::GetParameters Int query returned (%d)"), iapTableIdQuery->Error()); + SetTestStepError(KErrCorrupt); + return EFail; + } + + if (iapTableIdQuery->Data() != iExpectedValue) + { + INFO_PRINTF3(_L("RConnection::GetParameters Int query returned (%d) something else than expected (%d)"), iapTableIdQuery->Data(), iExpectedValue); + SetTestStepError(KErrCorrupt); + return EFail; + } + + /*Just out of justified paranoia, we're extracting the same field using RConnection::GetIntSetting*/ + TUint32 aValue; + iEsockTest->GetIntSetting(iConnectionName, iFieldName, aValue); + if (aValue != iExpectedValue) + { + INFO_PRINTF3(_L("RConnection::GetIntSetting returned (%d) something else than expected (%d)"), aValue, iExpectedValue); + SetTestStepError(KErrCorrupt); + return EFail; + } + + return EPass; + } + diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_EsockTestSteps/src/EsockTestBase.cpp --- a/datacommsserver/esockserver/test/TE_EsockTestSteps/src/EsockTestBase.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/src/EsockTestBase.cpp Mon May 03 13:39:24 2010 +0300 @@ -1232,6 +1232,23 @@ return KErrNone; } +TInt CCEsockTestBase::GetParameters(TPtrC aConnectionName, ESock::CCommsDataObjectBase& aDataObject) + { + RConnection* c = iConns.Find(aConnectionName); + if (c==NULL) + return KErrNotFound; + return c->GetParameters(aDataObject); + } + +TInt CCEsockTestBase::GetIntSetting(TPtrC aConnectionName, const TDesC& aSettingName, TUint32& aValue) + { + RConnection* c = iConns.Find(aConnectionName); + if (c==NULL) + return KErrNotFound; + return c->GetIntSetting(aSettingName, aValue); + } + + TInt CCEsockTestBase::StartConnection(TRConnectionParams& aParams) { RConnection* c = iConns.Find(aParams.iConnectionName); @@ -2235,6 +2252,8 @@ return ec->iEventReceived.Int(); } + + // //cleanup diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_EsockTestSteps/src/Te_esockteststepsSuiteServer.cpp --- a/datacommsserver/esockserver/test/TE_EsockTestSteps/src/Te_esockteststepsSuiteServer.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/src/Te_esockteststepsSuiteServer.cpp Mon May 03 13:39:24 2010 +0300 @@ -422,6 +422,7 @@ NEW_ESOCK_TESTSTEP(RegisterProgressNotificationStep) NEW_ESOCK_TESTSTEP(CheckProgressNotificationStep) NEW_ESOCK_TESTSTEP(CheckNegativeProgressNotificationStep) + NEW_ESOCK_TESTSTEP(GetParameters_IntStep) return testStep; } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnection/configs/Mobility/Mobility_760645.ini --- a/datacommsserver/esockserver/test/TE_RConnection/configs/Mobility/Mobility_760645.ini Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnection/configs/Mobility/Mobility_760645.ini Mon May 03 13:39:24 2010 +0300 @@ -57,11 +57,13 @@ [MigrateToPreferredCarrier] MobilityExtName=MobExt1 -[RejectNewCarrier] +[AcceptNewCarrier] MobilityExtName=MobExt1 -[AcceptNewCarrier] -MobilityExtName=MobExt1 +[CheckNewIAP] +ConnName=Conn1 +ParameterType=IAP\Id +ParameterExpectedValue=5 [CloseMobilityExtension] MobilityExtName=MobExt1 diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnection/scripts/Mobility/Mobility_760645.script --- a/datacommsserver/esockserver/test/TE_RConnection/scripts/Mobility/Mobility_760645.script Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnection/scripts/Mobility/Mobility_760645.script Mon May 03 13:39:24 2010 +0300 @@ -23,6 +23,7 @@ PRINT Simulate current AP going down, PRINT Receive PreferredCarierAvailable but no KLinkLayerClosed, PRINT Migration to the new AP, +PRINT RConnection::GetParameters(IAP) to check the reported IAP is expected PRINT New AP goes down, reception of KLinkLayerClosed , PRINT RCommsMobilityApiExt::Close() @@ -84,6 +85,10 @@ //Check we did not receive the Klinklayerclosed event RUN_TEST_STEP 100 te_esockteststepsSuite CheckNegativeProgressNotificationStep z:\testdata\configs\BearerMobility\Mobility_760645.ini CheckNegativeProgressNotificationEvent1 +//Check IAP +RUN_TEST_STEP 150 te_esockteststepsSuite GetParameters_IntStep z:\testdata\configs\BearerMobility\Mobility_760645.ini CheckNewIAP + + //Simulate the new access point going down and receive RUN_TEST_STEP 150 te_esockteststepsSuite SetAccessPointAvailabilityStep z:\testdata\configs\BearerMobility\Mobility_760645.ini ChangeAvailabilityDownAp5 diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/config/te_rconnectioncmmtests_NonConnection.script --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/config/te_rconnectioncmmtests_NonConnection.script Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/config/te_rconnectioncmmtests_NonConnection.script Mon May 03 13:39:24 2010 +0300 @@ -274,6 +274,64 @@ test_complete END_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0622 + + +START_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0481 +//! @SYMTestCaseID COMINF-ESOCK-RConnectionSuite-CMM-0481 +//!@SYMTestCaseDesc Data Monitoring cancellation test - sent data notification +// NOTE: If this test fails it can bring down esock when the connection stops (because of the original defect in esock) +run_script z:\TestData\scripts\te_esock_test_unloadesockForced.script +run_script z:\TestData\scripts\te_esock_test_loadesock.script +heap_mark +run_test_step 100, TE_RConnectionSuite Test481 c:\rconnectiontest.ini +heap_markend +test_complete +END_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0481 + + + +START_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0482 +//! @SYMTestCaseID COMINF-ESOCK-RConnectionSuite-CMM-0482 +//!@SYMTestCaseDesc Data Monitoring cancellation test - received data notification +// NOTE: If this test fails it can bring down esock when the connection stops (because of the original defect in esock) +run_script z:\TestData\scripts\te_esock_test_unloadesockForced.script +run_script z:\TestData\scripts\te_esock_test_loadesock.script +heap_mark +run_test_step 100, TE_RConnectionSuite Test482 c:\rconnectiontest.ini +heap_markend +test_complete +END_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0482 + + + +START_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0483 +//! @SYMTestCaseID COMINF-ESOCK-RConnectionSuite-CMM-0483 +//!@SYMTestCaseDesc Data Monitoring cancellation test - sent data notification +// NOTE: If this test fails it can bring down esock when the connection stops (because of the original defect in esock) +run_script z:\TestData\scripts\te_esock_test_unloadesockForced.script +run_script z:\TestData\scripts\te_esock_test_loadesock.script +heap_mark +run_test_step 100, TE_RConnectionSuite Test483 c:\rconnectiontest.ini +heap_markend +test_complete +END_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0483 + + + +START_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0484 +//! @SYMTestCaseID COMINF-ESOCK-RConnectionSuite-CMM-0484 +//!@SYMTestCaseDesc Data Monitoring cancellation test - received data notification +// NOTE: If this test fails it can bring down esock when the connection stops (because of the original defect in esock) +run_script z:\TestData\scripts\te_esock_test_unloadesockForced.script +run_script z:\TestData\scripts\te_esock_test_loadesock.script +heap_mark +run_test_step 100, TE_RConnectionSuite Test484 c:\rconnectiontest.ini +heap_markend +test_complete +END_TESTCASE COMINF-ESOCK-RConnectionSuite-CMM-0484 + + + run_script z:\TestData\scripts\te_esock_test_unloadesockForced.script run_utils MakeReadWrite c:\rconnectiontest.ini diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionCMM.h --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionCMM.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionCMM.h Mon May 03 13:39:24 2010 +0300 @@ -861,6 +861,31 @@ virtual enum TVerdict doTestStepL (); }; +class TE_RConnectionTest481 : public TE_RConnectionStep +{ +public: + virtual enum TVerdict doTestStepL(); +}; + +class TE_RConnectionTest482 : public TE_RConnectionStep +{ +public: + virtual enum TVerdict doTestStepL(); +}; + +class TE_RConnectionTest483 : public TE_RConnectionStep +{ +public: + virtual enum TVerdict doTestStepL(); +}; + +class TE_RConnectionTest484 : public TE_RConnectionStep +{ +public: + virtual enum TVerdict doTestStepL(); +}; + + class TE_RConnectionTest319 : public TE_RConnectionStep { public: diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionStep.h --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionStep.h Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/inc/TE_RConnectionStep.h Mon May 03 13:39:24 2010 +0300 @@ -238,6 +238,13 @@ void WaitForRelevantProgress(RConnection& aConn, TNifProgressBuf& aProgress, TInt aRelevantProgress); + + /** + @param aStatus The TRequestStatus you want to wait on + @param aTimeOut The time in microseconds to wait for the request to complete before returning + @return ETrue if the request completed, EFalse if the timeout happened first + */ + TBool WaitForRequestOrTimeOutL(TRequestStatus& aStatus, TInt aTimeOut); protected: // this is the config data read from the .ini file in ReadIniFile(). diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionCMM.cpp --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionCMM.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionCMM.cpp Mon May 03 13:39:24 2010 +0300 @@ -26,6 +26,7 @@ #include #include + /** * Subconnection Management API extensions * @@ -7269,5 +7270,445 @@ } // TE_RConnectionTest319 + +enum TVerdict TE_RConnectionTest481::doTestStepL(void) +/** + * Test 481 + * Test DataSentNotificationRequest() cancellation + * Added for defect ou1cimx1#305124. + * Tests that cancellation of the request does indeed cancel the request + * Defect summary: was the case that the first cancel cancelled the request but left + * a notification structure in existence. The second cancel would see the structure + * and think that the cancellation had already been done leaving the request outstanding. + * @return enum TVerdict Indicates status of test run. See INFO_PRINTF1.h for possible values + */ +{ + TInt err; + TRequestStatus status1; + + RSocketServ ss; + err = OpenSocketServer(ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(ss); + + //********** connection creation *********** + RConnection conn1; + err = OpenConnection(conn1, ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(conn1); + + // start the dummynif + err = StartConnectionWithOverrides(conn1, iDummyNifLongTimeoutIap); + TESTEL(KErrNone == err, err); + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, ETrue); + TESTEL(KErrNone == err, err); + + RSocket sock1; + err = OpenUdpSocketExplicitL(sock1, ss, conn1); + TESTEL(KErrNone == err, err); + CleanupClosePushL(sock1); + + INFO_PRINTF1(_L("First DataSentNotificationRequest")); + // Request DataSentNotificationRequest + TUint volume1(0); + TPckg volume1Des(volume1); + TUint threshold1(KLowThresholdSize); + conn1.DataSentNotificationRequest(threshold1, volume1Des, status1); + + // Send some data but not enough to trigger the notification + TUint currentVol(0); + while (currentVol < threshold1 / 2) + { + err = TestUdpDataPathL(sock1, iDummyNifSendAddr, KSmallBufferLength); + TESTEL(KErrNone == err, err); + TESTEL(KRequestPending == status1.Int(), status1.Int()); + currentVol += KSmallBufferUdpTestPacketSize; + } + + INFO_PRINTF1(_L("First DataSentNotificationRequest still outstanding (as expected) - now cancelling")); + + // Cancel the request and expect the completion + conn1.DataSentNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + + INFO_PRINTF1(_L("First DataSentNotificationRequest completed with KErrCancel")); + + // The first cancellation has worked, repeat the above steps for the second cancellation + INFO_PRINTF1(_L("Second DataSentNotificationRequest")); + conn1.DataSentNotificationRequest(threshold1, volume1Des, status1); + + // NOTE: It is a deliberate that no data is transfered this time. + // Transmitting data and crossing the threshold for the first (cancelled) notification + // would cause the object to be cleaned up and therefore mask this issue + + // Cancel the request and expect the completion + conn1.DataSentNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Second DataSentNotificationRequest completed with KErrCancel")); + + // NOTE: Reaching here successfully does NOT mean the test has passed. If the data monitoring structures + // have been left behind esock will panic when the connection is stopped + + + //********** turn the idle timers back on now we are finished *********** + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, EFalse); + TESTEL(KErrNone == err, err); + + //********** clean up *********** + DestroyUdpSocket(sock1); + CleanupStack::Pop(&sock1); + + err = conn1.Stop(); + TESTEL(KErrNone == err, err); + + CloseConnection(conn1); + CleanupStack::Pop(&conn1); + + CloseSocketServer(ss); + CleanupStack::Pop(&ss); + + return TestStepResult(); + +} // TE_RConnectionTest481 + + + +enum TVerdict TE_RConnectionTest482::doTestStepL(void) +/** + * Test 482 + * Test DataReceivedNotificationRequest() cancellation + * Added for defect ou1cimx1#305124. + * Tests that cancellation of the request does indeed cancel the request + * Defect summary: was the case that the first cancel cancelled the request but left + * a notification structure in existence. The second cancel would see the structure + * and think that the cancellation had already been done leaving the request outstanding. + * @return enum TVerdict Indicates status of test run. See INFO_PRINTF1.h for possible values + */ +{ + TInt err; + TRequestStatus status1; + + RSocketServ ss; + err = OpenSocketServer(ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(ss); + + //********** connection creation *********** + RConnection conn1; + err = OpenConnection(conn1, ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(conn1); + + // start the dummynif + err = StartConnectionWithOverrides(conn1, iDummyNifLongTimeoutIap); + TESTEL(KErrNone == err, err); + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, ETrue); + TESTEL(KErrNone == err, err); + + RSocket sock1; + err = OpenUdpSocketExplicitL(sock1, ss, conn1); + TESTEL(KErrNone == err, err); + CleanupClosePushL(sock1); + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest")); + // Request DataSentNotificationRequest + TUint volume1(0); + TPckg volume1Des(volume1); + TUint threshold1(KLowThresholdSize); + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status1); + + // Send some data but not enough to trigger the notification + TUint currentVol(0); + while (currentVol < threshold1 / 2) + { + err = TestUdpDataPathL(sock1, iDummyNifSendAddr, KSmallBufferLength); + TESTEL(KErrNone == err, err); + TESTEL(KRequestPending == status1.Int(), status1.Int()); + currentVol += KSmallBufferUdpTestPacketSize; + } + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest still outstanding (as expected) - now cancelling")); + + // Cancel the request and expect the completion + conn1.DataReceivedNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest completed with KErrCancel")); + + // The first cancellation has worked, repeat the above steps for the second cancellation + INFO_PRINTF1(_L("Second DataReceivedNotificationRequest")); + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status1); + + // NOTE: It is a deliberate that no data is transfered this time. + // Transmitting data and crossing the threshold for the first (cancelled) notification + // would cause the object to be cleaned up and therefore mask this issue + + // Cancel the request and expect the completion + conn1.DataReceivedNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Second DataReceivedNotificationRequest completed with KErrCancel")); + + // NOTE: Reaching here successfully does NOT mean the test has passed. If the data monitoring structures + // have been left behind esock will panic when the connection is stopped + + + //********** turn the idle timers back on now we are finished *********** + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, EFalse); + TESTEL(KErrNone == err, err); + + //********** clean up *********** + DestroyUdpSocket(sock1); + CleanupStack::Pop(&sock1); + + err = conn1.Stop(); + TESTEL(KErrNone == err, err); + + CloseConnection(conn1); + CleanupStack::Pop(&conn1); + + CloseSocketServer(ss); + CleanupStack::Pop(&ss); + + return TestStepResult(); + +} // TE_RConnectionTest482 + + + +enum TVerdict TE_RConnectionTest483::doTestStepL(void) +/** + * Test 483 + * Test DataSentNotificationRequest() cancellation + * Added for defect ou1cimx1#305124. + * Tests that cancellation of the request does indeed cancel the request + * Defect summary: If the state described in Test481 occurs, it would have been possible to + * request more than one DataSentNotificationRequest per RConnection. This should not be possible. + * @return enum TVerdict Indicates status of test run. See INFO_PRINTF1.h for possible values + */ +{ + TInt err; + TRequestStatus status1; + + RSocketServ ss; + err = OpenSocketServer(ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(ss); + + //********** connection creation *********** + RConnection conn1; + err = OpenConnection(conn1, ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(conn1); + + // start the dummynif + err = StartConnectionWithOverrides(conn1, iDummyNifLongTimeoutIap); + TESTEL(KErrNone == err, err); + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, ETrue); + TESTEL(KErrNone == err, err); + + RSocket sock1; + err = OpenUdpSocketExplicitL(sock1, ss, conn1); + TESTEL(KErrNone == err, err); + CleanupClosePushL(sock1); + + INFO_PRINTF1(_L("First DataSentNotificationRequest")); + // Request DataSentNotificationRequest + TUint volume1(0); + TPckg volume1Des(volume1); + TUint threshold1(KLowThresholdSize); + conn1.DataSentNotificationRequest(threshold1, volume1Des, status1); + + // Send some data but not enough to trigger the notification + TUint currentVol(0); + while (currentVol < threshold1 / 2) + { + err = TestUdpDataPathL(sock1, iDummyNifSendAddr, KSmallBufferLength); + TESTEL(KErrNone == err, err); + TESTEL(KRequestPending == status1.Int(), status1.Int()); + currentVol += KSmallBufferUdpTestPacketSize; + } + + INFO_PRINTF1(_L("First DataSentNotificationRequest still outstanding (as expected) - now cancelling")); + + // Cancel the request and expect the completion + conn1.DataSentNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + + INFO_PRINTF1(_L("First DataSentNotificationRequest completed with KErrCancel")); + + // The first cancellation has worked, repeat the above steps for the second cancellation + INFO_PRINTF1(_L("Second DataSentNotificationRequest")); + conn1.DataSentNotificationRequest(threshold1, volume1Des, status1); + + // NOTE: It is a deliberate that no data is transfered this time. + // Transmitting data and crossing the threshold for the first (cancelled) notification + // would cause the object to be cleaned up and therefore mask this issue + + // Cancel the request and expect the completion + conn1.DataSentNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Second DataSentNotificationRequest completed with KErrCancel")); + + + INFO_PRINTF1(_L("Third DataSentNotificationRequest")); + conn1.DataSentNotificationRequest(threshold1, volume1Des, status1); + + + INFO_PRINTF1(_L("Fourth DataSentNotificationRequest")); + TRequestStatus status2; + conn1.DataSentNotificationRequest(threshold1, volume1Des, status2); + TBool requestCompleted = WaitForRequestOrTimeOutL(status2, KOneSecondDelay); + TESTL(requestCompleted); + TESTEL(status2.Int() == KErrInUse, status2.Int()); + INFO_PRINTF1(_L("Fourth DataSentNotificationRequest failed with KErrInUse as expected")); + + conn1.DataSentNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Third DataSentNotificationRequest completed with KErrCancel")); + + //********** turn the idle timers back on now we are finished *********** + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, EFalse); + TESTEL(KErrNone == err, err); + + //********** clean up *********** + DestroyUdpSocket(sock1); + CleanupStack::Pop(&sock1); + + err = conn1.Stop(); + TESTEL(KErrNone == err, err); + + CloseConnection(conn1); + CleanupStack::Pop(&conn1); + + CloseSocketServer(ss); + CleanupStack::Pop(&ss); + + return TestStepResult(); + +} // TE_RConnectionTest483 + + +enum TVerdict TE_RConnectionTest484::doTestStepL(void) +/** + * Test 484 + * Test DataReceivedNotificationRequest() cancellation + * Added for defect ou1cimx1#305124. + * Tests that cancellation of the request does indeed cancel the request + * Defect summary: If the state described in Test482 occurs, it would have been possible to + * request more than one DataReceivedNotificationRequest per RConnection. This should not be possible. + * @return enum TVerdict Indicates status of test run. See INFO_PRINTF1.h for possible values + */ +{ + TInt err; + TRequestStatus status1; + + RSocketServ ss; + err = OpenSocketServer(ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(ss); + + //********** connection creation *********** + RConnection conn1; + err = OpenConnection(conn1, ss); + TESTEL(KErrNone == err, err); + CleanupClosePushL(conn1); + + // start the dummynif + err = StartConnectionWithOverrides(conn1, iDummyNifLongTimeoutIap); + TESTEL(KErrNone == err, err); + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, ETrue); + TESTEL(KErrNone == err, err); + + RSocket sock1; + err = OpenUdpSocketExplicitL(sock1, ss, conn1); + TESTEL(KErrNone == err, err); + CleanupClosePushL(sock1); + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest")); + // Request DataReceivedNotificationRequest + TUint volume1(0); + TPckg volume1Des(volume1); + TUint threshold1(KLowThresholdSize); + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status1); + + // Send some data but not enough to trigger the notification + TUint currentVol(0); + while (currentVol < threshold1 / 2) + { + err = TestUdpDataPathL(sock1, iDummyNifSendAddr, KSmallBufferLength); + TESTEL(KErrNone == err, err); + TESTEL(KRequestPending == status1.Int(), status1.Int()); + currentVol += KSmallBufferUdpTestPacketSize; + } + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest still outstanding (as expected) - now cancelling")); + + // Cancel the request and expect the completion + conn1.DataReceivedNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + + INFO_PRINTF1(_L("First DataReceivedNotificationRequest completed with KErrCancel")); + + // The first cancellation has worked, repeat the above steps for the second cancellation + INFO_PRINTF1(_L("Second DataReceivedNotificationRequest")); + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status1); + + // NOTE: It is a deliberate that no data is transfered this time. + // Transmitting data and crossing the threshold for the first (cancelled) notification + // would cause the object to be cleaned up and therefore mask this issue + + // Cancel the request and expect the completion + conn1.DataReceivedNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Second DataReceivedNotificationRequest completed with KErrCancel")); + + + INFO_PRINTF1(_L("Third DataReceivedNotificationRequest")); + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status1); + + INFO_PRINTF1(_L("Fourth DataReceivedNotificationRequest")); + TRequestStatus status2; + conn1.DataReceivedNotificationRequest(threshold1, volume1Des, status2); + TBool requestCompleted = WaitForRequestOrTimeOutL(status2, KOneSecondDelay); + TESTL(requestCompleted); + TESTEL(status2.Int() == KErrInUse, status2.Int()); + INFO_PRINTF1(_L("Fourth DataReceivedNotificationRequest failed with KErrInUse as expected")); + + conn1.DataReceivedNotificationCancel(); + User::WaitForRequest(status1); + TESTEL(status1.Int() == KErrCancel, status1.Int()); + INFO_PRINTF1(_L("Third DataReceivedNotificationRequest completed with KErrCancel")); + + //********** turn the idle timers back on now we are finished *********** + err = conn1.SetOpt(KCOLProvider, KConnDisableTimers, EFalse); + TESTEL(KErrNone == err, err); + + //********** clean up *********** + DestroyUdpSocket(sock1); + CleanupStack::Pop(&sock1); + + err = conn1.Stop(); + TESTEL(KErrNone == err, err); + + CloseConnection(conn1); + CleanupStack::Pop(&conn1); + + CloseSocketServer(ss); + CleanupStack::Pop(&ss); + + return TestStepResult(); + +} // TE_RConnectionTest484 + + // EOF TE_RConnectionCMM.cpp diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionDummyNifTestSteps.cpp --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionDummyNifTestSteps.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionDummyNifTestSteps.cpp Mon May 03 13:39:24 2010 +0300 @@ -232,7 +232,6 @@ void CConnectionTest1b::Start() { INFO_PRINTF1(_L("Starting Connection")); - iConnection.Start(iStatus); SetActive(); } @@ -1948,6 +1947,10 @@ TESTEL(KErrNone == progress().iError, progress().iError); TESTEL(ECsdStartingHangUp == progress().iStage, progress().iStage); + + INFO_PRINTF1(_L("Waiting for KConnectionDown and KConnectionUninitialised. If the test times-out they didn't come (in the right seq).")); + WaitForRelevantProgress(conn1, progress, KConnectionDown); + WaitForRelevantProgress(conn1, progress, KConnectionUninitialised); CloseConnection(conn1); CleanupStack::Pop(); @@ -5088,6 +5091,10 @@ TESTEL(KErrNone == progress().iError, progress().iError); TESTEL(ECsdStartingHangUp == progress().iStage, progress().iStage); + + INFO_PRINTF1(_L("Waiting for KConnectionDown and KConnectionUninitialised. If the test times-out they didn't come (in the right seq).")); + WaitForRelevantProgress(conn1, progress, KConnectionDown); + WaitForRelevantProgress(conn1, progress, KConnectionUninitialised); CloseConnection(conn1); CleanupStack::Pop(); diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionStep.cpp --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionStep.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionStep.cpp Mon May 03 13:39:24 2010 +0300 @@ -1732,6 +1732,27 @@ } +TBool TE_RConnectionStep::WaitForRequestOrTimeOutL(TRequestStatus& aStatus, TInt aTimeOut) + { + RTimer timer; + User::LeaveIfError(timer.CreateLocal()); + + TRequestStatus timerStatus; + timer.After(timerStatus, aTimeOut); + User::WaitForRequest(aStatus, timerStatus); + TBool requestCompleted = EFalse; + + if (timerStatus == KRequestPending) + { + timer.Cancel(); + User::WaitForRequest(timerStatus); + requestCompleted = ETrue; + } + + timer.Close(); + return requestCompleted; + } + /* * Now the stuff for the peculiar tests that need to use QoS diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionSuite.cpp --- a/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionSuite.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionSuite.cpp Mon May 03 13:39:24 2010 +0300 @@ -655,6 +655,14 @@ testStep=new TE_RConnectionTest479(); else if(aStepName.Compare(_L("Test480")) == 0) testStep=new TE_RConnectionTest480(); + else if(aStepName.Compare(_L("Test481")) == 0) + testStep=new TE_RConnectionTest481(); + else if(aStepName.Compare(_L("Test482")) == 0) + testStep=new TE_RConnectionTest482(); + else if(aStepName.Compare(_L("Test483")) == 0) + testStep=new TE_RConnectionTest483(); + else if(aStepName.Compare(_L("Test484")) == 0) + testStep=new TE_RConnectionTest484(); return testStep; } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/util/src/te_esockutilsteps.cpp --- a/datacommsserver/esockserver/test/util/src/te_esockutilsteps.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/util/src/te_esockutilsteps.cpp Mon May 03 13:39:24 2010 +0300 @@ -17,6 +17,7 @@ #include #include "esocktestutils.h" #include +#include #include #include @@ -149,6 +150,16 @@ } #endif + // Explicitly reset pubsub keys used for controlling bearer availability during testing + const TInt KMaxLikelyAvailabilityAccessPoints = 32; + const TInt KDummyNifTestingPubSubUid = 0x10272F42; + INFO_PRINTF1(_L("Resetting availability pubsub keys")); + for(TInt i = 0; i < KMaxLikelyAvailabilityAccessPoints; i++) + { + // Harmless if the key doesn't exist - so we can ignore the return code + RProperty::Set(TUid::Uid(KDummyNifTestingPubSubUid), i, ESock::TAvailabilityStatus::EMaxAvailabilityScore); + } + return TestStepResult(); } diff -r 592244873960 -r e53adc4c49de datacommsserver/esockserver/test/util/src/ts_esockutilsteps.cpp --- a/datacommsserver/esockserver/test/util/src/ts_esockutilsteps.cpp Fri Apr 16 16:15:03 2010 +0300 +++ b/datacommsserver/esockserver/test/util/src/ts_esockutilsteps.cpp Mon May 03 13:39:24 2010 +0300 @@ -14,6 +14,7 @@ // // EPOC includes +#include #include // Test system includes @@ -24,6 +25,7 @@ #include "ts_esockutilsteps.h" #include "esockloader.h" #include "esocktestutils.h" +#include class TTruncateOverflow16 : public TDes16Overflow { @@ -155,6 +157,17 @@ INFO_PRINTF2(_L("UnloadESock returned error %d"), err); } } + + // Explicitly reset pubsub keys used for controlling bearer availability during testing + const TInt KMaxLikelyAvailabilityAccessPoints = 32; + const TInt KDummyNifTestingPubSubUid = 0x10272F42; + INFO_PRINTF1(_L("Resetting availability pubsub keys")); + for(TInt i = 0; i < KMaxLikelyAvailabilityAccessPoints; i++) + { + // Harmless if the key doesn't exist - so we can ignore the return code + RProperty::Set(TUid::Uid(KDummyNifTestingPubSubUid), i, ESock::TAvailabilityStatus::EMaxAvailabilityScore); + } + return verdict; }