Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __ACCOUNTHANDLER_H__
00020 #define __ACCOUNTHANDLER_H__
00021
00022 #include <map>
00023 #include <string>
00024 #include <list>
00025 #include <vector>
00026 #include "ut_types.h"
00027 #include "ut_string_class.h"
00028 #include "ut_vector.h"
00029 #include "DocHandle.h"
00030 #include <packet/xp/AbiCollab_Packet.h>
00031 #include <account/xp/Buddy.h>
00032 #include <account/xp/EventListener.h>
00033 #ifdef _WIN32
00034 #define WIN32_LEAN_AND_MEAN
00035 #include <windows.h>
00036 #endif
00037
00038 class AbiCollab;
00039
00040 typedef enum _ConnectResult
00041 {
00042 CONNECT_SUCCESS = 0,
00043 CONNECT_FAILED,
00044 CONNECT_IN_PROGRESS,
00045 CONNECT_AUTHENTICATION_FAILED,
00046 CONNECT_ALREADY_CONNECTED,
00047 CONNECT_INTERNAL_ERROR
00048 } ConnectResult;
00049
00050 typedef AccountHandler* (*AccountHandlerConstructor)();
00051
00052 typedef std::map<std::string, std::string> PropertyMap;
00053
00054 class ProtocolErrorPacket : public Packet
00055 {
00056 public:
00057 ProtocolErrorPacket();
00058 ProtocolErrorPacket( UT_sint32 errorEnum );
00059 DECLARE_PACKET(ProtocolErrorPacket);
00060
00061 virtual UT_sint32 getProtocolVersion() const
00062 { return 0; }
00063 UT_sint32 getErrorEnum() const
00064 { return m_errorEnum; }
00065 UT_sint32 getRemoteVersion() const
00066 { return m_remoteVersion; }
00067 protected:
00068 UT_sint32 m_errorEnum;
00069 UT_sint32 m_remoteVersion;
00070 };
00071
00072 class AccountHandler : public EventListener
00073 {
00074 public:
00075 AccountHandler() {}
00076 virtual ~AccountHandler() {}
00077
00078
00079 static UT_UTF8String getStaticStorageType()
00080 { return "null"; };
00081 virtual UT_UTF8String getStorageType() = 0;
00082 virtual UT_UTF8String getDescription() = 0;
00083 virtual UT_UTF8String getDisplayType() = 0;
00084
00085 void addProperty(const std::string& key, const std::string& value)
00086 { m_properties[key] = value; }
00087 bool hasProperty(const std::string& key);
00088 const std::string getProperty(const std::string& key);
00089 PropertyMap& getProperties()
00090 { return m_properties; }
00091
00092
00093 virtual UT_UTF8String getShareHint(PD_Document* ) { return ""; }
00094 virtual void embedDialogWidgets(void* pEmbeddingParent) = 0;
00095 virtual void removeDialogWidgets(void* pEmbeddingParent) = 0;
00096 virtual bool canDelete()
00097 { return true; }
00098 virtual bool canEditProperties()
00099 { return true; }
00100 virtual void loadProperties() = 0;
00101 virtual void storeProperties() = 0;
00102
00103 #ifdef _WIN32
00104 virtual BOOL _onCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) = 0;
00105 virtual bool shouldProcessFocus() = 0;
00106 #endif
00107
00108
00109 virtual ConnectResult connect() = 0;
00110 virtual bool disconnect() = 0;
00111 virtual bool isOnline() = 0;
00112 virtual bool autoConnect();
00113
00114
00115 virtual bool operator==(AccountHandler & rhHandler);
00116
00117
00118 virtual bool send(const Packet* packet) = 0;
00119 virtual bool send(const Packet* packet, BuddyPtr buddy) = 0;
00120
00121
00122 void addBuddy(BuddyPtr pBuddy);
00123 std::vector<BuddyPtr>& getBuddies()
00124 { return m_vBuddies; }
00125 virtual void getBuddiesAsync() {}
00126 void deleteBuddy(BuddyPtr pBuddy);
00127 void deleteBuddies();
00128 virtual BuddyPtr constructBuddy(const PropertyMap& vProps) = 0;
00129
00130
00131
00132
00133
00134
00135
00136 virtual BuddyPtr constructBuddy(const std::string& descriptor, BuddyPtr pBuddy) = 0;
00137 virtual bool recognizeBuddyIdentifier(const std::string& identifier) = 0;
00138 virtual bool allowsManualBuddies() = 0;
00139 virtual void forceDisconnectBuddy(BuddyPtr ) = 0;
00140 virtual bool hasAccess(const std::vector<std::string>& vAcl, BuddyPtr pBuddy);
00141 virtual bool hasPersistentAccessControl() = 0;
00142
00143 virtual bool canShare(BuddyPtr )
00144 { return true; }
00145 virtual bool defaultShareState(BuddyPtr )
00146 { return false; }
00147
00148
00149 virtual void getSessionsAsync();
00150 virtual void getSessionsAsync(BuddyPtr pBuddy);
00151 virtual bool startSession(PD_Document* , const std::vector<std::string>& , AbiCollab** )
00152 { return true; }
00153 virtual bool getAcl(AbiCollab* , std::vector<std::string>& )
00154 { return true; }
00155 virtual bool setAcl(AbiCollab* , const std::vector<std::string>& )
00156 { return true; }
00157 virtual void joinSessionAsync(BuddyPtr pBuddy, DocHandle& docHandle);
00158 virtual bool hasSession(const std::string& sSessionId);
00159 virtual bool allowsSessionTakeover() = 0;
00160 bool getCanOffer()
00161 { return m_bCanOffer; }
00162 void setOffering(bool bCanOffer)
00163 { m_bCanOffer = bCanOffer; }
00164 virtual bool canManuallyStartSession()
00165 { return true; }
00166
00167
00168 virtual void handleMessage(Packet* pPacket, BuddyPtr pBuddy);
00169
00170
00171 virtual void signal(const Event& event, BuddyPtr pSource);
00172
00173
00174 enum
00175 {
00176 PE_Invalid_Version = 1,
00177 };
00178
00179 protected:
00180
00181 Packet* _createPacket(const std::string& packet, BuddyPtr pBuddy);
00182 void _createPacketStream(std::string& sString, const Packet* pPacket);
00183 virtual bool _handleProtocolError(Packet* packet, BuddyPtr buddy);
00184 virtual void _handlePacket(Packet* packet, BuddyPtr buddy);
00185
00186
00187 void _sendProtocolError(BuddyPtr, UT_sint32 errorEnum);
00188
00189
00190 PropertyMap m_properties;
00191
00192 private:
00193 static void _reportProtocolError(UT_sint32 remoteVersion, UT_sint32 errorEnum, BuddyPtr buddy);
00194
00195 bool m_bCanOffer;
00196 std::vector<BuddyPtr> m_vBuddies;
00197 };
00198
00199
00200 #endif