natplugins/natptraversalcontroller/inc/cnattraversalcontroller.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natplugins/natptraversalcontroller/inc/cnattraversalcontroller.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2007 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: 
+*
+*/
+
+#ifndef CNATTRAVERSALCONTROLLER_H
+#define CNATTRAVERSALCONTROLLER_H
+
+// INCLUDES
+#include "natfwstunclientobserver.h"
+#include "sipnattraversalcontroller.h"
+#include "mnattraversalpendingrequestcontainer.h"
+#include "tnattraversalpendingrequest.h"
+#include "nattraversalsocketmanager.h"
+
+// FORWARD DECLARATIONS
+class CNATTraversalSession;
+class CNATTraversalConfig;
+class MNATTraversalSocketUser;
+
+// CLASS DEFINITION
+/**
+* Default implementation of NAT Traversal Controller ECOM plug-in.
+*/
+class CNATTraversalController :
+    public CSIPNATTraversalController,
+    public MNATTraversalPendingRequestContainer,
+    public MSTUNClientObserver,
+    public MNATTraversalSocketManager
+    {
+    public: // Constructors and destructor
+
+        static CNATTraversalController* NewL(TAny* aInitParams);
+
+        ~CNATTraversalController ();
+
+    public: // From CSIPNATTraversalController
+
+        TUint32 ResolvePublicAddrL(
+            TUint32 aIapId,
+            RConnection& aConnection,
+            const TInetAddr& aLocalAddr,
+            const TDesC8& aDomain,
+            RSocket& aSocket,
+            const TInetAddr& aNextHopAddr,
+            MSIPNATBindingObserver* aBindingObserver,
+            MSIPNATTraversalRequestObserver& aRequestObserver );
+
+        void Cancel( TUint32 aRequestId );
+
+        TBool RefreshNATBindingL(
+            RSocket& aSocket,
+            const MSIPNATBindingObserver* aBindingObserver );
+
+        TBool RefreshNATBindingL(
+            CSecureSocket& aSecureSocket,
+            const MSIPNATBindingObserver* aBindingObserver );
+
+        void UpdateNextHop(
+            const TInetAddr& aNextHopAddr,
+            const MSIPNATBindingObserver* aBindingObserver );
+
+        void SocketIdle(
+            TBool aIdle,
+            RSocket& aSocket );
+
+        void SocketIdle(
+            TBool aIdle,
+            CSecureSocket& aSecureSocket );
+
+        void DataReceivedL(
+            const TDesC8& aData,
+            const RSocket& aUdpSocket,
+            TBool& aHandled );
+
+        void FreeResources( TUint32 aIapId );
+
+        void FreeResources( MSIPNATBindingObserver& aBindingObserver );
+
+    public: // From MNATTraversalPendingRequestContainer
+
+        void RequestCompleted( TUint32 aRequestId );
+
+    public: // From MSTUNClientObserver
+
+        void STUNClientInitCompleted( const CSTUNClient& aClient,
+                                      TInt aCompletionCode );
+
+        void STUNBindingEventOccurredL( TSTUNBindingEvent aEvent,
+                                        const CBinding& aBinding );
+
+        void STUNBindingErrorOccurred( const CBinding& aBinding,
+                                       TInt aError );
+
+    public: // From MNATTraveralSocketManager
+
+        TBool AddToSendingQueueL( MNATTraversalSocketUser& aUser );
+
+        void SendingCompleted( MNATTraversalSocketUser& aUser );
+
+    private: // Constructors
+
+        CNATTraversalController( RSocketServ& aSocketServ );
+        void ConstructL();
+
+    private: // New functions
+
+        TUint32 NextRequestId();
+
+        void CreateBindingL(
+            TUint32 aRequestId,
+            CNATTraversalConfig* aConfig,
+            RConnection& aConnection,
+            const TInetAddr& aLocalAddr,
+            RSocket& aUdpSocket,
+            const TInetAddr& aNextHopAddr,
+            MSIPNATBindingObserver& aBindingObserver,
+            MSIPNATTraversalRequestObserver& aRequestObserver,
+            TBool& aAsyncInitiated );
+
+        TInt FindSessionIndex(
+            TUint32 aIapId,
+            const TDesC8& aDomain ) const;
+
+        TBool BindingExists(
+            const MSIPNATBindingObserver* aObserver ) const;
+
+        static void DetachConfigFromSession(TAny* aSession);
+
+        void HandleNextFromSocketUserQueue();
+
+    private: // Data
+
+        RSocketServ& iSocketServ;
+        CDeltaTimer* iDeltaTimer;
+        RArray<TNATTraversalPendingRequest> iPendingRequests;
+        TLinearOrder<TNATTraversalPendingRequest> iRequestOrder;
+        TUint32 iRequestIdCounter;
+        RPointerArray<CNATTraversalSession> iSessions;
+        RPointerArray<MNATTraversalSocketUser> iSocketUserQueue;
+
+    friend class UT_CNATTraversalController;
+    };
+
+#endif // CNATTRAVERSALCONTROLLER_H