1 #ifndef __YAHOOHOOK_H__
2 #define __YAHOOHOOK_H__
3 
4 #include "abstracthook.h"
5 
6 #ifdef BUILD_YAHOO
7 
8 #include "icqconf.h"
9 
10 #define USE_STRUCT_CALLBACKS
11 #include "yahoo2_callbacks.h"
12 
13 class yahoohook: public abstracthook {
14     protected:
15 	enum Action {
16 	    tbdConfLogon
17 	};
18 
19 	struct connect_callback_data {
20 	    yahoo_connect_callback callback;
21 	    void *callback_data;
22 	    int id, tag;
23 	};
24 
25 	struct y_c {
26 	    int fd;
27 	    bool ssl;
28 	    int state;
y_cy_c29 	    y_c(int afd, bool assl, int astate) : fd(afd), ssl(assl), state(astate) { }
30 	};
31 
32 	struct yfd {
33 	    struct y_c con;
34 	    int tag;
35 	    void *data;
36 	    bool isconnect;
37 	    yahoo_input_condition cond;
38 
39 	    static int connection_tags;
40 
41 	    yfd(int afd, void *adata, bool assl, yahoo_input_condition acond, bool aisconnect = false)
42 		: con(afd, assl, 0), tag(connection_tags++), data(adata), isconnect(aisconnect), cond(acond) {}
43 
44 	    bool operator == (int atag) const { return tag == atag; }
45 	    bool operator != (int atag) const { return tag != atag; }
46 	};
47 
48 	vector<yfd> fds;
49 	vector<pair<Action, string> > tobedone;
50 
51 	vector<char *> sfiles;
52 	map<const char *, imfile> srfiles;
53 
54 	map<imfile, string> fvalid;
55 	map<string, string> awaymessages;
56 
57 	bool fonline, flogged, searchonlineonly;
58 	map<string, vector<string> > confmembers;
59 	imstatus ourstatus;
60 	int cid;
61 
62 	time_t timer_refresh, timer_close;
63 
64 	static void login_response(int id, int succ, const char *url);
65 	static void got_buddies(int id, YList *buds);
66 	static void got_identities(int id, YList *ids);
67 	static void status_changed(int id, const char *who, int stat, const char *msg, int away, int idle, int mobile);
68 	static void got_im(int id, const char *me, const char *who, const char *msg, long tm, int stat, int utf8);
69 	static void got_conf_invite(int id, const char *me, const char *who, const char *room, const char *msg, YList *members);
70 	static void conf_userdecline(int id, const char *me, const char *who, const char *room, const char *msg);
71 	static void conf_userjoin(int id, const char *me, const char *who, const char *room);
72 	static void conf_userleave(int id, const char *me, const char *who, const char *room);
73 	static void conf_message(int id, const char *me, const char *who, const char *room, const char *msg, int utf8);
74 	static void got_file(int id, const char *me, const char *who, const char *msg, const char *fname, unsigned long fesize, char *trid);
75 	static void contact_added(int id, const char *myid, const char *who, const char *msg);
76 	static void typing_notify(int id, const char *me, const char *who, int stat);
77 	static void game_notify(int id, const char *me, const char *who, int stat, const char *msg);
78 	static void mail_notify(int id, const char *from, const char *subj, int cnt);
79 	static void system_message(int id, const char *me, const char *who, const char *msg);
80 	static void got_ping(int id, const char *msg);
81 	static void error(int id, const char *err, int fatal, int num);
82 	static void got_ignore(int id, YList * igns);
83 	static void got_cookies(int id);
84 	static void got_search_result(int id, int found, int start, int total, YList *contacts);
85 	static void chat_cat_xml(int id, const char *xml);
86 	static void chat_join(int id, const char *me, const char *room, const char *topic, YList *members, void *fd);
87 	static void chat_userjoin(int id, const char *me, const char *room, struct yahoo_chat_member *who);
88 	static void chat_userleave(int id, const char *me, const char *room, const char *who);
89 	static void chat_message(int id, const char *me, const char *who, const char *room, const char *msg, int msgtype, int utf8);
90 	static void rejected(int id, const char *who, const char *msg);
91 	static void got_webcam_image(int id, const char * who, const unsigned char *image, unsigned int image_size, unsigned int real_size, unsigned int timestamp);
92 	static void webcam_invite(int id, const char *me, const char *from);
93 	static void webcam_invite_reply(int id, const char *me, const char *from, int accept);
94 	static void webcam_closed(int id, const char *who, int reason);
95 	static void webcam_viewer(int id, const char *who, int connect);
96 	static void webcam_data_request(int id, int send);
97 	static void got_buddyicon_request(int id, const char *me, const char *who);
98 	static void got_buddyicon(int id, const char *me, const char *who, const char *url, int checksum);
99 	static void auth_request(int id, const char *who, const char *msg);
100 	static void auth_response(int id, const char *who, char granted, const char *msg);
101 	static void buddyicon_uploaded(int id, const char *url);
102 	static void chat_yahooerror(int id, const char *me);
103 	static void chat_yahoologout(int id, const char *me);
104 	static int yahoo_connect(const char *host, int port);
105 	static void file_transfer_done(int id, int result, void *data);
106 	static char *get_ip_addr(const char *domain);
107 	static void got_buddy_change_group(int id, const char *me, const char *who, const char *old_group, const char *new_group);
108 	static void got_buddyicon_checksum(int id, char const *me, const char *who, int checksum);
109 	static void got_buzz(int id, const char *me, const char *who, long tm);
110 	static void got_ft_data(int id, const unsigned char *in, int len, void *data);
111 
112 	static int ylog(const char *fmt, ...);
113 
114 	static int add_handler(int id, void *fd, yahoo_input_condition cond, void *data);
115 	static void remove_handler(int id, int tag);
116 	static int connect_async(int id, const char *host, int port, yahoo_connect_callback callback, void *data, int use_ssl);
117 	static int y_write(void *fd, char *buf, int len);
118 	static int y_read(void *fd, char *buf, int len);
119 	static void y_close(void *fd);
120 
121 	static void get_fd(int id, void *fd, int error, void *data);
122 	static void get_url(int id, int fd, int error, const char *filename,
123 	    unsigned long size, void *data);
124 
125 	static struct tm *timestamp();
126 	static imstatus yahoo2imstatus(int status);
127 
128 	string decode(string text, bool utf);
129 
130 	YList *getmembers(const string &room);
131 	void userstatus(const string &nick, int st, const string &message, bool away);
132 	void disconnected();
133 
134 	void checkinlist(imcontact ic);
135 	void sendnewuser(const imcontact &ic, bool report);
136 	void removeuser(const imcontact &ic, bool report);
137 
138 	void connect_complete(void *data, struct y_c *con);
139 
140     public:
141 	yahoohook();
142 	~yahoohook();
143 
144 	void init();
145 
146 	void connect();
147 	void main();
148 	void exectimers();
149 	void disconnect();
150 
151 	void getsockets(fd_set &rs, fd_set &ws, fd_set &es, int &hsocket) const;
152 	bool isoursocket(fd_set &rs, fd_set &ws, fd_set &es) const;
153 
154 	bool online() const;
155 	bool logged() const;
156 	bool isconnecting() const;
157 	bool enabled() const;
158 
159 	void sendnewuser(const imcontact &ic);
160 	void removeuser(const imcontact &ic);
161 	void requestinfo(const imcontact &ic);
162 
163 	bool send(const imevent &ev);
164 
165 	void setautostatus(imstatus st);
166 	imstatus getstatus() const;
167 
168 	void lookup(const imsearchparams &params, verticalmenu &dest);
169 
170 	bool knowntransfer(const imfile &fr) const;
171 	void replytransfer(const imfile &fr, bool accept, const string &localpath = string());
172 	void aborttransfer(const imfile &fr);
173 
174 	void requestawaymsg(const imcontact &ic);
175 	void conferencecreate(const imcontact &confid, const vector<imcontact> &lst);
176 
177 	void updatecontact(icqcontact *c);
178 	void renamegroup(const string &oldname, const string &newname);
179 };
180 
181 extern yahoohook yhook;
182 
183 #endif
184 
185 #endif
186