connector.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __BARRY_CONNECT_H__
00023 #define __BARRY_CONNECT_H__
00024
00025 #include "dll.h"
00026 #include "iconv.h"
00027 #include "pin.h"
00028 #include "probe.h"
00029 #include <string>
00030 #include <memory>
00031 #include <time.h>
00032
00033 namespace Barry {
00034
00035 class SocketRoutingQueue;
00036 class Controller;
00037 namespace Mode {
00038 class Desktop;
00039 }
00040
00041 class BXEXPORT Connector
00042 {
00043 protected:
00044 std::string m_password;
00045 bool m_needs_reconnect;
00046 Barry::IConverter m_ic;
00047 Barry::ProbeResult m_probe_result;
00048 int m_connect_count;
00049 time_t m_last_disconnect;
00050
00051 protected:
00052
00053 static Barry::ProbeResult FindDevice(Barry::Pin pin);
00054
00055
00056 virtual void StartConnect(const char *password) = 0;
00057 virtual void RetryPassword(const char *password) = 0;
00058 virtual void FinishConnect() = 0;
00059 virtual void DoDisconnect() = 0;
00060
00061
00062
00063 virtual bool IsDisconnected() = 0;
00064
00065 public:
00066 Connector(const char *password, const std::string &locale,
00067 Barry::Pin pin = 0);
00068 Connector(const char *password, const std::string &locale,
00069 const Barry::ProbeResult &result);
00070 virtual ~Connector();
00071
00072 IConverter& GetIConverter() { return m_ic; }
00073 const IConverter& GetIConverter() const { return m_ic; }
00074 Barry::ProbeResult& GetProbeResult() { return m_probe_result; }
00075 const Barry::ProbeResult& GetProbeResult() const { return m_probe_result; }
00076
00077 virtual void ClearPassword();
00078 virtual void SetPassword(const char *password);
00079
00080
00081
00082 virtual bool Connect();
00083
00084
00085 virtual void Disconnect();
00086
00087
00088
00089
00090
00091
00092
00093 virtual bool Reconnect(int total_tries = 2);
00094
00095
00096
00097
00098 virtual bool ReconnectForDirtyFlags();
00099
00100
00101 virtual bool IsConnected() = 0;
00102
00103
00104
00105
00106
00107
00108
00109
00110 virtual void RequireDirtyReconnect();
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 virtual bool PasswordPrompt(const Barry::BadPassword &bp,
00123 std::string &password_result) = 0;
00124 };
00125
00126 class BXEXPORT DesktopConnector : public Connector
00127 {
00128 Barry::SocketRoutingQueue *m_router;
00129 std::auto_ptr<Barry::Controller> m_con;
00130 std::auto_ptr<Mode::Desktop> m_desktop;
00131 int m_connect_timeout;
00132
00133 protected:
00134 virtual void StartConnect(const char *password);
00135 virtual void RetryPassword(const char *password);
00136 virtual void FinishConnect();
00137 virtual void DoDisconnect();
00138 virtual bool IsDisconnected();
00139
00140 public:
00141
00142
00143
00144
00145
00146
00147
00148
00149 DesktopConnector(const char *password, const std::string &locale,
00150 Barry::Pin pin = 0, Barry::SocketRoutingQueue *router = 0,
00151 int connect_timeout = 10000);
00152
00153 DesktopConnector(const char *password, const std::string &locale,
00154 const Barry::ProbeResult &result,
00155 Barry::SocketRoutingQueue *router = 0,
00156 int connect_timeout = 10000);
00157
00158 virtual bool IsConnected();
00159
00160 virtual bool PasswordPrompt(const Barry::BadPassword &bp,
00161 std::string &password_result)
00162 {
00163
00164 return false;
00165 }
00166
00167
00168
00169
00170
00171 Controller& GetController() { return *m_con; }
00172 Mode::Desktop& GetDesktop() { return *m_desktop; }
00173
00174 const Controller& GetController() const { return *m_con; }
00175 const Mode::Desktop& GetDesktop() const{ return *m_desktop; }
00176 };
00177
00178 }
00179
00180 #endif
00181