# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1268649970 -7200 # Node ID db85996de7c4851018975c59523e0b8b02c7f2b4 # Parent c64cefac6e994935cd9ae1e51cbf110f8ec4e0cb Revision: 201010 Kit: 201010 diff -r c64cefac6e99 -r db85996de7c4 linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp --- a/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscpractivities.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -24,6 +24,7 @@ //#include #include #include +#include #include "agentscprstates.h" #include "agentscpractivities.h" @@ -94,17 +95,51 @@ NODEACTIVITY_END() } +#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW +namespace AgentSCprParamRequestActivity +{ +DECLARE_DEFINE_NODEACTIVITY(ECFActivityParamRequest, AgentSCprParamRequest, TCFScpr::TSetParamsRequest) + FIRST_NODEACTIVITY_ENTRY(PRStates::TAwaitingParamRequest, CoreNetStates::TNoTagOrBearerPresent) + NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, PRStates::TPassToServiceProvider, CoreNetStates::TAwaitingParamResponse, MeshMachine::TTag) + LAST_NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, PRStates::TStoreParamsAndPostToOriginators) + LAST_NODEACTIVITY_ENTRY(KNoTag, PRStates::TRespondWithCurrentParams) +NODEACTIVITY_END() +} +#endif //#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW +namespace AgentSCprDestroyActivity +{ +//Overridden destroy for cleaning up the agent if its still about +DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityDestroy, AgentSCprDestroy, Messages::TEChild::TDestroy, CoreActivities::CDestroyActivity::New) + FIRST_NODEACTIVITY_ENTRY(MeshMachine::TAwaitingDestroy, CoreActivities::CDestroyActivity::TNoTagBlockedByActivitiesOrLeavingDataClient) + + ROUTING_NODEACTIVITY_ENTRY(KNoTag, AgentSCprStates::TNoTagOrProviderStopped) + NODEACTIVITY_ENTRY(KNoTag, AgentSCprStates::TStopAgent, AgentSCprStates::TAwaitingAgentDown, MeshMachine::TTag) + ROUTING_NODEACTIVITY_ENTRY(CoreNetStates::KProviderStopped, CoreStates::TNoTagOrNoClients) + + //The node mustn't go out of scope with clients present. The node must get rid of them first. + NODEACTIVITY_ENTRY(KNoTag, CoreActivities::CDestroyActivity::TMakeClientsLeaveOrProcessClientLeave, CoreStates::TAwaitingClientLeave, CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards) + THROUGH_NODEACTIVITY_ENTRY(KNoTag, CoreActivities::CDestroyActivity::TProcessClientLeave, TTag) + + THROUGH_NODEACTIVITY_ENTRY(CoreNetStates::KNoClients, PRStates::TProcessDestroy, MeshMachine::TNoTag) + NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, MeshMachine::TAwaitingLeaveComplete, CoreActivities::CDestroyActivity::TNoTagOrNoTagBackwards) + LAST_NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendClientLeavingAndRemoveControlProvider) +NODEACTIVITY_END() +} // Activity Map namespace AgentSCprActivities { DEFINE_EXPORT_ACTIVITY_MAP(agentSCprActivities) + ACTIVITY_MAP_ENTRY(AgentSCprDestroyActivity, AgentSCprDestroy) ACTIVITY_MAP_ENTRY(AgentSCprNotificationFromFlowActivity, AgentSCprNotificationFromFlow) ACTIVITY_MAP_ENTRY(AgentSCprAuthenticationActivity, AgentSCprAuthentication) ACTIVITY_MAP_ENTRY(AgentSCprDataClientGoneDownActivity, AgentSCprDataClientGoneDown) ACTIVITY_MAP_ENTRY(AgentSCprStartActivity, AgentSCprStart) ACTIVITY_MAP_ENTRY(AgentSCprStopActivity, AgentSCprStop) ACTIVITY_MAP_ENTRY(AgentSCprDataClientStoppedActivity, AgentSCprDataClientStopped) +#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW + ACTIVITY_MAP_ENTRY(AgentSCprParamRequestActivity, AgentSCprParamRequest) +#endif //#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW ACTIVITY_MAP_END_BASE(SCprActivities, coreSCprActivities) } diff -r c64cefac6e99 -r db85996de7c4 linklayercontrol/networkinterfacemgr/agentprcore/src/agentscprstates.cpp --- a/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscprstates.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/linklayercontrol/networkinterfacemgr/agentprcore/src/agentscprstates.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -235,7 +235,8 @@ } else { - // TODO: SCpr Panic - unexpected message + // coming from destroy + reason = KErrAbort; } iContext.Node().SetActivityIdForAdapter(iContext.iNodeActivity->ActivityId()); diff -r c64cefac6e99 -r db85996de7c4 linklayercontrol/networkinterfacemgr/group/agentpr.mmp --- a/linklayercontrol/networkinterfacemgr/group/agentpr.mmp Fri Mar 12 15:50:43 2010 +0200 +++ b/linklayercontrol/networkinterfacemgr/group/agentpr.mmp Mon Mar 15 12:46:10 2010 +0200 @@ -44,7 +44,6 @@ USERINCLUDE ../agentpr/inc USERINCLUDE ../agentprcore/inc -USERINCLUDE ../../../../commsfw/datacommsserver/esockserver/inc OS_LAYER_SYSTEMINCLUDE_SYMBIAN diff -r c64cefac6e99 -r db85996de7c4 linklayercontrol/networkinterfacemgr/group/agentprcore.mmp --- a/linklayercontrol/networkinterfacemgr/group/agentprcore.mmp Fri Mar 12 15:50:43 2010 +0200 +++ b/linklayercontrol/networkinterfacemgr/group/agentprcore.mmp Mon Mar 15 12:46:10 2010 +0200 @@ -47,8 +47,6 @@ USERINCLUDE ../inc USERINCLUDE ../agentprcore/inc -USERINCLUDE ../../../../commsfw/datacommsserver/esockserver/inc - OS_LAYER_SYSTEMINCLUDE_SYMBIAN diff -r c64cefac6e99 -r db85996de7c4 networkcontrol/ipnetworklayer/inc/IPProtoCPR.h --- a/networkcontrol/ipnetworklayer/inc/IPProtoCPR.h Fri Mar 12 15:50:43 2010 +0200 +++ b/networkcontrol/ipnetworklayer/inc/IPProtoCPR.h Mon Mar 15 12:46:10 2010 +0200 @@ -47,7 +47,7 @@ class TLinkDown; class TLinkUp; class TStoreAndForwardStateChange; - + class TSendStoppedAndGoneDown; } namespace ESock @@ -91,6 +91,7 @@ friend class IpProtoCpr::TLinkDown; friend class IpProtoCpr::TLinkUp; friend class IpProtoCpr::TStoreAndForwardStateChange; +friend class IpProtoCpr::TSendStoppedAndGoneDown; friend class CLinkCprExtensionApi; @@ -125,6 +126,9 @@ virtual void EnumerateSubConnections(ESock::CLegacyEnumerateSubConnectionsResponder*& aResponder); virtual void GetSubConnectionInfo(TSubConnectionInfo &aInfo); + TInt iProvisionError; + ESock::TDataMonitoringSubConnProvisioningInfo* iSubConnProvisioningInfo; + protected: enum TTimerType { ETimerUnknown, ETimerShort, ETimerMedium, ETimerLong, ETimerImmediate, ETimerMax }; diff -r c64cefac6e99 -r db85996de7c4 networkcontrol/ipnetworklayer/inc/IPProtoCprStates.h --- a/networkcontrol/ipnetworklayer/inc/IPProtoCprStates.h Fri Mar 12 15:50:43 2010 +0200 +++ b/networkcontrol/ipnetworklayer/inc/IPProtoCprStates.h Mon Mar 15 12:46:10 2010 +0200 @@ -41,9 +41,17 @@ virtual void DoL(); DECLARE_SMELEMENT_FOOTER( TStoreProvision ) - +DECLARE_SMELEMENT_HEADER( TSendStoppedAndGoneDown, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, IpProtoCpr::TContext ) + virtual void DoL(); +DECLARE_SMELEMENT_FOOTER( TSendStoppedAndGoneDown ) +DECLARE_SMELEMENT_HEADER( TProvisionActivation, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, IpProtoCpr::TContext ) + virtual void DoL(); +DECLARE_SMELEMENT_FOOTER( TProvisionActivation ) +DECLARE_SMELEMENT_HEADER( THandleProvisionError, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, IpProtoCpr::TContext ) + virtual void DoL(); +DECLARE_SMELEMENT_FOOTER( THandleProvisionError ) DECLARE_SMELEMENT_HEADER( TStoreAndFilterDeprecatedAndForwardStateChange, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, IpProtoCpr::TContext ) diff -r c64cefac6e99 -r db85996de7c4 networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp --- a/networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -75,7 +75,9 @@ { DECLARE_DEFINE_NODEACTIVITY(ECFActivityStoreProvision, IPProtoCprProvision, TCFDataClient::TProvisionConfig) FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingProvision, MeshMachine::TNoTag) + THROUGH_NODEACTIVITY_ENTRY(KNoTag, IpProtoCpr::TProvisionActivation, MeshMachine::TNoTagOrErrorTag) LAST_NODEACTIVITY_ENTRY(KNoTag, IpProtoCpr::TStoreProvision) + LAST_NODEACTIVITY_ENTRY(KErrorTag, IpProtoCpr::THandleProvisionError) NODEACTIVITY_END() } @@ -220,6 +222,18 @@ NODEACTIVITY_END() } +namespace IPProtoCprStopActivity +{ +DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStop, IPProtoCprStop, TCFServiceProvider::TStop, MeshMachine::CNodeRetryActivity::NewL) + FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingStop, CoreNetStates::TActiveOrNoTagBlockedByBindTo) + THROUGH_NODEACTIVITY_ENTRY(KActiveTag, CoreNetStates::TCancelDataClientStart, MeshMachine::TNoTag) + NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TStopSelf, CoreNetStates::TAwaitingDataClientStopped, CoreNetStates::TNoTagOrNoBearer) + NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendStop, CoreNetStates::TAwaitingStopped, MeshMachine::TNoTag) + NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendClientLeavingRequestToServiceProvider, MeshMachine::TAwaitingLeaveComplete, TTag) + LAST_NODEACTIVITY_ENTRY(CoreNetStates::KNoBearer, IpProtoCpr::TSendStoppedAndGoneDown) +NODEACTIVITY_END() +} + namespace IPProtoCprActivities { DECLARE_DEFINE_ACTIVITY_MAP(activityMap) @@ -235,6 +249,7 @@ ACTIVITY_MAP_ENTRY(PRDataClientIdleActivity, PRDataClientIdle) ACTIVITY_MAP_ENTRY(IPProtoCprClientLeaveActivity, IPProtoCprClientLeave) ACTIVITY_MAP_ENTRY(IPProtoCprIoctlActivity, IPProtoCprIoctl) + ACTIVITY_MAP_ENTRY(IPProtoCprStopActivity, IPProtoCprStop) #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW ACTIVITY_MAP_ENTRY(IPProtoCprNotificationActivity, IPProtoCprNotification) #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW diff -r c64cefac6e99 -r db85996de7c4 networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp --- a/networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -37,12 +37,29 @@ #include #include #include +#include using namespace Messages; using namespace MeshMachine; using namespace IpProtoCpr; using namespace ESock; +DEFINE_SMELEMENT(TProvisionActivation, NetStateMachine::MStateTransition, IpProtoCpr::TContext) +void TProvisionActivation::DoL() + { + CIPProtoConnectionProvider& node = iContext.Node(); + + //Trap if memory allocation fails + TRAP( node.iProvisionError, node.iSubConnProvisioningInfo = new (ELeave) TDataMonitoringSubConnProvisioningInfo(NULL, NULL)); + } + +DEFINE_SMELEMENT(THandleProvisionError, NetStateMachine::MStateTransition, IpProtoCpr::TContext) +void THandleProvisionError::DoL() + { + //Set node error + iContext.iNodeActivity->SetError(iContext.Node().iProvisionError); + } + DEFINE_SMELEMENT(TStoreProvision, NetStateMachine::MStateTransition, IpProtoCpr::TContext) void TStoreProvision::DoL() { @@ -83,10 +100,13 @@ // state and one in an active state. The access point config cannot presently hold provisioning information // specific to an SCPR instance, so it is allocated and managed here in the CPR as a shared entity. Only // one SCPR instance should be using this at a time, however. - TDataMonitoringSubConnProvisioningInfo* subConnProvisioningInfo = new (ELeave) TDataMonitoringSubConnProvisioningInfo(NULL, NULL); - CleanupStack::PushL(subConnProvisioningInfo); - node.iNodeLocalExtensions.AppendExtensionL(subConnProvisioningInfo); - CleanupStack::Pop(subConnProvisioningInfo); + + //this allocation taken care in previous activity entry + //just append here + //TDataMonitoringSubConnProvisioningInfo* subConnProvisioningInfo = new (ELeave) TDataMonitoringSubConnProvisioningInfo(NULL, NULL); + CleanupStack::PushL(node.iSubConnProvisioningInfo); + node.iNodeLocalExtensions.AppendExtensionL(node.iSubConnProvisioningInfo); + CleanupStack::Pop(node.iSubConnProvisioningInfo); // The CLinkCprExtensionApi may have been added previously if this is a reconnect scenario // We add it again in this new override of the extensions, if the old container is fully superceded @@ -122,6 +142,85 @@ } } +DEFINE_SMELEMENT(TSendStoppedAndGoneDown, NetStateMachine::MStateTransition, IpProtoCpr::TContext) +void TSendStoppedAndGoneDown::DoL() + { + ASSERT(iContext.iNodeActivity); + + // stop has been caused by timer expiry, remove self from originators list, because we + // are not waiting for TStopped and in certain situations it would arrive after the node has been + // destroyed + if (iContext.Node().iTimerExpired) + { + TInt selfidx = iContext.iNodeActivity->FindOriginator(iContext.Node().SelfInterface()); + ASSERT(selfidx != KErrNotFound); + iContext.iNodeActivity->RemoveOriginator(selfidx); + } + + TInt stopCode = KErrCancel; + MeshMachine::CNodeActivityBase* activity = iContext.iNodeActivity; + + if (activity && activity->Error() != KErrNone) + { + stopCode = activity->Error(); + activity->SetError(KErrNone); + } + + // Could be TStop, TStopped or TDataClientStopped (usually TStopped) + if ( (iContext.iMessage.IsMessage()) || + (iContext.iMessage.IsMessage()) || + (iContext.iMessage.IsMessage()) || + (iContext.iMessage.IsMessage()) ) + { + stopCode = static_cast(iContext.iMessage).iValue; + } + else if ( (iContext.iMessage.IsMessage()) || + (iContext.iMessage.IsMessage()) ) + { + stopCode = static_cast(iContext.iMessage).iValue1; + } + else if ( iContext.iMessage.IsMessage() ) + { + // Action must be propagate or there is no error code (your activity flow is faulty)! + const Messages::TSigErrResponse& sig = static_cast(iContext.iMessage); + __ASSERT_DEBUG(sig.iErrResponse.iAction == Messages::TErrResponse::EPropagate, User::Invariant()); + stopCode = sig.iErrResponse.iError; + } + + TCFServiceProvider::TStopped msg(stopCode); + iContext.iNodeActivity->PostToOriginators(msg); + + const TProviderInfo& providerInfo = static_cast(iContext.Node().AccessPointConfig().FindExtensionL( + STypeId::CreateSTypeId(TProviderInfoExt::EUid, TProviderInfoExt::ETypeId))).iProviderInfo; + + TCFControlClient::TGoneDown goneDown(stopCode, providerInfo.APId()); + TClientIter iter = iContext.Node().GetClientIter(TClientType(TCFClientType::ECtrl)); + CNodeActivityBase* startActivity = iContext.Node().FindActivityById(ECFActivityStart); + + for (TInt i = 0; iter[i]; i++) + { + //Send TGoneDown to every Ctrl client except + // * the originator (who would be recieving TStopped) + // * originators of the start activity (these will be errored separately) + if (iContext.iNodeActivity && iContext.iNodeActivity->FindOriginator(*iter[i]) >= 0) + { + continue; // ControlClient is a Stop originator + } + + // So far the control client is not a Stop originator + if (startActivity == NULL || startActivity->FindOriginator(*iter[i]) == KErrNotFound) + { + // ControlClient is not a Start originator + iter[i]->PostMessage(TNodeCtxId(iContext.ActivityId(), iContext.NodeId()), goneDown); + } + } + + if (iContext.iNodeActivity) + { + iContext.iNodeActivity->SetError(KErrNone); + } + } + DEFINE_SMELEMENT(TAwaitingDataMonitoringNotification, NetStateMachine::MState, IpProtoCpr::TContext) TBool TAwaitingDataMonitoringNotification::Accept() { diff -r c64cefac6e99 -r db85996de7c4 networkcontrol/iptransportlayer/src/policyrequeststates.cpp --- a/networkcontrol/iptransportlayer/src/policyrequeststates.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networkcontrol/iptransportlayer/src/policyrequeststates.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -152,7 +153,7 @@ if(cpr) { iContext.iNodeActivity->PostRequestTo(*cpr, - TCFDataClient::TBindToComplete(iContext.iNodeActivity->Error()).CRef()); + TCFServiceProvider::TBindToComplete(iContext.iNodeActivity->Error()).CRef()); } } diff -r c64cefac6e99 -r db85996de7c4 networksecurity/ipsec/ipsec6/include/crypto.h --- a/networksecurity/ipsec/ipsec6/include/crypto.h Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/ipsec/ipsec6/include/crypto.h Mon Mar 15 12:46:10 2010 +0200 @@ -84,9 +84,9 @@ #include #include -#include "cryptospidef.h" +#include #include "cryptosymmetriccipherapi.h" -#include "cryptomacapi.h" +#include /** // The protocol number for a library. diff -r c64cefac6e99 -r db85996de7c4 networksecurity/ipsec/ipsec6/src/sa_crypt.cpp --- a/networksecurity/ipsec/ipsec6/src/sa_crypt.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/ipsec/ipsec6/src/sa_crypt.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -27,9 +27,10 @@ #include #include "ipseccrypto.h" #include "keys.h" -#include "cryptospidef.h" +#include + #ifdef SYMBIAN_IPSEC_VOIP_SUPPORT -#include "cryptomacapi.h" +#include #endif //SYMBIAN_IPSEC_VOIP_SUPPORT class TLibraryPtr diff -r c64cefac6e99 -r db85996de7c4 networksecurity/ipsec/ipseccrypto/inc/ipseccrypto.h --- a/networksecurity/ipsec/ipseccrypto/inc/ipseccrypto.h Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/ipsec/ipseccrypto/inc/ipseccrypto.h Mon Mar 15 12:46:10 2010 +0200 @@ -24,7 +24,7 @@ #include #ifdef SYMBIAN_IPSEC_VOIP_SUPPORT #include "cryptosymmetriccipherapi.h" -#include "cryptomacapi.h" +#include #endif // SYMBIAN_IPSEC_VOIP_SUPPORT typedef enum diff -r c64cefac6e99 -r db85996de7c4 networksecurity/ipsec/ipseccrypto/src/ipseccrypto_prt.cpp --- a/networksecurity/ipsec/ipseccrypto/src/ipseccrypto_prt.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/ipsec/ipseccrypto/src/ipseccrypto_prt.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -24,14 +24,15 @@ #include #include "keys.h" -#include "cryptospidef.h" +#include + #include "cryptosymmetriccipherapi.h" #ifdef SYMBIAN_IPSEC_VOIP_SUPPORT #include "ruleselector.h" #include "plugincharacteristics.h" #include "cryptospistateapi.h" #include "cryptoparams.h" -#include "cryptomacapi.h" +#include using namespace CryptoSpi; #endif // SYMBIAN_IPSEC_VOIP_SUPPORT diff -r c64cefac6e99 -r db85996de7c4 networksecurity/tlsprovider/Test/group/TlsProvtestServer.mmp --- a/networksecurity/tlsprovider/Test/group/TlsProvtestServer.mmp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/tlsprovider/Test/group/TlsProvtestServer.mmp Mon Mar 15 12:46:10 2010 +0200 @@ -47,9 +47,6 @@ SYSTEMINCLUDE /epoc32/include/mw #endif -USERINCLUDE ../../../../../security/crypto/weakcrypto/inc - - LIBRARY euser.lib LIBRARY testexecuteutils.lib LIBRARY efsrv.lib diff -r c64cefac6e99 -r db85996de7c4 networksecurity/tlsprovider/group/swtlstokentypeplugin.mmp --- a/networksecurity/tlsprovider/group/swtlstokentypeplugin.mmp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/tlsprovider/group/swtlstokentypeplugin.mmp Mon Mar 15 12:46:10 2010 +0200 @@ -33,7 +33,7 @@ SOURCE swtlstokenprovider.cpp swtlssessioncache.cpp swtlstoken_log.cpp USERINCLUDE ../inc -USERINCLUDE ../../../../security/crypto/weakcrypto/inc + OS_LAYER_SYSTEMINCLUDE_SYMBIAN diff -r c64cefac6e99 -r db85996de7c4 networksecurity/tlsprovider/group/tlsprovider.mmp --- a/networksecurity/tlsprovider/group/tlsprovider.mmp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/tlsprovider/group/tlsprovider.mmp Mon Mar 15 12:46:10 2010 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -33,7 +33,7 @@ SOURCE tlsprovider_log.cpp tlsproviderpolicy.cpp USERINCLUDE ../inc -USERINCLUDE ../../../../security/crypto/weakcrypto/inc + OS_LAYER_SYSTEMINCLUDE_SYMBIAN LIBRARY euser.lib pkixcert.lib @@ -42,7 +42,8 @@ LIBRARY crypto.lib LIBRARY ctframework.lib LIBRARY certstore.lib -//LIBRARY estor.lib x500.lib asn1.lib +LIBRARY asn1.lib +//LIBRARY estor.lib x500.lib //LIBRARY bigint.lib LIBRARY hash.lib LIBRARY random.lib diff -r c64cefac6e99 -r db85996de7c4 networksecurity/tlsprovider/inc/tlsprovider.h --- a/networksecurity/tlsprovider/inc/tlsprovider.h Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/tlsprovider/inc/tlsprovider.h Mon Mar 15 12:46:10 2010 +0200 @@ -430,6 +430,7 @@ void ShowUntrustedDialogL(const TValidationStatus aResult); void HandleBadCertificateL(const TValidationStatus aResult); TBool CheckExtendedKeyUsageL(const CX509Certificate& aSource); + HBufC* ExtractCertFieldL(const TDesC& aFieldName, const CX500DistinguishedName& aDistinguishedName); //Active Handlers void OnEGetSession(); diff -r c64cefac6e99 -r db85996de7c4 networksecurity/tlsprovider/source/tlsprovider/CTlsProvider.cpp --- a/networksecurity/tlsprovider/source/tlsprovider/CTlsProvider.cpp Fri Mar 12 15:50:43 2010 +0200 +++ b/networksecurity/tlsprovider/source/tlsprovider/CTlsProvider.cpp Mon Mar 15 12:46:10 2010 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -18,6 +18,7 @@ #include #include #include +#include #include "tlsprovider.h" #include "cryptostrength.h" @@ -480,6 +481,44 @@ return; } +// This patch is to fix-up the Common Name component of the Subject field. +// This is due to a bug in TASN1DecBMPString::DecodeContentsL which is incorrectly decoding the BMP String contents. +// Since fixing TASN1DecBMPString would cause a major break in public API, this fix-up is being done here locally. +// This patch is active only if the encoding is in BMP String. If TASN1DecBMPString::DecodeContentsL is ever fixed (which +// means CX500DistinguishedName::DisplayNameL is also automatically fixed) then this patch MUST to be removed. + +HBufC* CTlsProviderImpl::ExtractCertFieldL(const TDesC& aFieldName, const CX500DistinguishedName& aDistinguishedName) + { + TInt count = aDistinguishedName.Count(); + for (TInt i = 0; i < count; i++) + { + const CX520AttributeTypeAndValue& ava = aDistinguishedName.Element(i); + if (ava.Type() == aFieldName) + { + HBufC* res = ava.ValueL(); + CleanupStack::PushL(res); + TPtr pRes = res->Des(); + TUint8* data = const_cast(reinterpret_cast(res->Ptr())); + TUint len = pRes.Length()*2; + TASN1DecGeneric gen(ava.EncodedValue()); + gen.InitL(); + if (gen.Tag() == EASN1BMPString) + { + // Bmp String internally store them as little endian, as a string we want it big + // endian interchange least and most significent byte + for(TUint i=0; i