upnp/upnpstack/dlnawebserver/inc/upnptcpserver.h
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/dlnawebserver/inc/upnptcpserver.h	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,355 @@
+/** @file
+* Copyright (c) 2005-2006 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:  Declares main application classes
+*
+*/
+
+
+#ifndef C_CUPNPTCPSERVER_H
+#define C_CUPNPTCPSERVER_H
+
+// INCLUDES
+#include "upnpcompvariant.hrh"
+
+#include <e32base.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <commdbconnpref.h>
+
+#include "upnpnotifytimer.h"
+#include "upnpconnectionmanagerproxy.h"
+
+// FORWARD DECLARATIONS
+class CUpnpTcpSession;
+class MUpnpHttpServerTransactionCreator;
+class CUpnpDlnaFilter;
+
+
+#ifdef RD_UPNP_REMOTE_ACCESS
+class CUpnpIPFilterManager;
+#endif
+
+// CONSTANTS
+static const TInt KMaxConnectionCount = 16;
+const TInt KRetryTime = 1000000;
+static const TInt KDefaultHttpPort = 50001; // HTTP default port number
+// A Category value for a property of Publish and Subscribe
+const TUid KdlnawebserverCat={0x10204165};
+enum TdlnawebserverKeys {EdlnawebserverCounter};
+
+// CLASS DECLARATION
+
+/**
+* A virtual base class for TCP servers. Includes a server socket and methods
+* starting server socket, accepting connections and creating CUpnpTcpSessions for
+* incoming connections. After creating tcp session and adding it to
+* active sessions' tableserver returns to listening for new connections and
+* the tcp session takes care about whole communication with remote host.
+* After handling connection the session is destroyed and removed from sessions' list.
+*
+* @lib DLNAwebserver.lib
+* @since Series60 2.6
+*/
+NONSHARABLE_CLASS (CUpnpTcpServer) : public CActive, public MUpnpNotifyTimerObserver
+    {
+public: // Enumerations
+
+    /**
+    * Enum for state of server.
+    */
+    enum TState
+        {
+        // Server is not listetnig for connections.
+        ENotListening,
+        // Server is listening and accepting incoming connections.
+        EAccepting
+        };
+
+public: // Constructor and destructor
+
+    /**
+    * Constructor function. This constructor is used when connection is
+    * iniatiated from network.
+    * @since Series60 2.6
+    * @param aSocketServ Pointer to Socket Server.
+    * @param aPort Number of listening port.
+    * @param aIap Number of active Iap to use with connections.
+    * @return A new CUpnpTcpServer instance.
+    **/
+    CUpnpTcpServer( RSocketServ* aSocketServ,
+                    TInt aPort,
+                    TInt aIap );
+
+    /**
+    * TcpServer might-leave initialization method.
+    * NOTE: Must be called by extending class
+    * @since Series60 2.6
+    **/
+    void BaseConstructL();
+
+    /**
+    * Virtual destructor function.
+    * @since Series60 2.6
+    **/
+    virtual ~CUpnpTcpServer();
+
+public: // From CActive
+
+    /**
+    * Do active object operations
+    * Standard active object function
+    * @since Series60 2.6
+    */
+    void RunL();
+
+    /**
+    * Do active object operations
+    * Standard active object function
+    * @since Series60 2.6
+    * @param aError from RunL.
+    * @return KErrNone.
+    */
+    TInt RunError( TInt aError );
+
+    /**
+    * Cancel active object requests
+    * Standard active object function
+    * @since Series60 2.6
+    */
+    void DoCancel();
+
+public: // From MUpnpNotifyTimerObserver
+
+    /**
+    * Callback from iRetrySocketTimer. This method tries to
+    * open new socket again, because last time server
+    * socket binding has failed.
+    * @since Series60 2.6
+    * @param aTimer Pointer to timer that has expired.
+    **/
+    void TimerEventL( CUpnpNotifyTimer* aTimer);
+
+public: // New functions
+
+    /**
+    * Deletes given session.
+    * @since Series60 2.6
+    * @param aSession Session to be deleted.
+    **/
+    void DeleteSession( CUpnpTcpSession* aSession );
+
+    /**
+    * Opening socket for listening
+    * @since Series60 5.0
+    **/
+    void OpenSocketL();
+
+    /**
+    * Starts to listen for incoming connections.
+    * @since Series60 5.0
+    **/
+    void BindRandomPortL();
+
+    /**
+    * Starts to listen for incoming connections.
+    * @since Series60 5.0
+    * @param aPort try to bind to port
+    **/
+    void BindL( const TInt aPort );
+
+    /**
+    * Stops TcpServer.
+    * @since Series60 2.6
+    */
+    void StopTcpServerL();
+        
+    /**
+    * Set the new IP address
+    * @since Series60 5.0 HN
+    * @param aAddr IP address to be set.
+    **/
+    void SetServerAddress( const TInetAddr& aAddr );
+
+    /**
+    * Returns the IP address of this server.
+    * @since Series60 2.6
+    * @param aAddr IP address of this server is returned to this reference.
+    **/
+    void ServerAddress( TInetAddr& aAddr );
+
+    /**
+    * Returns the port of this server.
+    * @since Series60 2.6
+    * @return Port of this server.
+    **/
+    TUint ServerPort();
+
+    /**
+    * Returns the Hardware address of active IAP.
+    * @since Series60 2.6
+    * @return HW address.
+    **/
+    TSockAddr* HWAddressL();
+
+    /**
+    * Returns a new available port number.
+    * @since Series60 2.6
+    * @return A new Port number.
+    **/
+    TInt NewPortNumberL(); 	
+
+	/**
+    * Starts retrying accepting the new connection.
+    * @since Series60 3.2
+    **/
+    void StartRetryTimer();
+
+	/**
+    * Sets file write buffer size
+    * @since Series60 2.6
+    **/
+	void SetFileWriteBufferSize(TInt aSize);
+
+
+	/**
+    * Returns file read buffer size
+    * @since Series60 2.6
+    **/
+	TInt FileWriteBufferSize();
+
+	/**
+    * Sets file read buffer size
+    * @since Series60 2.6
+    **/
+	void SetFileReadBufferSize(TInt aSize);
+
+
+	/**
+    * Returns file write buffer size
+    * @since Series60 2.6
+    **/
+	TInt FileReadBufferSize();
+
+
+protected: // New functions
+
+    /**
+    * Callback function for new connection creation.
+    * @since Series60 2.6
+    * @param aSocket Socket that is bound to new connection.
+    * @return Pointer to new CUpnpTcpSession.
+    **/
+    virtual CUpnpTcpSession* ConnectionAcceptedL( RSocket aSocket ) = 0;
+
+    /**
+    * Starts to listen a socket.
+    * @since Series60 2.6
+    * @return error code if listening start fails.
+    **/
+    TInt StartToListenL();
+
+    /**
+    * Accepts new connection ans starts to listen for new connections.
+    * @since Series60 2.6
+    **/
+    void AcceptConnectionL();
+
+    /**
+    * Gets the value of iServerAddress
+    * @param aAddr
+    * @since Series60 3.2
+    **/
+    TBool GetServerAddress(TInetAddr& aAddr);
+
+    /**
+     * Connects to the Connection Manager
+     * @since Series60 5.0
+     **/
+    void CreateConnectionManagerSessionL();
+    
+    /**
+     * Closes sockets
+     * @since Series60 5.0
+     **/
+    void CloseSockets();
+    
+     /**
+     * Prepares to close sockets
+     * @since Series60 5.0
+     **/
+    void PrepareToCloseSockets();
+    
+     /**
+     * Cancels retry timer
+     * @since Series60 5.0
+     **/
+    void CancelRetryTimer();
+
+protected:
+
+    // Connection that is used to bind the used socket server on
+    // given interface.
+    CUpnpConnectionManagerProxy *iConnectionManagerProxy;
+
+    // State of server, owned
+    TState iState;
+
+    // Socket server that is used by TcpServer, owned
+    RSocketServ* iSocketServ;
+
+    // Listening socket, owned
+    RSocket iServerSocket;
+
+    // Socket that is used to bind new connections, owned
+    RSocket iClientSocket;
+
+    // List of sessions, owned
+    RPointerArray<CUpnpTcpSession> iSessionList;
+
+    // Listening port of this server, owned
+    TUint iServerPort;
+
+    // Address of this server, owned
+    TInetAddr iServerAddress;
+
+    // Used Iap, owned
+    TInt iActiveIap;
+
+    // Timer that is used when RSocket::Open() fails. This way
+    // we try to bind listening server socket again later.
+    CUpnpNotifyTimer* iRetrySocketTimer;
+
+    // preference for connection
+    TCommDbConnPref iCommDbPref;
+
+  	// File write buffer size
+  	TInt iFileWriteBufferSize;
+
+  	// File read buffer size
+  	TInt iFileReadBufferSize;
+
+  	#ifdef RD_UPNP_REMOTE_ACCESS
+    /*******IPFiltering *******/
+    CUpnpIPFilterManager* iIPFilteringManager;
+    /*******IPFiltering *******/
+    #endif
+    
+    
+    MUpnpHttpServerTransactionCreator* iTransactionCreator;
+    
+    };
+
+#endif // C_CUPNPTCPSERVER_H
+
+// End Of File