diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtobjectserver.h --- /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 +#include +#include +#include + +#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 &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 &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 &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 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