diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExIMDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExIMDialog.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,167 @@ + +// 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 "SIPExIMDialog.h" +#include "SIPEx.hrh" +#include +#include +#include + + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::NewL +// Static constructor +// ----------------------------------------------------------------------------- +// +CSIPExIMDialog* CSIPExIMDialog::NewL( TDes& aAddress, TDes& aMsg ) + { + CSIPExIMDialog* self = NewLC( aAddress, aMsg ); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::NewLC +// Static constructor. On return the instance is left to the CleanupStack. +// ----------------------------------------------------------------------------- +// +CSIPExIMDialog* CSIPExIMDialog::NewLC( TDes& aAddress, TDes& aMsg ) + { + CSIPExIMDialog* self = new (ELeave) CSIPExIMDialog( aAddress, aMsg ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::CSIPExIMDialog +// C++ default constructor. Initializes the member variables with default values +// from client. +// ----------------------------------------------------------------------------- +// +CSIPExIMDialog::CSIPExIMDialog( TDes& aAddress, TDes& aMsg ) + : iAddress( aAddress ), iMsg( aMsg ) + { + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::~CSIPExIMDialog +// Destructor +// ----------------------------------------------------------------------------- +// +CSIPExIMDialog::~CSIPExIMDialog() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::ConstructL +// Symbian 2nd phase constructor that might leave. +// ----------------------------------------------------------------------------- +// +void CSIPExIMDialog::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::PreLayoutDynInitL +// From CEikDialog. Called before drawing the dialog. +// If address variable has used earlier use that value as default. +// ----------------------------------------------------------------------------- +// +void CSIPExIMDialog::PreLayoutDynInitL() + { + if( iAddress.Length() > 0 ) + { + ( static_cast( + Control( ESIPExIMAddressLineId ) ) )->SetTextL( &iAddress ); + } + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::OkToExitL +// From CEikDialog. Called when user presses dialog's button. +// Validates the given address and if not correct notifies user with info +// message. The length of the message is limited in resource file to 256. +// The limitation is not in SIP implementation. +// ----------------------------------------------------------------------------- +// +TBool CSIPExIMDialog::OkToExitL(TInt aKeyCode) + { + TBool isOk( ETrue ); + + if( aKeyCode == EEikBidOk ) + { + ( static_cast( + Control( ESIPExIMMessageLineId ) ) )->GetText( iMsg ); + ( static_cast( + Control( ESIPExIMAddressLineId ) ) )->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; + } + +// ----------------------------------------------------------------------------- +// CSIPExIMDialog::AddressValid +// Checks if user typed address is valid sip address. +// ----------------------------------------------------------------------------- +// +TBool CSIPExIMDialog::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