ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtobjectserver.h
branchRCL_3
changeset 21 d59c248c9d36
parent 0 d11fb78c4374
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtobjectserver.h	Wed Sep 01 12:30:38 2010 +0100
@@ -0,0 +1,408 @@
+/*
+* Copyright (c) 2004-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 CBTOBJECTSERVER_H
+#define CBTOBJECTSERVER_H
+
+#include <coecntrl.h>
+#include <obexserver.h>
+#include <bttypes.h>
+#include <obexobjects.h>
+
+#include "cxhtmlfilecomposer.h"
+#include "btprotocolconsts.h"
+#include "cbtdprserviceadvertiser.h"
+
+
+/**
+* MBtObjectServerObserver
+*
+* @brief Interface to observe bluetooth object server's state
+*/
+class MBtObjectServerObserver
+{
+    public:
+	    enum TStatusMessages
+	    {
+	    	KObjectServerPackageSent = 10,	///@brief a requested chunk of data sent
+	    	KObjectServerFileSent,			///@brief a requested file sent
+	    	KObjectServerAllFilesSent, 		///@brief not used... cannot know when done!
+	    	KObjectServerStopped,			///@brief server stopped
+	    	KObjectServerStarted,			///@brief server started
+	    	KObjectServerBTDeviceMismatch,	///@brief remote device isn't correct
+			KObjectServerConnected,			///@brief remote device connected
+			KObjectServerDisconnected,		///@brief remote device disconnected
+			KObjectServerTransportUp,		///@brief transportation up with remote device
+			KObjectServerTransportDown,		///@brief transportation down with remote device
+			KObjectServerError				///@brief Error indication for any occured error
+	    };
+
+    public:
+
+	   /**
+        * OperationStatus
+        *
+        * A callback function to observe bluetooth object server's state
+        * @param aStatus    TStatusMessages status or error code occured
+        * @param aInfo  	Explaining information of the status
+        */
+    	virtual void HandleObjectServerEvent(TInt aStatus, TInt aInfo = 0) = 0;
+};
+/*!
+  @class CBtObjectServer
+
+  @discussion An instance of the Obex File Server object for the obexfileserver
+  example application
+  */
+NONSHARABLE_CLASS(CBtObjectServer) : public CBase, public MObexServerNotify
+{
+    public:
+
+	   /**
+        * NewL()
+        * Construct a CBtObjectServer
+        * @param aDevice    Device (printer) which should be contacted over Bluetooth
+        * @param aImgArray  Images that will be sent over OBEX (if printer asks them)
+        * @return a pointer to the created instance of CBtObjectServer
+        */
+		static CBtObjectServer* NewL(const TBTDevAddr& aDeviceAddress, RArray<CImageInfo> &aImgArray, MBtObjectServerObserver& aObs);
+
+	   /**
+        * NewLC()
+        * Construct a CBtObjectServer
+        * @param aDevice    Device which should be contacted over Bluetooth
+        * @param aImgArray  Images that will be sent over OBEX (if printer asks them)
+        * @return a pointer to the created instance of CBtObjectServer
+        */
+		static CBtObjectServer* NewLC(const TBTDevAddr& aDeviceAddress, RArray<CImageInfo> &aImgArray, MBtObjectServerObserver& aObs);
+
+       /**
+        * ~CBtObjectServer()
+        * Destructor for the class
+        */
+        ~CBtObjectServer();
+
+	   /**
+		* CreateObexObject()
+		* For creating an OBEX object that will be send through bluetooth
+		*/
+		CObexBufObject* CreateObexObjectL(const TDesC& aUri);
+
+	   /**
+        * StartL()
+        * Starts the server
+        */
+        void StartL();
+
+       /**
+        * Stop()
+        * Stops the server
+        */
+        void Stop();
+
+	   /**
+		* Cancel()
+		* For stopping server action nicely - will continue to send the current file to
+		* the BT device
+		*/
+        void Cancel();
+
+
+       /**
+        * IsConnected()
+        * @return ETrue if the server is connected.
+        */
+        TBool IsConnected();
+
+       /**
+        * IsTransporting()
+        * @return ETrue if the transport connection is up.
+        */
+        TBool IsTransporting();
+
+       /**
+        * IsSendingData()
+        * @return ETrue if the server is sending data to a Bluetooth device
+        */
+        TBool IsSendingData();
+
+       /**
+        * IsFinished()
+        * @return ETrue if the server is finished and can be deleted
+        */
+        TBool IsFinished();
+
+	protected:
+
+        /**
+	    * ConstructL()
+	    * Method that constucts the classes possibly leaving parts
+	    */
+        void ConstructL( RArray<CImageInfo> &aImgArray );
+
+
+	private:
+
+	   /**
+		* CBtObjectServer()
+		* @param aDevice    Device (printer) which should be contacted over Bluetooth
+        * @param aImgArray  Images that will be sent over OBEX (if printer asks them)
+		* Private constructor
+		*/
+		CBtObjectServer( const TBTDevAddr& aDeviceAddress, MBtObjectServerObserver& aObs );
+
+       /**
+        * InitialiseServerL
+        * Initialises the server
+        */
+        void InitialiseServerL();
+
+       /**
+        * InitTransferData
+        * Initialises the data used to transfer and process a file
+        */
+        void InitTransferData();
+
+       /**
+        * InitHeaderVariables
+        * Initialises the requested header data members
+        */
+		void InitHeaderVariables();
+		
+        TBool AllowConnection();
+
+       /**
+        * HandleGetRequestL
+        * Method to go through to trap leaves for GetRequestIndication
+        */
+        CObexBufObject* HandleGetRequestL( CObexBaseObject* aRequestedObject );
+
+		void GetAppHeaderL(CObexBaseObject* aRequestedObject);
+		void GetDataSequenceL(const TFileName& aFileName, TInt& aFileSize);
+		void SetCompleted();
+
+       /**
+		* SetSecurityWithChannelL
+		* Sets the security on the channel port
+		* And returns the channel available.
+		* @param aAuthentication is authentication used
+		* @param aEncryption is encryption used
+		* @param aAuthorisation is authorisation used
+		* @param aDenied is denied used
+		* @return an available channel
+		*/
+		TInt SetSecurityWithChannelL ( TBool aAuthentication,
+									   TBool aEncryption,
+		                               TBool aAuthorisation,
+                                       TBool aDenied );
+	private:
+
+        /**
+         * Following private methods implement the MObexServerNotify class
+         * - these methods (together with CObexServer) implement the observer
+         *   for the OBEX data handling
+         *  - Methods are called every time server receives something over the bluetooth
+         */
+
+       /**
+        * ErrorIndication
+        * Receive error indication
+        * @param aError the error code
+        */
+        void ErrorIndication( TInt aError );
+
+       /**
+        * TransportUpIndication
+        * Called when the underlying socket transport connection is made from
+        * a remote client to the server
+        */
+        void TransportUpIndication();
+
+       /**
+        * TransportDownIndication
+        * Transport connection is dropped
+        */
+        void TransportDownIndication();
+
+       /**
+        * ObexConnectIndication
+        * Invoked when an OBEX connection is made from a remote client
+        * @param aRemoteInfo connection information supplied by
+        * the remote machine
+        * @param aInfo holds further information about the
+        * requested connection
+        * @return system wide error code
+        */
+        TInt ObexConnectIndication( const TObexConnectInfo& aRemoteInfo,
+                                    const TDesC8& aInfo );
+
+       /**
+        * ObexDisconnectIndication
+        * OBEX server has been disconnected
+        * @param aInfo contains information about the disconnection
+        */
+        void ObexDisconnectIndication( const TDesC8& aInfo );
+
+       /**
+        * PutRequestIndication
+        * @return the CObexBufObject in which to store
+        * the transferred object
+        */
+        CObexBufObject* PutRequestIndication();
+
+       /**
+        * PutPacketIndication
+        * @return system wide error code
+        */
+        TInt PutPacketIndication();
+
+       /**
+        * PutCompleteIndication
+        * @return system wide error code
+        */
+        TInt PutCompleteIndication();
+
+       /**
+        * GetRequestIndication
+        * Called when a full get request has been received from the client
+        * @param aRequestedObject holds details about the requested object
+        * @return the CObexBufObject in which return to the client
+        */
+        CObexBufObject* GetRequestIndication( CObexBaseObject*
+                                              aRequestedObject );
+
+       /**
+        * GetPacketIndication
+        * @return system wide error code
+        */
+        TInt GetPacketIndication();
+
+       /**
+        * GetCompleteIndication
+        * @return system wide error code
+        */
+        TInt GetCompleteIndication();
+
+       /**
+        * SetPathIndication
+        * @param aPathInfo the information received in a SETPATH command
+        * @return system wide error code
+        */
+        TInt SetPathIndication( const CObex::TSetPathInfo& aPathInfo,
+                                const TDesC8& aInfo );
+
+       /**
+        * AbortIndication
+        * Server has been aborted
+        */
+        void AbortIndication();
+
+        /**
+         * End of the Obex Observer methods
+         *
+         */
+
+	private:
+		
+	    /**
+	     * State of the server
+	     * Owned by CBtObjectServer
+         */
+		enum TServerState
+		{
+			EStateDisconnected = 0,
+			EStateConnected,
+			EStateStop
+		};
+	
+	    /**
+	     * Current operation of the server
+	     * Owned by CBtObjectServer
+         */
+		enum TServerOperation
+		{
+			ETerminating = 0,
+			ESending,
+			EIdle
+		};
+	
+	    /**
+	     * The bluetooth device where the images will be sent
+	     * Owned by CBtObjectServer
+         */
+		const TBTDevAddr& iAllowedAddress;
+
+	    /**
+	     * The bluetooth device requested the data
+	     * Owned by CBtObjectServer
+         */
+		TBTDevAddr iRemoteAddress;
+
+	    /**
+	     * The images that will be printed if printer asks for them
+	     * Owned by CBtObjectServer
+         */
+	    RArray<CImageInfo> iImgArray;
+
+	    MBtObjectServerObserver& iObs;
+
+		/**
+         * iObexServer manages the OBEX client connection
+         * Owned by CBtObjectServer
+         */
+        CObexServer* iObexServer;
+
+        /**
+        * iObexBufData the raw data that has been transferred
+        * Owned by CBtObjectServer
+        */
+        CBufFlat* iObexBody;
+
+       /**
+        * iCurrObject the OBEX object that has been transferred
+        * Owned by CBtObjectServer
+        */
+        CObexBufObject* iObexBufObject;
+
+       /**
+        * iAdvertiser used to advertise this service
+        * Owned by CBtObjectServer
+        */
+        CBtDprServiceAdvertiser* iAdvertiser;
+
+        /**
+         * Current operation
+         */
+        TServerOperation iOperation;
+
+        RFs iFs;
+
+		TBool iStarted;
+		TBool iConnected;
+		TBool iTransportUp;
+
+		TUint iOffset;
+		TInt iCount;
+		TInt iSize;
+		TInt iProgress; // proggress in percents of currently printed file
+
+};
+
+#endif // CBTOBJECTSERVER_H
+
+//  End of File