--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExProfileQueryDlg.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,658 @@
+
+// Copyright (c) 2005-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:
+//
+
+
+
+// INCLUDES
+#include "SIPExProfileQueryDlg.h"
+#include "SIPEx.hrh"
+#include <sipex.rsg>
+#include <eikenv.h>
+#include <eikchlst.h>
+#include <uri8.h>
+#include <commdb.h>
+#include "ProfileUtil.h"
+
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::NewL
+// Creates the class instance and returns it.
+// -----------------------------------------------------------------------------
+//
+CSIPExProfileQueryDlg* CSIPExProfileQueryDlg::NewL()
+ {
+ CSIPExProfileQueryDlg* self = NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::NewLC
+// Creates the class instance and returns it.
+// On return the instance is left to the CleanupStack.
+// -----------------------------------------------------------------------------
+//
+CSIPExProfileQueryDlg* CSIPExProfileQueryDlg::NewLC( )
+ {
+ CSIPExProfileQueryDlg* self = new (ELeave) CSIPExProfileQueryDlg();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::CSIPExProfileQueryDlg
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CSIPExProfileQueryDlg::CSIPExProfileQueryDlg()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::~CSIPExProfileQueryDlg
+// Desctructor.
+// -----------------------------------------------------------------------------
+//
+CSIPExProfileQueryDlg::~CSIPExProfileQueryDlg()
+ {
+ delete iMProfileRegistry;
+ iAPsUIDs.Close();
+
+ delete iNewProfile;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ProfileRegistryEventOccurred
+// SIP profile event
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::ProfileRegistryEventOccurred(TUint32 aProfileId, TEvent aEvent)
+ {
+ switch(aEvent)
+ {
+ case EProfileCreated:
+ ProfileCreated(aProfileId);
+ break;
+ case EProfileUpdated:
+ case EProfileRegistered:
+ case EProfileDeregistered:
+ case EProfileDestroyed:
+ default:
+ //don't know what to do . Nothing can be done !!!
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ProfileRegistryErrorOccured
+// An asynchronous error has occurred related to SIP profile
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::ProfileRegistryErrorOccurred(
+ TUint32 /*aSIPProfileId*/,
+ TInt /*aError*/)
+ {
+ //TInt err = aError;
+ //TUint32 profId = aSIPProfileId;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ProfileCreated
+// SIP profile creation event
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::ProfileCreated( TUint32 aSIPProfileId )
+ {
+ CSIPManagedProfile* profile = NULL;
+ TUint32 profileId = 0;
+ if(iNewProfile)
+ {
+ TInt err= iNewProfile->GetParameter(KSIPProfileId,profileId);
+ if(err)
+ {
+ //don't know what to do . perhaps nothing can be done
+ return ;
+ }
+ }
+ if ( iNewProfile && aSIPProfileId == profileId )
+ {
+ profile = iNewProfile;
+ iNewProfile = NULL;
+ }
+ else
+ {
+ // Some other application has created a new profile
+ TRAPD( err, profile = static_cast<CSIPManagedProfile*>(
+ iMProfileRegistry->ProfileL( aSIPProfileId ) ) );
+ if ( err )
+ {
+ // Can't fetch the new profile - nothing to do
+ return;
+ }
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ConstructL
+// Symbian 2nd phase constructor that might leave.
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::ConstructL()
+ {
+ iMProfileRegistry = CSIPManagedProfileRegistry::NewL( *this );
+
+ FillDataStructWithDefaultValsL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ProfileData
+// Saves profile to persistent storage
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::SaveProfileL()
+ {
+ // Need to create a new profile
+ CSIPManagedProfile* profile =
+ iMProfileRegistry->CreateL(iProfileData.iServiceProfile);
+ CleanupStack::PushL( profile );
+
+ // Copy attributes to the new profile
+ iNewProfile = profile;
+ profile = CopyDataToProfileL();
+
+ // Set the profile to be default and save sum' settings
+ TInt err= profile->SetParameter(KSIPDefaultProfile,ETrue);
+ User::LeaveIfError(err);
+
+ // Save the profile to persistent storage
+ iMProfileRegistry->SaveL( *profile );
+
+ HBufC* txt = iEikonEnv->AllocReadResourceLC( R_PROFILE_SAVED );
+ CEikonEnv::Static()->InfoMsg( txt->Des() );
+ CleanupStack::PopAndDestroy( txt );
+
+ CleanupStack::Pop(); // profile
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::CopyDataToProfileL
+// Copies data from temporary settings structure to profile
+// -----------------------------------------------------------------------------
+//
+CSIPManagedProfile* CSIPExProfileQueryDlg::CopyDataToProfileL()
+ {
+ CSIPManagedProfile* profile = iNewProfile;
+
+
+ ProfileUtil::CopyProfileAttributesL( profile, iProfileData );
+ ProfileUtil::CopyServerAttributesL(
+ profile, KSIPOutboundProxy, iProfileData.iProxy );
+ ProfileUtil::CopyServerAttributesL(
+ profile, KSIPRegistrar, iProfileData.iRegistrar );
+
+ return profile;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::PreLayoutDynInitL
+// From CEikDialog. Initializes the dialog's text control with default address
+// if available.
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::PreLayoutDynInitL()
+ {
+ if ( iProfileData.iUsername.Length() > 0 )
+ {
+ ( static_cast<CEikEdwin*>(
+ Control( EItemUsername ) ) )->SetTextL( &iProfileData.iUsername );
+ }
+ if ( iProfileData.iProxy.iAddress.Length() > 0 )
+ {
+ ( static_cast<CEikEdwin*>(
+ Control( EProxyServerItemAddr ) ) )->SetTextL( &iProfileData.iProxy.iAddress );
+ }
+ if ( iProfileData.iRegistrar.iAddress.Length() > 0 )
+ {
+ ( static_cast<CEikEdwin*>(
+ Control( ERegistrarServerItemAddr ) ) )->SetTextL( &iProfileData.iRegistrar.iAddress );
+ }
+ // create accesspointid list
+
+ CEikChoiceList* choiceList = static_cast<CEikChoiceList*>(Control(EItemAccesspointid));
+
+ GetAPListL();
+
+ choiceList->SetArrayL(static_cast<MDesCArray*>(iAccesspointids));
+
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::OkToExitL
+// From CEikDialog.
+// Validates the given address and if not correct notifies user with info
+// message.
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::OkToExitL( TInt aKeyCode )
+ {
+ TBool isOk( ETrue );
+
+ if ( aKeyCode == EEikBidOk )
+ {
+ if ( !SetProfileUserNameL( ))
+ {
+ ShowErrorInfoL(EItemUsername);
+ isOk = EFalse;
+ }
+ if ( !SetProfileCompressionL())
+ {
+ ShowErrorInfoL(EItemCompression);
+ isOk = EFalse;
+ }
+ if ( !SetProfileSecurityL())
+ {
+ ShowErrorInfoL(EItemSecurity);
+ isOk = EFalse;
+ }
+ if ( !SetProfileIAPIdL())
+ {
+ ShowErrorInfoL(EItemAccesspointid);
+ isOk = EFalse;
+ }
+ if ( !SetProfileProxyAddressL() || !SetProfileProxyRealmL()
+ || !SetProfileProxyUNameL() || !SetProfileProxyPwL() )
+ {
+ ShowErrorInfoL(EItemProxyServer);
+ isOk = EFalse;
+ }
+ if ( !SetProfileRegistrarAddressL() || !SetProfileRegistrarRealmL()
+ || !SetProfileRegistrarUNameL() || !SetProfileRegistrarPwL() )
+ {
+ ShowErrorInfoL(EItemRegistrarServer);
+ isOk = EFalse;
+ }
+ if (isOk)
+ {
+ SaveProfileL();
+ }
+ }
+ else //if (aKeyCode == EEikBidCancel )
+ {
+ }
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::FillDataStructWithDefaultValsL()
+// Fills the data structures fields with default values
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::FillDataStructWithDefaultValsL()
+ {
+ CEikonEnv* env = CEikonEnv::Static();
+
+ iProfileData.iProviderName =
+ env->AllocReadResourceLC( R_SIP_EX_DEF_PROFILE_NAME )->Des();
+ CleanupStack::PopAndDestroy(); // providerName
+
+ iProfileData.iID = KUnknownProfileIndex;
+ iProfileData.iAPIndex = KDefaultIAP;
+ iProfileData.iCompression = KDefaultCompression;
+ iProfileData.iRegistrationMode = KDefaultRegistration;
+ iProfileData.iSecurity = KDefaultSecurity;
+
+ iProfileData.iUsername =
+ env->AllocReadResourceLC( R_SIP_EX_DEF_USERNAME )->Des();
+ CleanupStack::PopAndDestroy(); // userName
+
+ RArray<TSIPProfileTypeInfo> typeArray;
+ CleanupClosePushL( typeArray );
+ // Get the supported profile types
+ iMProfileRegistry->SupportedProfileTypesL( typeArray );
+
+ if ( typeArray.Count() > 0 )
+ {
+ iProfileData.iServiceProfile = typeArray[0];
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PopAndDestroy(); // typeArray
+
+
+ iProfileData.iProxy.iAddress =
+ env->AllocReadResourceLC( R_SIP_EX_DEF_SERVER_ADDRESS )->Des();
+ CleanupStack::PopAndDestroy(); // addr
+
+ iProfileData.iProxy.iRealm = KEmptyString;
+
+ iProfileData.iProxy.iUsername = KEmptyString;
+
+ iProfileData.iProxy.iLooseRouting = KDefaultLooseRouting;
+ iProfileData.iProxy.iPassword = KEmptyString;
+ iProfileData.iProxy.iPortNumber = KDefaultPortNumber;
+ iProfileData.iProxy.iTransportProtocol = KDefaultTranspProtocol;
+
+ // Initial registrar server settings are the same than with proxy
+ iProfileData.iRegistrar = iProfileData.iProxy;
+ iProfileData.iRegistrar.iLooseRouting = ELooseRoutingOff;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileUserNameL
+// Sets iPublicUName from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileUserNameL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( EItemUsername ) ) )->GetText( iProfileData.iUsername );
+
+ // Check the validity of the given address
+ // TInt err( KErrGeneral );
+
+ HBufC8* address = HBufC8::NewLC( iProfileData.iUsername.Length() );
+ address->Des().Copy( iProfileData.iUsername );
+
+ CleanupStack::PopAndDestroy( address );
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileCompressionL
+// Sets iCompression from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileCompressionL( )
+ {
+ TBool isOk( ETrue );
+ iProfileData.iCompression = ( static_cast< CEikChoiceList* >(
+ Control( EItemCompression ) ) )->CurrentItem();
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileIAPIdL
+// Sets access point Id.
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileIAPIdL( )
+ {
+ TBool isOk( ETrue );
+ iProfileData.iAPIndex = iAPsUIDs[( static_cast< CEikChoiceList* >(
+ Control( EItemAccesspointid ) ) )->CurrentItem()];
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileSecurityL
+// Sets iSecurity from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileSecurityL( )
+ {
+ TBool isOk( ETrue );
+ iProfileData.iSecurity = ( static_cast< CEikChoiceList* >(
+ Control( EItemSecurity ) ) )->CurrentItem();
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileProxyAddressL
+// Sets iProxyAddress from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileProxyAddressL( )
+ {
+ TBool isOk( ETrue );
+
+ HBufC* defBuf = CEikonEnv::Static()->AllocReadResourceLC(
+ R_SIP_EX_DEF_SERVER_ADDRESS );
+
+ ( static_cast<CEikEdwin*>(Control( EProxyServerItemAddr ) ) )->GetText(
+ iProfileData.iProxy.iAddress);
+
+ if (iProfileData.iProxy.iAddress == defBuf->Des())
+ {
+ iProfileData.iProxy.iAddress = KNullDesC;
+ }
+ CleanupStack::PopAndDestroy(); // defBuf
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileProxyRealmL
+// Sets iProxyRealm from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileProxyRealmL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( EProxyServerItemRealm ) ) )->GetText( iProfileData.iProxy.iRealm );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileProxyUNameL
+// Sets iProxyUName from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileProxyUNameL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( EProxyServerItemUsername ) ) )->GetText( iProfileData.iProxy.iUsername );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileProxyPwL
+// Sets iProxyPw from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileProxyPwL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( EProxyServerItemPassword ) ) )->GetText( iProfileData.iProxy.iPassword );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileRegistrarAddressL
+// Sets iRegistrarAddress from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileRegistrarAddressL( )
+ {
+ TBool isOk( ETrue );
+ HBufC* defBuf = CEikonEnv::Static()->AllocReadResourceLC(
+ R_SIP_EX_DEF_SERVER_ADDRESS );
+
+
+ ( static_cast< CEikEdwin* >(
+ Control( ERegistrarServerItemAddr ) ) )->GetText( iProfileData.iRegistrar.iAddress );
+
+ if (iProfileData.iRegistrar.iAddress == defBuf->Des())
+ {
+ iProfileData.iRegistrar.iAddress = KNullDesC;
+ }
+ CleanupStack::PopAndDestroy(); // defBuf
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileRegistrarRealmL
+// Sets iRegistrarRealm from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileRegistrarRealmL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( ERegistrarServerItemRealm ) ) )->GetText( iProfileData.iRegistrar.iRealm );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileRegistrarUNameL
+// Sets iRegistrarUName from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileRegistrarUNameL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( ERegistrarServerItemUsername ) ) )->GetText(
+ iProfileData.iRegistrar.iUsername );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::SetProfileRegistrarPwL
+// Sets iRegistrarPw from CEikDialog .
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::SetProfileRegistrarPwL( )
+ {
+ TBool isOk( ETrue );
+ ( static_cast< CEikEdwin* >(
+ Control( ERegistrarServerItemPassword ) ) )->GetText(
+ iProfileData.iRegistrar.iPassword );
+
+ return isOk;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExProfileQueryDlg::ShowErrorInfo
+// Informs which part is not valid
+// -----------------------------------------------------------------------------
+//
+void CSIPExProfileQueryDlg::ShowErrorInfoL(TProfileSettingItemListItems aItem)
+ {
+ HBufC* txt =0;
+ switch (aItem)
+ {
+ case EItemUsername:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_USERNAME_TXT );
+ break;
+ case EItemCompression:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_COMPRESSION_TXT );
+ break;
+ case EItemSecurity:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_SECURITY_TXT );
+ break;
+ case EItemProxyServer:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_PROXY_TXT );
+ break;
+ case EItemRegistrarServer:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_REGISTRAR_TXT );
+ break;
+ default:
+ txt = iEikonEnv->AllocReadResourceLC( R_ERROR_IN_GENERAL_TXT );
+ break;
+ }
+
+ CEikonEnv::Static()->InfoMsg( txt->Des() );
+ CleanupStack::PopAndDestroy( txt );
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExAddrQueryDlg::AddressValid
+// Checks if user typed address is valid address.
+// -----------------------------------------------------------------------------
+//
+TBool CSIPExProfileQueryDlg::AddressValid( const TDesC8& aAddr )
+ {
+
+ _LIT8( KTypeSIP, "sip" );
+
+ TUriParser8 parser;
+ User::LeaveIfError( parser.Parse( aAddr ) );
+ CUri8* uri8 = CUri8::NewLC( parser );
+
+ TBool valid( ETrue );
+
+ if ( uri8->Uri().Extract( EUriScheme ).CompareF( KTypeSIP() ) != KErrNone )
+ {
+ valid = EFalse;
+ }
+ if ( uri8->Uri().Extract( EUriUserinfo ) == KNullDesC8 )
+ {
+ valid = EFalse;
+ }
+ if ( uri8->Uri().Extract( EUriHost ) == KNullDesC8 )
+ {
+ valid = EFalse;
+ }
+ CleanupStack::PopAndDestroy( uri8 );
+
+ return valid;
+ }
+
+void CSIPExProfileQueryDlg::GetAPListL()
+ {
+ if (iAccesspointids)
+ {
+ iAccesspointids->Reset();
+ delete iAccesspointids;
+ }
+ iAccesspointids = new (ELeave) CDesCArraySeg(100);
+
+ CCommsDatabase* db = CCommsDatabase::NewL();
+ CleanupStack::PushL( db );
+// TUint i( 0 );
+ iAPsUIDs.Reset();
+ CCommsDbTableView* comView = db->OpenTableLC( TPtrC( IAP ) );
+ TInt error1 = comView->GotoFirstRecord();
+ while ( error1 == KErrNone )
+ {
+ TUint32 id( 0 );
+
+ TBuf< KCommsDbSvrMaxColumnNameLength > tmpName;
+
+ comView->ReadUintL( TPtrC( COMMDB_ID ), id );
+ comView->ReadTextL( TPtrC( COMMDB_NAME ), tmpName);
+
+ iAccesspointids->AppendL(tmpName);
+
+ // i++; // To next enumeration
+ User::LeaveIfError( iAPsUIDs.Append( id ) );
+ error1 = comView->GotoNextRecord();
+ }
+ CleanupStack::PopAndDestroy( comView ); // table
+
+ //TInt apCount( iAPsUIDs.Count() );
+ CleanupStack::PopAndDestroy( db ); // db
+
+ }
+
+// End of file