1 #ifndef __ABSTRACTHOOK_H__
2 #define __ABSTRACTHOOK_H__
3 
4 #include "imcontact.h"
5 #include "imevents.h"
6 #include "imcontroller.h"
7 
8 struct hookcapab {
9     enum enumeration {
10 	urls,
11 	files,
12 	contacts,
13 	authrequests,
14 	authreqwithmessages,
15 	fetchaway,
16 	setaway,
17 	setextstatus,
18 	changenick,
19 	changepassword,
20 	changedetails,
21 	changeabout,
22 	optionalpassword,
23 	visibility,
24 	version,
25 	ping,
26 	conferencing,
27 	conferencesaretemporary,
28 	cltemporary,
29 	directadd,
30 	flexiblesearch,
31 	flexiblereg,
32 	ssl,
33 	channelpasswords,
34 	groupchatservices,
35 	nochat,
36 	acknowledgements,
37 	pgp
38     };
39 };
40 
41 struct servicetype {
42     enum enumeration {
43 	search,
44 	registration,
45 	groupchat
46     };
47 };
48 
49 class abstracthook {
50 	public:
51 	enum logevent {
52 	    logConnecting,
53 	    logLogged,
54 	    logSearchFinished,
55 	    logPasswordChanged,
56 	    logDisconnected,
57 	    logContactAdd,
58 	    logContactRemove,
59 	    logConfMembers
60 	};
61 
62     protected:
63 	enum Encoding {
64 	    encUTF, encKOI, encUnknown
65 	};
66 
67 	protocolname proto;
68 	imstatus manualstatus;
69 	verticalmenu *searchdest;
70 	set<hookcapab::enumeration> fcapabs;
71 	vector<icqcontact *> foundguys;
72 
73 	string rusconv(const string &tdir, const string &text);
74 	string rushtmlconv(const string &tdir, const string &text, bool rus = true);
75 	string ruscrlfconv(const string &tdir, const string &text);
76 
77 	void requestfromfound(const imcontact &ic);
78 	void log(logevent ev, ...);
79 
80 	struct Country_struct {
81 	    char *name;
82 	    unsigned short code;
83 	};
84 
85     public:
86 	static const unsigned char Language_table_size;
87 	static const char* const Language_table[];
88 	static const unsigned short Country_table_size;
89 	static const Country_struct Country_table[];
90 
91 	static string getCountryIDtoString(unsigned short id);
92 	static unsigned short getCountryByName(string name);
93 	static signed char getSystemTimezone();
94 	static string getInterestsIDtoString(unsigned char id);
95 	static string getBackgroundIDtoString(unsigned short id);
96 	static string getTimezoneIDtoString(signed char id);
97 	static string getTimezonetoLocaltime(signed char id);
98 	static string getLanguageIDtoString(unsigned char id);
99 	static string getmd5(const string &text);
100 
101     public:
102 	abstracthook(protocolname aproto);
103         virtual ~abstracthook();
104 
105 	virtual void init();
106 
107 	virtual void connect();
108 	virtual void disconnect();
109 	virtual void exectimers();
110 	virtual void main();
111 
112 	virtual void getsockets(fd_set &rfds, fd_set &wfds, fd_set &efds, int &hsocket) const;
113 	virtual bool isoursocket(fd_set &rfds, fd_set &wfds, fd_set &efds) const;
114 
115 	virtual bool online() const;
116 	virtual bool logged() const;
117 	virtual bool isconnecting() const;
118 	virtual bool enabled() const;
119 
120 	virtual bool send(const imevent &ev);
121 
122 	virtual void sendnewuser(const imcontact &c);
123 	virtual void removeuser(const imcontact &ic);
124 
125 	virtual void setautostatus(imstatus st);
126 	virtual void restorestatus();
127 
128 	virtual void setstatus(imstatus st);
129 	virtual imstatus getstatus() const;
130 
getmanualstatus()131 	virtual imstatus getmanualstatus() const
132 	    { return manualstatus; }
133 
134 	virtual bool isdirectopen(const imcontact &c) const;
135 	virtual void requestinfo(const imcontact &c);
136 
137 	virtual void lookup(const imsearchparams &params, verticalmenu &dest);
138 	virtual void stoplookup();
139 
140 	virtual void requestawaymsg(const imcontact &c);
141 	virtual void requestversion(const imcontact &c);
142 	virtual void ping(const imcontact &c);
143 
getCapabs()144 	set<hookcapab::enumeration> getCapabs() const
145 	    { return fcapabs; }
146 
147 	virtual void ouridchanged(const icqconf::imaccount &ia);
148 
149 	virtual bool knowntransfer(const imfile &fr) const;
150 	virtual void replytransfer(const imfile &fr, bool accept,
151 	    const string &localpath = string());
152 	virtual void aborttransfer(const imfile &fr);
153 
154 	virtual void conferencecreate(const imcontact &confid,
155 	    const vector<imcontact> &lst);
156 
157 	virtual vector<string> getservices(servicetype::enumeration st) const;
158 
159 	virtual vector<pair<string, string> > getsearchparameters(const string &agentname) const;
160 	virtual vector<pair<string, string> > getregparameters(const string &agentname) const;
161 
162 	virtual void updatecontact(icqcontact *c);
163 	virtual void renamegroup(const string &oldname, const string &newname);
164 
165 	virtual bool regconnect(const string &aserv);
166 	virtual bool regattempt(unsigned int &auin, const string &apassword, const string &email);
167 };
168 
169 abstracthook &gethook(protocolname pname);
170 struct tm *maketm(int hour, int minute, int day, int month, int year);
171 
172 extern time_t timer_current;
173 
174 #endif
175