diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExAddrQueryDlg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExAddrQueryDlg.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,164 @@ + +// Copyright (c) 2004-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 "SIPExAddrQueryDlg.h" +#include "SIPEx.hrh" +#include +#include +#include + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::NewL +// Creates the class instance and returns it. +// ----------------------------------------------------------------------------- +// +CSIPExAddrQueryDlg* CSIPExAddrQueryDlg::NewL( TDes& aAddr ) + { + CSIPExAddrQueryDlg* self = NewLC( aAddr ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::NewLC +// Creates the class instance and returns it. +// On return the instance is left to the CleanupStack. +// ----------------------------------------------------------------------------- +// +CSIPExAddrQueryDlg* CSIPExAddrQueryDlg::NewLC( TDes& aAddr ) + { + CSIPExAddrQueryDlg* self = new (ELeave) CSIPExAddrQueryDlg( aAddr ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::CSIPExAddrQueryDlg +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CSIPExAddrQueryDlg::CSIPExAddrQueryDlg( TDes& aAddr ) + : iAddress( aAddr ) + { + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::~CSIPExAddrQueryDlg +// Desctructor. +// ----------------------------------------------------------------------------- +// +CSIPExAddrQueryDlg::~CSIPExAddrQueryDlg() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::ConstructL +// Symbian 2nd phase constructor that might leave. +// ----------------------------------------------------------------------------- +// +void CSIPExAddrQueryDlg::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::PreLayoutDynInitL +// From CEikDialog. Initializes the dialog's text control with default address +// if available. +// ----------------------------------------------------------------------------- +// +void CSIPExAddrQueryDlg::PreLayoutDynInitL() + { + if ( iAddress.Length() > 0 ) + { + ( static_cast( + Control( ESIPExInviteAddressId ) ) )->SetTextL( &iAddress ); + } + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::OkToExitL +// From CEikDialog. +// Validates the given address and if not correct notifies user with info +// message. +// ----------------------------------------------------------------------------- +// +TBool CSIPExAddrQueryDlg::OkToExitL( TInt aKeyCode ) + { + TBool isOk( ETrue ); + + if ( aKeyCode == EEikBidOk ) + { + ( static_cast< CEikEdwin* >( + Control( ESIPExInviteAddressId ) ) )->GetText( iAddress ); + + // Check the validity of the given address + TInt err( KErrGeneral ); + + HBufC8* address = HBufC8::NewLC( iAddress.Length() ); + address->Des().Copy( iAddress ); + + if ( !AddressValid( *address ) ) + { + HBufC* txt = + iEikonEnv->AllocReadResourceLC( R_ERROR_IN_ADDRESS_TXT ); + CEikonEnv::Static()->InfoMsg( txt->Des() ); + CleanupStack::PopAndDestroy( txt ); + isOk = EFalse; + } + + CleanupStack::PopAndDestroy( address ); + } + + return isOk; + } + +// ----------------------------------------------------------------------------- +// CSIPExAddrQueryDlg::AddressValid +// Checks if user typed address is valid sip address. +// ----------------------------------------------------------------------------- +// +TBool CSIPExAddrQueryDlg::AddressValid( const TDesC8& aSipAddr ) + { + _LIT8( KTypeSIP, "sip" ); + + TUriParser8 parser; + User::LeaveIfError( parser.Parse( aSipAddr ) ); + 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; + } + +// End of file