obex/obexprotocol/obextransport/public/obextransportcontrollerbase.h
changeset 57 f6055a57ae18
parent 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexprotocol/obextransport/public/obextransportcontrollerbase.h	Tue Oct 19 11:00:12 2010 +0800
@@ -0,0 +1,145 @@
+// Copyright (c) 2005-2009 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 __OBEXTRANSPORTCONTROLLERBASE_H__
+#define __OBEXTRANSPORTCONTROLLERBASE_H__
+
+#include <e32base.h>
+#include <obex/transport/mobextransportnotify.h>
+#include <obex/transport/obexconnector.h>
+#include <obex/internal/obextransportconstants.h>
+#include <obex/transport/obextransport.hrh>
+#include <obextypes.h>
+
+class CObexPacket;
+class MObexNotifyExtend;
+class TSockAddr;
+class CObexActiveRW;
+class TObexTransportInfo;
+
+/**
+@file
+@publishedPartner
+@released
+*/
+
+/**
+Interface UID for transport controllers.
+Transport controllers are instantiations of this interface.
+*/
+const TInt KObexTransportControllerInterfaceUid = KObexTransportInterfaceUid;
+
+/**
+Abstraction for transport controller implementations. Defines an interface to 
+be used by Obex protocol layer as the facade to the transport layer.
+
+In a concrete transport controller's NewL, the following things must be done: 
+(a) CObexTransportControllerBase::iConnector must be assigned to a 
+CObexConnector-derived type. (This may be reliant on the TObexTransportInfo 
+object passed in at this time.) iConnector is owned by 
+CObexTransportControllerBase.
+(b) CObexTransportControllerBase::iTransportInfo must be assigned to a 
+persistent (i.e. heap-based) TObexTransportInfo or derived type. The derived 
+transport controller may cast the TObexTransportInfo given at construction 
+time to a known derived type and copy the data from it to the new instance on 
+the heap. Note that ownership of the given TObexTransportInfo *remains with 
+the client*. iTransportInfo is then owned by CObexTransportControllerBase.
+
+In a concrete transport controller's NewTransportL, two instances of types 
+derived from CObexActiveRW must be created, and stored in 
+CObexTransportControllerBase::iActiveReader and 
+CObexTransportControllerBase::iActiveWriter. CObexTransportControllerBase owns 
+these.
+*/
+class CObexTransportControllerBase : public CBase, public MObexTransportNotify
+	{
+public:
+	IMPORT_C static CObexTransportControllerBase* NewL(TObexTransportInfo& aTransportInfo);
+	IMPORT_C ~CObexTransportControllerBase();
+	
+public:
+	IMPORT_C void SetOwner(MObexNotifyExtend& aOwner);
+
+	//delegated to activerw class
+	IMPORT_C CObexPacket& SendPacket () ;	//< Access packet buffers
+	IMPORT_C CObexPacket& ReceivePacket ();
+	IMPORT_C void Send ();						//< Actually carry out transfer
+	IMPORT_C void Send (TObexOpcode aOpcode);	//< Prepare and send a 3 byte packet
+	IMPORT_C void Receive ();
+	
+	IMPORT_C TBool IsWriteActive () const;				//< is the ActiveWriter busy
+	IMPORT_C TInt InsertLocalConnectInfo (CObexPacket &aPacket, TUint8 aVersion, TUint8 aFlags);
+	IMPORT_C TBool ExtractRemoteConnectInfo (CObexPacket &aPacket, TUint8& aVersion, TUint8& aFlags);
+	IMPORT_C void CancelTransfers();
+	
+	//delegated to connector class
+	IMPORT_C void ConnectL ();
+	IMPORT_C void CancelConnect();
+	IMPORT_C void AcceptConnectionL();
+	IMPORT_C void CancelAccept();
+	IMPORT_C TBool  BringTransportDown();
+	IMPORT_C void SignalTransportError();
+	
+	//public non-virtual methods to aid preventing bc/sc breaks when the client interface changes
+	IMPORT_C void RemoteAddr(TSockAddr& aAddr);
+	IMPORT_C TBool IsTransportRestartable() const;
+	IMPORT_C const TObexTransportInfo* TransportInfo() const;
+	
+protected:
+	IMPORT_C CObexTransportControllerBase();
+
+private:
+	void BaseConstructL();
+
+private: // implemented  by derived controller 
+	virtual void DoRemoteAddr(TSockAddr& aAddr)=0;
+	virtual TBool DoIsTransportRestartable() const = 0;
+	virtual void NewTransportL(TObexConnectionInfo& aInfo) = 0;
+	virtual TUint16 GetReceivePacketDataLimit() = 0;
+	
+protected: // from MObexTransportNotify
+	IMPORT_C virtual void DoProcess(CObexPacket &aPacket);
+	IMPORT_C virtual void DoError(TInt aError);
+	IMPORT_C virtual void DoTransportUp(TObexConnectionInfo& aInfo);
+	IMPORT_C virtual void DoSignalPacketProcessEvent(TObexPacketProcessEvent aEvent);
+	
+protected:	//Extension pattern
+	IMPORT_C virtual TAny* GetInterface(TUid aUid);
+	
+private: // utility
+	void DeleteTransport();
+	void ConstructPacketsL();
+	void InitialiseTransportL(TObexConnectionInfo& aInfo);
+	void TransportUpError(TInt aError);
+
+protected: // owned
+	CObexConnector* iConnector;
+	CObexActiveRW* iActiveReader;
+	CObexActiveRW* iActiveWriter;
+	TObexConnectionInfo iConnectionInfo;
+	TObexTransportInfo* iTransportInfo;
+
+private: // unowned
+	MObexNotifyExtend* iOwner;
+
+private: // owned 
+	CObexPacket* iReceivePacket;
+	CObexPacket* iSendPacket;
+	TAny* iFuture1;
+	// Instance identifier key
+	TUid iPrivateEComUID; 
+	};
+
+#endif // __OBEXTRANSPORTCONTROLLERBASE_H__