upnp/upnpstack/ssdpserver/inc/upnpssdpserver.h
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/ssdpserver/inc/upnpssdpserver.h	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,274 @@
+/** @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 class.
+ *
+ */
+
+#ifndef C_CUPNPSSDPSERVER_H
+#define C_CUPNPSSDPSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include "upnpudpserver.h"
+#include "upnpssdpmessagefactory.h"
+#include "upnpssdpserverobserver.h"
+
+// FORWARD DECLARATIONS
+class CUpnpMessageHandler;
+class CUpnpSsdpMessage;
+class CUpnpDeviceLibraryElement;
+
+// CLASS DECLARATION
+
+/**
+ *  CUpnpSsdpServer is used to send and receive SSDP messages.
+ *
+ *  @since Series60 2.0
+ */
+NONSHARABLE_CLASS(CUpnpSsdpServer) : public CUpnpUdpServer,
+        public MUpnpUdpServerObserver
+    {
+public:
+    // Constructors and destructor
+    /**
+     * Two-phased constructor.
+     * @param aSsdpServerObserver Pointer that is used for callbacks.
+     * @param aSocketServ Pointer to used Socket Server.
+     * @param aListeningPort Port that server is listening to.
+     * @return A new CUpnpSsdpServer instance.
+     */
+    IMPORT_C static CUpnpSsdpServer* NewL(
+        MUpnpSsdpServerObserver* aSsdpServerObserver,
+        RSocketServ* aSocketServ, TInt aListeningPort );
+
+    /**
+     * Two-phased constructor.
+     * @param aSsdpServerObserver Pointer that is used for callbacks.
+     * @param aSocketServ Pointer to used Socket Server.
+     * @param aListeningPort Port that server is listening to.
+     * @param aMasterServer Pointer to master server that generates the responses
+     for multicast messages.   
+     * @return A new CUpnpSsdpServer instance.
+     */
+    IMPORT_C static CUpnpSsdpServer* NewL(
+        MUpnpSsdpServerObserver* aSsdpServerObserver,
+        RSocketServ* aSocketServ, TInt aListeningPort,
+        CUpnpSsdpServer* aMasterServer );
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C virtual ~CUpnpSsdpServer();
+
+public:
+    // New functions
+
+    /**
+     * Starts the CUpnpSsdpServer.
+     * @since Series60 2.0
+     * @return None
+     */
+    IMPORT_C void StartL();
+
+    /**
+     * Stops the CUpnpSsdpServer.
+     * @since Series60 2.0
+     * @return None
+     */
+    IMPORT_C void Stop();
+
+public:
+    // public functions for SSDP advertising and searching
+
+    /**
+     * Advertises element aDev in CUpnpDeviceLibrary.
+     * @since Series60 2.0
+     * @param aDev Pointer to advertised device.
+     * @return None
+     */
+    /**
+     Advertises element aDev in CUpnpDeviceLibrary.
+     @param aDev Pointer to advertised device.
+     @return None.
+     */
+    IMPORT_C void AdvertiseAliveL( CUpnpDeviceLibraryElement& aDev );
+
+    /**
+     * Advertises ByeBye for element aDev in CUpnpDeviceLibrary.
+     * @since Series60 2.0
+     * @param aDev Pointer to advertised device.
+     * @return None
+     */
+    /**
+     Advertises ByeBye for element aDev in CUpnpDeviceLibrary.
+     @param aDev Pointer to advertised device.
+     @return None.
+     */
+    IMPORT_C void AdvertiseByebyeL( CUpnpDeviceLibraryElement& aDev );
+
+    /**
+     * Sends a SSDP search, searching for aTarget.
+     * @since Series60 2.0
+     * @param aTarget Search String.
+     * @return None
+     */
+    IMPORT_C void SearchL( TDesC8& aTarget );
+
+    /**
+     * Sends a SSDP search, searching for aTarget.
+     * @since Series60 2.0
+     * @param aTarget Search String.
+     * @param aMaximumWaitTime Value of the MX-header.
+     * @return None
+     */
+    IMPORT_C void SearchL( TDesC8& aTarget, TDesC8& aMaximumWaitTime );
+
+    /**
+     * Master server is receiving messages sent to multicast \
+        * address via this function and generates the response.
+     * @since Series60 2.0
+     * @param aMessage Received message
+     */
+    void MessageFromMulticastL( CUpnpSsdpMessage* aMessage );
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CUpnpSsdpServer( MUpnpSsdpServerObserver* aSsdpServerObserver,
+        RSocketServ* aSocketServ, TInt aListeningPort );
+
+    /**
+     * C++ default constructor.
+     */
+    CUpnpSsdpServer( MUpnpSsdpServerObserver* aSsdpServerObserver,
+        RSocketServ* aSocketServ, TInt aListeningPort,
+        CUpnpSsdpServer* aMasterServer );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+private:
+    // private ssdp:alive functions
+
+    /**
+     * Sends a single alive message to network using given paramaters.
+     * @since Series60 2.0
+     * @param aNt Value of NT header
+     * @param aUsn Value of USN header
+     * @param aLoc Value of LOCATION header
+     */
+    void SendAdvertiseAliveL( TDesC8& aNt, TDesC8& aUsn, TDesC8& aLoc );
+
+    /**
+     * Advertises a device in device library.
+     * @since Series60 2.0
+     * @param aDev Reference to device that is to be advertised.
+     */
+    void SingleDeviceAdvertiseAliveL( CUpnpDeviceLibraryElement& aDev );
+
+private:
+    // private ssdp:byebye functions
+
+    /**
+     * Sends a BYEBYE message to network using given paramaters.
+     * @since Series60 2.0
+     * @param aNt Value of NT header
+     * @param aUsn Value of USN header
+     * @return ?description
+     */
+    void SendAdvertiseByebyeL( TDesC8& aNt, TDesC8& aUsn );
+
+    /**
+     * Sends a single device BYEBYE advertisement
+     * @since Series60 2.0
+     * @param aDev Device to be advertised.
+     */
+    void SingleDeviceAdvertiseByebyeL( CUpnpDeviceLibraryElement& aDev );
+
+private:
+    // private ssdp response generating functions
+
+    /**
+     * Function that is used to determine what kind of response is
+     * required to be sent. 
+     * @since Series60 2.0
+     * @param aMsg Message that contains the search request.
+     */
+    void ResponseL( CUpnpSsdpMessage* aMsg );
+
+    /**
+     * Sends a search response with given parameters.
+     * @since Series60 2.0
+     * @param aDest Address of remote host
+     * @param aSt Value of ST header
+     * @param aUsn Value of USN header
+     * @param aLoc Value of LOCATION header.     
+     */
+    void SendResponseL( TInetAddr& aDest, TDesC8& aSt, TDesC8& aUsn,
+        TDesC8& aLoc );
+
+    /**
+     * Creates a search response to given search message.
+     * This advertises only the device.
+     * @since Series60 2.0
+     * @param aDevice Device that needs to be advertised.
+     * @param aMsg Search request message.
+     * @return ?description
+     */
+    void SingleDeviceResponseL( CUpnpDeviceLibraryElement* aDevice,
+        CUpnpSsdpMessage* aMsg );
+
+    /**
+     * Creates a response to search message aMsg from device aDevice.
+     * This response concerns about aDevices certain service, aServiceType
+     * @since Series60 2.0
+     * @param aDevice Device that sends the response.
+     * @param aServiceType Service that resides in aDevice.
+     * @param aMsg Message that requires the response to be sent (request)
+     */
+    void SingleServiceResponseL( CUpnpDeviceLibraryElement* aDevice,
+        const TDesC8& aServiceType, CUpnpSsdpMessage* aMsg );
+
+private:
+
+    /**
+     * Callback function from CUpnpUdpServer.
+     * @since Series60 2.0
+     * @param aMessage Message that was received thru CUpnpUdpServer.
+     * @return None
+     */
+    void UdpMessageReceivedL( CUdpMessage* aMessage );
+
+private:
+    // Data
+
+    // SSDP server observer
+    MUpnpSsdpServerObserver* iSsdpServerObserver;
+
+    // SSDP master server
+    CUpnpSsdpServer* iMasterServer;
+
+    // value foro SERVER header in SSDP messages
+    HBufC8* iServerDescription;
+
+    };
+
+#endif // C_CUPNPSSDPSERVER_H
+// End of File