nettools/conntest/src/ConnTestAppUi.cpp
changeset 0 857a3e953887
child 21 4b172782dca4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nettools/conntest/src/ConnTestAppUi.cpp	Thu Dec 17 08:39:25 2009 +0200
@@ -0,0 +1,368 @@
+/*
+* Copyright (c) 2006-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: The application UI class for ConnTest
+*
+*/
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <AknsUtils.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h> 
+#include <CMessageData.h>
+#include <TSendingCapabilities.h> 
+#include <sendui.h>
+
+#include "ConnTestAppUi.h"
+#include "ConnTestView.h"
+#include <ConnTest.rsg>
+#include "conntest.hrh"
+#include "SettingData.h"
+#include "ipdumpengine.h"
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------------
+// CConnTestAppUi::ConstructL()
+// Default Symbian two phase constructor
+// ----------------------------------------------------------
+//
+void CConnTestAppUi::ConstructL()
+    {
+    RDebug::Print(_L("ConnTest: CConnTestAppUi::ConstructL()"));
+    BaseConstructL();
+
+    AknsUtils::SetAvkonSkinEnabledL( ETrue );
+
+    // Show tabs for main views from resources
+    CEikStatusPane* sp = StatusPane();
+
+    // Fetch pointer to the default navi pane control
+    iNaviPane = (CAknNavigationControlContainer*)sp->ControlL( 
+            TUid::Uid(EEikStatusPaneUidNavi));
+
+    // Tabgroup has been read from resource and it were pushed to the navi pane. 
+    // Get pointer to the navigation decorator with the ResourceDecorator() function. 
+    // Application owns the decorator and it has responsibility to delete the object.
+    iDecoratedTabGroup = iNaviPane->ResourceDecorator();
+    if (iDecoratedTabGroup)
+        {
+        iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
+        }
+
+    TUid uid;
+    CConnTestView* view1;
+
+    // Create views; each view has same UI, but the data differs.
+    for(TInt i = 1; i <= KConnTestViews; i++)
+        {
+        RDebug::Print(_L("ConnTest: CConnTestAppUi::ConstructL() View=%d"), i);
+        uid.iUid = i;
+        view1 = new (ELeave) CConnTestView(uid, iSettingDataArray[i-1], iCustomPrefsDataArray[i-1]);
+        CleanupStack::PushL( view1 );
+        view1->ConstructL();
+        AddViewL( view1 );      // transfer ownership to CAknViewAppUi
+        CleanupStack::Pop(view1);    // view1
+
+        iConnTestViews.Append(view1);
+        // First view must be set to default, otherwise views and their
+        // data are not in sync.
+        if(i == 1)
+            {
+            SetDefaultViewL(*view1);
+            }
+        }
+    }
+
+
+// ----------------------------------------------------
+// CConnTestAppUi::CConnTestAppUi()
+// Constructor
+// ----------------------------------------------------
+//
+CConnTestAppUi::CConnTestAppUi(
+        TFixedArray<CSettingData*, KConnTestViews>& aSettings,
+        TFixedArray<CCustomPrefsData*, KConnTestViews>& aCustomPrefs)
+    : iSettingDataArray(aSettings), iCustomPrefsDataArray(aCustomPrefs)
+    {
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::~CConnTestAppUi()
+// Destructor
+// Frees reserved resources
+// ----------------------------------------------------
+//
+CConnTestAppUi::~CConnTestAppUi()
+    {
+    RDebug::Print(_L("ConnTest: CConnTestAppUi::~CConnTestAppUi"));
+    if(iIpdumpEngine)
+        {
+        delete iIpdumpEngine;
+        iIpdumpEngine = NULL;
+        }
+    delete iDecoratedTabGroup;
+    iConnTestViews.Reset();
+    delete iSendUi;
+    // currently used with ->ExecuteLD, so deleted automatically elsewhere
+    // delete iWarningDialog;
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::IsLogging() 
+// Is the ip packet logging on
+// ----------------------------------------------------
+//
+TBool CConnTestAppUi::IsLogging()
+    {
+    TBool res = EFalse;
+    if(iIpdumpEngine)
+        res = iIpdumpEngine->LoggingEnabled();
+    return res;
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::HandleStatusPaneSizeChange() 
+// This is called when ever the screen size has changed
+// Takes care that the view components are resized
+// ----------------------------------------------------
+//
+void CConnTestAppUi::HandleStatusPaneSizeChange()
+    {
+    CAknViewAppUi::HandleStatusPaneSizeChange();
+    for (TInt i = 0; i < KConnTestViews; i++)
+        {
+        iConnTestViews[i]->SizeChanged();
+        }
+    }
+
+// ------------------------------------------------------------------------------
+// CConnTestAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+//  This function is called by the EIKON framework just before it displays
+//  a menu pane. Its default implementation is empty, and by overriding it,
+//  the application can set the state of menu items dynamically according
+//  to the state of application data.
+// ------------------------------------------------------------------------------
+//
+void CConnTestAppUi::DynInitMenuPaneL(TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/)
+    {
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::HandleCommandL(TInt aCommand)
+// Handles some of the users commands.
+// ----------------------------------------------------
+//
+void CConnTestAppUi::HandleCommandL(TInt aCommand)
+    {
+    switch ( aCommand )
+        {
+        // Parallel GET
+        case EConnTestCmdParallelGet:
+            {
+
+            TInt viewCount = 2;
+            CAknNumberQueryDialog* dlg =
+            CAknNumberQueryDialog::NewL(viewCount);
+            if( dlg->ExecuteLD(R_CONNTEST_PARALLEL_NUMBER_LAYOUT))
+                {
+                // ask engine to handle combining.
+                if ((viewCount > 0) && (viewCount <= KConnTestViews))
+                    {
+                    ParallelGetL(viewCount);
+                    }
+                }
+            }
+            break;
+            // Start logging
+        case EConnTestCmdStartIpLog:
+            StartIpLoggingL();
+            break;
+            // Stop logging
+        case EConnTestCmdStopIpLog:
+            StopIpLoggingL();
+            break;
+            // Send log
+        case EConnTestCmdSendIpLog:
+            SendLogFileL();
+            break;
+
+        case EEikCmdExit:
+            SaveL();
+            Exit();
+            break;
+
+        default:
+            break;      
+        }
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::HandleKeyEventL(
+//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
+// Handles UI key events.
+// ----------------------------------------------------
+//
+TKeyResponse CConnTestAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent,
+                                              TEventCode /*aType*/ )
+    {
+    if (!iTabGroup)
+        {
+        return EKeyWasNotConsumed;
+        }
+
+    TInt active = iTabGroup->ActiveTabIndex();
+    TInt count = iTabGroup->TabCount();
+
+    switch ( aKeyEvent.iCode )
+        {
+        case EKeyLeftArrow:
+            if ( active > 0 )
+                {
+                active--;
+                RDebug::Print(_L("ConnTest: CConnTestAppUi::HandleKeyEventL Switching to view %d"), active);
+                iTabGroup->SetActiveTabByIndex( active );
+                ActivateLocalViewL(TUid::Uid(iTabGroup->TabIdFromIndex(active)));
+                }
+            break;
+        case EKeyRightArrow:
+            if( (active + 1) < count )
+                {
+                active++;
+                RDebug::Print(_L("ConnTest: CConnTestAppUi::HandleKeyEventL Switching to view %d"), active);
+                iTabGroup->SetActiveTabByIndex( active );
+                ActivateLocalViewL(TUid::Uid(iTabGroup->TabIdFromIndex(active)));
+                }
+            break;
+        default:
+            return EKeyWasNotConsumed;
+            // break; get rid of cmpiler warning
+        }
+
+    return EKeyWasConsumed;
+    }
+
+// ----------------------------------------------------------------------------
+// CConnTestView::ParallelGet
+// Executes multiple HTTP gets over socket
+// ----------------------------------------------------------------------------
+//
+void CConnTestAppUi::ParallelGetL(TInt aCount)
+    {
+    for (TInt i = 0; i < aCount; i++)
+        {
+        if (!iConnTestViews[i]->IsReadyForHTTPGet())
+            {
+            _LIT(KWarning, "Not enough open connections" );
+            iWarningDialog = new (ELeave) CAknWarningNote(&iWarningDialog);
+            // notice, will be deleted automatically
+            iWarningDialog->ExecuteLD(KWarning);
+            return;
+            }
+        iConnTestViews[i]->HandleCommandL(EConnTestCmdSendPerformanceHttpGet);
+        }
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::SendLogFileL() 
+// Launches the send ui for the ip log
+// ----------------------------------------------------
+//
+void CConnTestAppUi::SendLogFileL()
+    {
+    if(!iIpdumpEngine)
+        {
+        iIpdumpEngine = CIpdumpEngine::NewL();                   
+        }
+    if(!iSendUi)
+        {
+        iSendUi = CSendUi::NewL();   
+        }
+    CMessageData* messageData = CMessageData::NewL();
+    CleanupStack::PushL(messageData);
+
+    // 
+    // Since CSendUi doesn't support sending .log or .cap files, 
+    // the file is renamed here.
+    //
+    _LIT(KNewName, "c:\\logs\\tcpdump\\probe.cap.txt"); 
+    RFs fs;
+    if (fs.Connect() == KErrNone)
+        {
+        fs.Replace(iIpdumpEngine->LogFileName(), KNewName);
+        }
+    fs.Close();
+
+    messageData->AppendAttachmentL(KNewName); 
+
+    TSendingCapabilities cap(0, 1024, TSendingCapabilities::ESupportsAttachments);
+    iSendUi->ShowQueryAndSendL(messageData, cap);
+    CleanupStack::PopAndDestroy(messageData); // messageData
+    }
+
+// ----------------------------------------------------
+// CConnTestAppUi::StartIpLoggingL() 
+// Starts the logging of the ip traffic
+// ----------------------------------------------------
+//
+void CConnTestAppUi::StartIpLoggingL()
+{
+    _LIT(KLogEnabled, "IP logging enabled: " );
+    _LIT(KLogError, "Error %d starting logging, Protocol not loaded. Try rebooting." );
+
+    if(!iIpdumpEngine)
+    {
+        iIpdumpEngine = CIpdumpEngine::NewL();                   
+    }
+    if(!iIpdumpEngine->LoggingEnabled())
+    {
+        
+        TRAPD(r, iIpdumpEngine->EnableLoggingL());
+        if(r == KErrNone)
+        {
+        	TBuf<256> tt;
+			tt.Format(KLogEnabled);
+		    tt.Append(iIpdumpEngine->LogFileName());
+
+            CAknInformationNote* note = new (ELeave) CAknInformationNote();
+            note->ExecuteLD(tt); 
+        }
+        else
+        {
+        	TBuf<64> tt;
+			tt.Format(KLogError, r);
+	        iWarningDialog = new (ELeave) CAknWarningNote(&iWarningDialog);
+	        // notice, will be deleted automatically
+            iWarningDialog->ExecuteLD(tt);
+        }
+    }
+}
+
+// ----------------------------------------------------
+// CConnTestAppUi::StopIpLoggingL() 
+// Stops the logging of the ip traffic
+// ----------------------------------------------------
+//
+void CConnTestAppUi::StopIpLoggingL()
+{
+    _LIT(KLogDisabled, "IP logging disabled" );
+    if(iIpdumpEngine && iIpdumpEngine->LoggingEnabled())
+    {
+		iIpdumpEngine->DisableLogging();
+        CAknInformationNote* note = new (ELeave) CAknInformationNote();
+        note->ExecuteLD(KLogDisabled); 
+    }
+}
+
+// End of File