diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/Client/Src/sipprofile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/Client/Src/sipprofile.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,465 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Name : sipprofile +// Part of : SIP Profile Client +// implementation +// Version : 1.0 +// INCLUDE FILES +// + + + +#include "sipprofile.h" +#include "sipmanagedprofile.h" +#include "sipprofileregistry.h" +#include "sipconcreteprofile.h" +#include "sipprofiletypeinfo.h" +#include +#include + + +_LIT8(KSIPProfileExtenstionParameter, "%u"); +const TUint KProfileBufferSize = 25; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPProfile::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfile::NewL(CSIPProfileRegistry* aSIPRegistry) + { + CSIPProfile* self = CSIPProfile::NewLC (aSIPRegistry); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfile::NewLC(CSIPProfileRegistry* aSIPRegistry) + { + CSIPProfile* self = new(ELeave)CSIPProfile(aSIPRegistry); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::~CSIPProfile +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfile::~CSIPProfile() + { + if(iSIPProfileRegistry) + { + iSIPProfileRegistry->ProfileDeleted(*this); + } + + delete iSIPProfile; + iSIPProfile = 0; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C const TSIPProfileTypeInfo& CSIPProfile::Type() const + { + return iSIPProfile->ProfileType(); + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TDesC8 const *& aVal) const + { + switch (aParam) + { + case KSIPProviderName: + { + const TDesC8& val= iSIPProfile->ProviderName(); + aVal = &val; + break; + } + case KSIPUserAor: + { + const TDesC8& val = iSIPProfile->AOR(); + aVal = &val; + break; + } + case KSIPPrivateIdentity: + { + const TDesC8& val = iSIPProfile->PrivateIdentity(); + aVal = &val; + break; + } + case KSIPNegotiatedSecurityMechanism: + { + if(iSIPProfileRegistry) + { + TRAPD(err,iSIPProfileRegistry->NegotiatedSecurityMechanismL(*iSIPProfile)); + if (err != KErrNone) + { + return err; + } + } + const TDesC8& val = iSIPProfile->NegotiatedSecurityMechanism(); + aVal = &val; + break; + } + case KSIPProfileId: + case KSIPAccessPointId: + case KSIPSigComp: + case KSIPSecurityNegotiation: + case KSIPAutoRegistration: + case KSIPProfileRegistered: + case KSIPRegisteredAors: + case KSIPDefaultProfile: + case KSIPContactHeaderParams: + case KSIPRegistrar: + case KSIPOutboundProxy: + case KSIPDigestUserName: + case KSIPDigestRealm: + case KSIPServerAddress: + case KSIPDigestPassword: + { + return KErrNotFound; + } + default: + { + return iSIPProfile->ExtensionParameter(aParam, aVal); + } + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TUint32& aVal) const + { + TInt res(KErrNone); + switch (aParam) + { + case KSIPProfileId: + aVal = ((iSIPProfile != 0)?iSIPProfile->Id():0); + break; + case KSIPAccessPointId: + aVal = iSIPProfile->IapId(); + break; + case KSIPSnapId: + // Explicit check for SNAP ID inorder to return default SNAP in case of KMaxTUint32. + { + res = iSIPProfile->ExtensionParameter(aParam, aVal); + if(aVal == KMaxTUint32) + { + TRAPD(err,DefaultSNAPL(aVal)); + if (err) + { + return err; + } + } + break; + } + + default: + //If aParam is one of the predefined values (e.g. KSIPSigComp), + //it won't be found and ExtensionParameter returns KErrNotFound. + return iSIPProfile->ExtensionParameter(aParam, aVal); + } + return res; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TBool& aVal) const + { + switch (aParam) + { + case KSIPSigComp: + aVal = iSIPProfile->IsSigCompEnabled(); + break; + case KSIPAutoRegistration: + aVal = iSIPProfile->IsAutoRegistrationEnabled(); + break; + case KSIPSecurityNegotiation: + aVal = iSIPProfile->IsSecurityNegotiationEnabled(); + break; + case KSIPProfileRegistered: + aVal = (iSIPProfile->Status() == CSIPConcreteProfile::ERegistered); + break; + case KSIPDefaultProfile: + if(iSIPProfileRegistry) + { + TRAPD(err, aVal = iSIPProfileRegistry->IsDefaultProfileL(*this)); + if (err) + { + return err; + } + } + + break; + default: + //If aParam is one of the predefined values it won't be found and + //ExtensionParameter returns KErrNotFound. + return iSIPProfile->ExtensionParameter(aParam, aVal); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, + MDesC8Array const *& aVal) const + { + switch (aParam) + { + case KSIPRegisteredAors: + { + if(iSIPProfileRegistry) + { + TRAPD(err, iSIPProfileRegistry->RegisteredAORsL(*iSIPProfile)); + if (err != KErrNone) + { + return err; + } + } + const MDesC8Array& array = iSIPProfile->RegisteredAORs(); + aVal = &array; + } + break; + case KSIPContactHeaderParams: + { + const MDesC8Array& array = iSIPProfile->ContactHeaderParams(); + aVal = &array; + } + break; + case KSIPHeaders: + { + const MDesC8Array& array = iSIPProfile->SIPHeaders(); + aVal = &array; + } + break; + default: + //If aParam is one of the predefined values (e.g. KSIPRegistrar), + //it won't be found and ExtensionParameter returns KErrNotFound. + return iSIPProfile->ExtensionParameter(aParam, aVal); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aServerType, + TUint32 aParam, TDesC8 const *& aVal) const + { + switch (aParam) + { + case KSIPDigestRealm: + case KSIPDigestUserName: + { + const TDesC8& val = iSIPProfile->ServerParameter(aServerType, aParam); + aVal = &val; + break; + } + case KSIPServerAddress: + { + const TDesC8& val = iSIPProfile->Server(aServerType); + aVal = &val; + break; + } + + case KSIPDigestPassword: + { + return KErrPermissionDenied; + } + + case KSIPProfileId: + case KSIPProviderName: + case KSIPAccessPointId: + case KSIPSigComp: + case KSIPSecurityNegotiation: + case KSIPAutoRegistration: + case KSIPUserAor: + case KSIPProfileRegistered: + case KSIPRegisteredAors: + case KSIPNegotiatedSecurityMechanism: + case KSIPDefaultProfile: + case KSIPContactHeaderParams: + case KSIPRegistrar: + case KSIPOutboundProxy: + case KSIPPrivateIdentity: + case KSIPSoIpTOS: + { + return KErrNotFound; + } + default: + { + TBuf8 buf; + buf.Format(KSIPProfileExtenstionParameter, aParam); + const TDesC8& val = iSIPProfile->ServerExtensionParameter( + aServerType, buf); + aVal = &val; + break; + } + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::CSIPProfile +// ----------------------------------------------------------------------------- +// +CSIPProfile::CSIPProfile(CSIPProfileRegistryBase* aRegistry): + iSIPProfileRegistry(aRegistry), iEnabled(EFalse) + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPProfile::ConstructL() + { + iSIPProfile = CSIPConcreteProfile::NewL(); + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::SetEnabled +// ----------------------------------------------------------------------------- +// +void CSIPProfile::SetEnabled(TBool aEnabled) + { + iEnabled = aEnabled; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::SetConcreteProfile +// ----------------------------------------------------------------------------- +// +void CSIPProfile::SetConcreteProfile(CSIPConcreteProfile* aProfile) + { + delete iSIPProfile; + iSIPProfile = aProfile; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ClearConcreteProfile +// ----------------------------------------------------------------------------- +// +void CSIPProfile::ClearConcreteProfile() + { + iSIPProfile = 0; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ConcreteProfile +// ----------------------------------------------------------------------------- +// +CSIPConcreteProfile& CSIPProfile::ConcreteProfile() + { + return *iSIPProfile; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ConcreteProfile +// ----------------------------------------------------------------------------- +// +const CSIPConcreteProfile& CSIPProfile::ConcreteProfile() const + { + return *iSIPProfile; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::IsEnabled +// ----------------------------------------------------------------------------- +// +TBool CSIPProfile::IsEnabled() const + { + return iEnabled; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::LastRegistrationError +// ----------------------------------------------------------------------------- +// +TInt CSIPProfile::LastRegistrationError() const + { + return iSIPProfile->LastRegistrationError(); + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::SetRegistry +// ----------------------------------------------------------------------------- +// +void CSIPProfile::SetRegistry(CSIPProfileRegistryBase* aRegistry) + { + iSIPProfileRegistry = aRegistry; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ClearRegistry +// ----------------------------------------------------------------------------- +// +void CSIPProfile::ClearRegistry() + { + iSIPProfileRegistry = 0; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::IsContextActive +// ----------------------------------------------------------------------------- +// +TBool CSIPProfile::IsContextActive() const + { + return (iEnabled && iSIPProfile->Status() == CSIPConcreteProfile::ERegistered); + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ContextId +// ----------------------------------------------------------------------------- +// +TUint32 CSIPProfile::ContextId() const + { + return iSIPProfile->ContextId(); + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::DefaultSNAPL +// ----------------------------------------------------------------------------- +// +void CSIPProfile::DefaultSNAPL(TUint32& aSnapId) const + + { + RCmManager cmManager; + cmManager.OpenL(); + CleanupClosePushL(cmManager); + TCmDefConnValue defConn; + cmManager.ReadDefConnL( defConn ); + aSnapId = defConn.iId; + CleanupStack::PopAndDestroy(); + } +