--- /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