williamr@2: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef __OBEXBASEOBJECT_H williamr@2: #define __OBEXBASEOBJECT_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: const TUint32 KConnIDInvalid = 0xffffffff; williamr@2: williamr@2: /** williamr@2: Objects of this class are used to describe the objects to be transferred and williamr@2: those received via Obex. williamr@2: Consists of a number of attributes describing the object, along with williamr@2: methods to set them. CObexBaseObject is an abstract base class, which defines williamr@2: attribute setting and transferring functionality, but does not specify the williamr@2: storage mechanism for the data part (called the object body) of the object. williamr@2: This body part is defined in derived classes. williamr@2: williamr@2: Object description attributes are tracked for validity automatically, so williamr@2: that only valid attributes are sent to the remote machine. Also has the williamr@2: concept of "header masks". This selects which of the various attributes williamr@2: will actually be sent out/read in when the object is used in an operation williamr@2: with the remote machine. Objects default to transferring all valid williamr@2: attributes, use the header mask if restriction is required on the headers williamr@2: exchanged. williamr@2: williamr@2: See the various derived classes for description of object body williamr@2: representation. williamr@2: williamr@2: The common attributes are defined to be as close to the underlying OBEX williamr@2: headers as usefully possible, hence any OBEX header specified as a Unicode williamr@2: string (e.g. Name) translate to TDes (variant) EPOC descriptors, "byte williamr@2: sequences" (e.g. Type) are TDes8 (or ASCII invariant), and byte and 32 bit williamr@2: integers (e.g. Length) are TUint32s. williamr@2: williamr@2: This class is not designed for user derivation (ie. outside of this dll). williamr@2: williamr@2: @see CObexHeader williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: NONSHARABLE_CLASS(CObexBaseObject) : public CBase williamr@2: { williamr@2: // required for access to iValidHeaders in CObexServer::CheckForConnectionID williamr@2: friend class CObexServer; williamr@2: williamr@2: public: williamr@2: virtual ~CObexBaseObject(); williamr@2: IMPORT_C void SetHeaderMask(const TObexHeaderMask aHeaderMask); williamr@2: IMPORT_C void SetNameL(const TDesC& aDesc); williamr@2: IMPORT_C void SetTypeL(const TDesC8& aDesc); williamr@2: IMPORT_C void SetLengthL(const TUint32 aLength); williamr@2: IMPORT_C void SetTimeL(const TTime aLocalTime); williamr@2: IMPORT_C void SetDescriptionL(const TDesC& aDesc); williamr@2: IMPORT_C void SetTargetL(const TDesC8& aDesc); williamr@2: IMPORT_C void AddHttpL(const TDesC8& aDesc); williamr@2: IMPORT_C void SetAppParamL(const TDesC8& aDesc); williamr@2: williamr@2: IMPORT_C void AddHeaderL(CObexHeader& aHeader); williamr@2: IMPORT_C TInt BytesSent(); williamr@2: IMPORT_C TInt BytesReceived(); williamr@2: IMPORT_C TObexHeaderMask HeaderMask(); williamr@2: IMPORT_C TObexHeaderMask ValidHeaders(); williamr@2: IMPORT_C const TDesC& Name(); williamr@2: IMPORT_C const TDesC8& Type(); williamr@2: IMPORT_C TUint32 Length(); williamr@2: IMPORT_C const TTime Time(); williamr@2: IMPORT_C const TDesC& Description(); williamr@2: IMPORT_C const TDesC8& Target(); williamr@2: IMPORT_C const RPointerArray* Http() const; williamr@2: IMPORT_C const TDesC8& AppParam() const; williamr@2: IMPORT_C void Reset(); williamr@2: IMPORT_C const CObexHeaderSet& HeaderSet() const; williamr@2: IMPORT_C CObexHeaderSet& HeaderSet(); williamr@2: williamr@2: // Public unexported functions used by CObexServer, CObexClient, etc williamr@2: enum TProgress { EContinue,EComplete,EError,ELastPacket }; williamr@2: TInt InitSend(TObexOpcode aOpcode); williamr@2: TProgress PrepareNextSendPacket(CObexPacket& aPacket); williamr@2: TInt InitReceive(); williamr@2: TProgress ParseNextReceivePacket(CObexPacket& aPacket); williamr@2: void PrepareConnectionHeader( CObexPacket& aPacket ); williamr@2: void SetConnectionIdL(TUint32 aFourByte); williamr@2: TUint32 ConnectionID(); williamr@2: TObexResponse GetLastError() const; williamr@2: williamr@2: protected: williamr@2: CObexBaseObject(); williamr@2: void GuessTypeFromExtL(const TDesC& aExt); williamr@2: void ResetHeaders(); williamr@2: // Pure virtuals that all derived objects must implement williamr@2: virtual void GetData(TInt aPos, TDes8& aDes) =0; williamr@2: virtual void NewData(TInt aPos, TDes8& aDes) =0; williamr@2: virtual TInt DataSize() =0; williamr@2: virtual void ResetData() =0; williamr@2: void CreateHeaderStorageDataL(); williamr@2: void SetTimeHeaderL(const TDesC8& aTimeDes); williamr@2: void SetUtcTimeL(const TTime aUtcTime); williamr@2: williamr@2: // Data williamr@2: private: williamr@2: TObexHeaderMask iHeaderMask; williamr@2: TObexHeaderMask iValidHeaders; williamr@2: williamr@2: mutable RPointerArray* iHttp; williamr@2: williamr@2: CObexHeaderSet* iHeaderSet; williamr@2: williamr@2: TProgress iSendProgress; williamr@2: TProgress iRecvProgress; williamr@2: TObexOpcode iSendOpcode; williamr@2: williamr@2: // This data item is used to store a CObexHeader which is used as a temporary williamr@2: // store when finding headers williamr@2: CObexHeader* iObexHeader; williamr@2: williamr@2: TObexHeaderMask iSendHeaders; williamr@2: TInt iSendBytes; williamr@2: TInt iRecvBytes; williamr@2: williamr@2: TObexResponse iLastError; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif // __OBEXBASEOBJECT_H