pimprotocols/pbap/inc/pbapserver.h
changeset 0 e686773b3f54
child 15 e8e3147d53eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimprotocols/pbap/inc/pbapserver.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,209 @@
+// Copyright (c) 2007-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 PBAPSERVER_H
+#define PBAPSERVER_H
+
+#include <e32std.h>
+#include <obex.h>
+#include <btsdp.h>
+#include <bt_sock.h>
+
+#include "pbapfolderclient.h"
+#include "pbapexporter.h"
+#include "pbaperrorreporter.h"
+#include "pbapvcardexporterutil.h"
+#include "pbappanic.h"
+
+// forward declarations
+class CObexServer;
+class CContactDatabase;
+class CVirtualFolders;
+class CPbapVCardExporter;
+class CPbapContactDbViews;
+class RFs;
+class CPbapLogWrapper;
+class CPbapAuthPasswordGetter;
+
+
+const TUint KPbapServerShutdownDelay = 5000000;
+
+enum TPbapAvailability 
+	{
+	EPbapUnavailable	= 0,
+	EPbapAvailable		= 0xff
+	};
+
+/**
+ server shutdown timer
+ */
+class CPbapServerShutdown : public CTimer
+	{
+public:
+	static CPbapServerShutdown* NewL();
+	inline void Start();
+
+private:
+	inline CPbapServerShutdown();
+	inline void ConstructL();
+	void RunL();
+	};
+
+
+/**
+ PBAP server
+ */
+class CPbapServer : public CPolicyServer,
+					public MObexServerNotifyAsync,
+					public MObexAuthChallengeHandler,
+					public MVirtualFolderClient,
+					public MPbapExporter,
+					public MPbapErrorReporter
+	{
+public:
+	static CPbapServer* NewL();
+	~CPbapServer();
+
+	void AddSession();
+	void DropSession();
+
+	void StartObexL();
+	void ReleaseObex();
+
+	void SetPasswordL(HBufC* aPassword);
+
+	void HandlePasswordRetrieved(TInt aError, const TDesC& aPassword);
+
+private:
+	CPbapServer();
+	
+	void ConstructL();
+	void OpenContactsDbL();
+	void CreateLogEngineClientL();
+	
+	void RegisterWithSdpL(TUint aRfcommChannel);
+	void ReleaseSdpRegistration();
+	void UpdateAvailability(TPbapAvailability aAvailablility);
+	void DoUpdateAvailabilityL(TPbapAvailability aAvailablility);
+
+	void BuildVirtualFolderTreeL();
+	CVirtualFolders* TelecomSubTreeL();
+
+#ifdef __INCLUDE_SIM1_FOLDERS__
+	CVirtualFolders* SIMTelecomSubTreeL();
+#endif // __INCLUDE_SIM1_FOLDERS__
+
+	CVirtualFolders* ResolvePath(TDes& aPathInObjectOut, TBool aAbsolute) const;
+
+	void DoGetRequestIndicationL(CObexBaseObject* aRequiredObject);
+	
+	void CleanupGetRequest();
+	void CleanupOnDisconnect();
+	
+	void ReportObexError(TInt aSymbianError);
+	
+	static TInt RestartObex(TAny* aAny);
+	void DoRestartObex();
+
+private:
+	// from CServer2
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+
+private:
+	// from MObexServerNotifyAsync
+	virtual void ErrorIndication(TInt aError);
+	virtual void TransportUpIndication();
+	virtual void TransportDownIndication();
+	virtual void ObexConnectIndication(const TObexConnectInfo& aRemoteInfo, const TDesC8& aInfo);
+	virtual void ObexDisconnectIndication(const TDesC8& aInfo);
+	virtual void PutRequestIndication();
+	virtual TInt PutPacketIndication();
+	virtual void PutCompleteIndication();
+	virtual void GetRequestIndication(CObexBaseObject* aRequiredObject);
+	virtual TInt GetPacketIndication();
+	virtual void GetCompleteIndication();
+	virtual void SetPathIndication(const CObex::TSetPathInfo& aPathInfo, const TDesC8& aInfo);
+	virtual void AbortIndication();
+	virtual void CancelIndicationCallback();
+
+private:
+	// from MObexAuthChallengeHandler
+	virtual void GetUserPasswordL(const TDesC &aRealm);
+	
+private:
+	// from MVirtualFolderClient
+	virtual CContactDatabase& ContactDB() const;
+	virtual MPbapExporter& Exporter();
+	virtual MPbapErrorReporter& ErrorReporter();
+	virtual CPbapContactDbViews& ContactDbViews();
+	virtual CPbapLogWrapper& LogClient() const;
+
+private:
+	// from MPbapExporter
+	virtual void StartExport();
+	virtual void ExportListingBeginL();
+	virtual void ExportListingEntryL(TInt aHandle, const TDesC& aName);
+	virtual void ExportListingEndL();
+	virtual void ExportCallHistoryL(const CLogEvent& aEvent, TVCardVersion aFormat, TUint64 aFilter);
+	virtual void ExportContactL(TContactItemId aContactId, TVCardVersion aFormat, TUint64 aFilter);
+	virtual void ExportEmptyVCardL(TVCardVersion aFormat);
+	virtual void ExportPhonebookSizeL(TInt aCount);
+	virtual void ExportNewMissedCallsL(TInt aCount);
+	virtual void FinaliseExportL();
+	virtual void CancelExport();
+
+private:
+	// from MPbapErrorReporter
+	virtual void SendServiceUnavailableError();
+	virtual void SendPreconditionFailedError();
+	virtual void SendNotFoundError();
+
+private:
+	TBool						iActiveSession;
+	CPbapServerShutdown*		iShutdown;
+
+	CObexServer*				iObex;
+	CPbapAuthPasswordGetter*	iPasswordGetter;
+	HBufC*						iPassword;
+	CObexBufObject*				iOutboundObject;
+	CBufFlat*					iOutboundBuffer;
+	RBufWriteStream				iBufStreamer;
+	RBuf8						iAppHeaderDetails;
+	TBool						iExportInProgress;
+
+	CContactDatabase*			iContacts;
+	CPbapVCardExporterUtil*		iVCardExporter;
+	CPbapContactDbViews* 		iContactViews;
+
+	RFs							iFs;
+	CPbapLogWrapper*			iLogWrapper;
+	
+	CVirtualFolders*			iFolderTree;
+
+	RSdp						iSdpServer;
+	RSdpDatabase				iSdpDatabase;
+	TSdpServRecordHandle		iSdpRecordHandle;
+
+	RSocketServ					iSocketServ;
+	RBTPhysicalLinkAdapter		iPhysLinkAdaptor;
+	
+	CAsyncCallBack*				iAsyncRestartObex;
+	
+private:
+	CVirtualFolders*			iCurrentFolder; //not owned
+	CVirtualFolders*			iGetRequestFolder; //not owned
+	};
+
+#endif //PBAPSERVER_H