realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExIMDialog.cpp
changeset 0 307788aac0a8
--- /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    <sipex.rsg>
+#include    <eikenv.h>
+#include    <uri8.h>
+
+
+// -----------------------------------------------------------------------------
+// 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<CEikEdwin*>( 
+            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<CEikEdwin*>( 
+            Control( ESIPExIMMessageLineId ) ) )->GetText( iMsg );
+        ( static_cast<CEikEdwin*>( 
+            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