annotate plugins/icq/gaim_icq.c @ 1220:16ea7a3fdbb6

[gaim-migrate @ 1230] updates to the ICQ plugin. pixmaps stolen from gnomeicu (in case the name didn't give that away) committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 08 Dec 2000 21:28:32 +0000
parents 5d1ded9f88b7
children 5186c154e90d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 #include <gtk/gtk.h>
1167
5d1ded9f88b7 [gaim-migrate @ 1177]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1153
diff changeset
2 #include <string.h>
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 #include "icq.h" /* well, we're doing ICQ, right? */
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 #include "multi.h" /* needed for gaim_connection */
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 #include "prpl.h" /* needed for prpl */
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 #include "gaim.h" /* needed for every other damn thing */
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
8 #include "pixmaps/gnomeicu-online.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
9 #include "pixmaps/gnomeicu-away.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
10 #include "pixmaps/gnomeicu-dnd.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
11 #include "pixmaps/gnomeicu-na.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
12 #include "pixmaps/gnomeicu-occ.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
13 #include "pixmaps/gnomeicu-ffc.xpm"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
14
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 struct icq_data {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 ICQLINK *link;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 int cur_status;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 int tcp_timer;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 int ack_timer;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 };
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22 static struct gaim_connection *find_gaim_conn_by_icq_link(ICQLINK *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
23 GSList *c = connections;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 struct gaim_connection *gc = NULL;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 struct icq_data *id;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27 while (c) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
28 gc = (struct gaim_connection *)c->data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
29 if (gc->protocol == PROTO_ICQ) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
30 id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 if (id->link == link)
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 break;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 gc = NULL;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 c = c->next;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
38 return gc;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
40
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 static char *icq_name() {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
42 return "ICQ";
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
43 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
44
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
45 static void icq_do_log(ICQLINK *link, time_t time, unsigned char level, const char *log) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
46 debug_printf("ICQ debug %d: %s", level, log);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
47 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
48
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
49 static gint icq_tcp_timer(ICQLINK *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
50 icq_TCPMain(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
51 return TRUE;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
52 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
53
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
54 static void icq_callback(gpointer data, gint source, GdkInputCondition condition) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55 struct gaim_connection *gc = (struct gaim_connection *)data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57 debug_printf("ICQ Callback handler\n");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
58
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
59 icq_HandleServerResponse(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
60 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
61
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
62 static void icq_online(ICQLINK *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
63 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
64 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
65 debug_printf("%s is now online.\n", gc->username);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
66 account_online(gc);
1153
3063e6743913 [gaim-migrate @ 1163]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1152
diff changeset
67 gc->options |= OPT_USR_KEEPALV;
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
68 serv_finish_login(gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
69
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
70 if (bud_list_cache_exists(gc))
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
71 do_import(NULL, gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
72
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
73 icq_ChangeStatus(id->link, STATUS_ONLINE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
74 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
75
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
76 static void icq_logged_off(ICQLINK *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
77 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
78 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 int icqSocket;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
80
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
81 gtk_timeout_remove(id->tcp_timer);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
82 gdk_input_remove(gc->inpa);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
84 if (icq_Connect(link, "icq.mirabilis.com", 4000) < 1) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
85 hide_login_progress(gc, "Unable to connect");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
86 g_free(id);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
87 signoff(gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
88 return;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
89 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
90
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
91 icqSocket = icq_GetSok(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
92 gc->inpa = gdk_input_add(icqSocket, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, icq_callback, gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
93
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
94 icq_Login(link, STATUS_ONLINE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
95 id->cur_status = STATUS_ONLINE;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
96
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
97 id->tcp_timer = gtk_timeout_add(100, (GtkFunction)icq_tcp_timer, link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
98 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
99
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
100 static void icq_msg_incoming(ICQLINK *link, unsigned long uin, unsigned char hour, unsigned char minute,
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
101 unsigned char day, unsigned char month, unsigned short year, const char *data) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
102 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
103 char buf[256], *tmp = g_strdup(data);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
104 g_snprintf(buf, sizeof buf, "%lu", uin);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
105 serv_got_im(gc, buf, tmp, 0);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
106 g_free(tmp);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
108
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
109 static void icq_user_online(ICQLINK *link, unsigned long uin, unsigned long st,
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
110 unsigned long ip, unsigned short port, unsigned long real_ip,
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
111 unsigned char tcp_flags) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
112 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
113 guint status;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
114 char buf[256];
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
115
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
116 g_snprintf(buf, sizeof buf, "%lu", uin);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
117 status = (st == STATUS_ONLINE) ? UC_NORMAL : UC_UNAVAILABLE | (st << 5);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
118 serv_got_update(gc, buf, 1, 0, 0, 0, status, 0);
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
119 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
120
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
121 static void icq_user_offline(ICQLINK *link, unsigned long uin) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
122 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
123 char buf[256]; g_snprintf(buf, sizeof buf, "%lu", uin);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
124 serv_got_update(gc, buf, 0, 0, 0, 0, 0, 0);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
125 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
126
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
127 static void icq_user_status(ICQLINK *link, unsigned long uin, unsigned long st) {
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
128 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
129 guint status;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
130 char buf[256];
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
131
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
132 g_snprintf(buf, sizeof buf, "%lu", uin);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
133 status = (st == STATUS_ONLINE) ? UC_NORMAL : UC_UNAVAILABLE | (st << 5);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
134 serv_got_update(gc, buf, 1, 0, 0, 0, status, 0);
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
135 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
136
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
137 static gint icq_set_timeout_cb(struct icq_data *id) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
138 icq_HandleTimeout(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
139 id->ack_timer = -1;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
140 return FALSE;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
141 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
142
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
143 static void icq_set_timeout(ICQLINK *link, long interval) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
144 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
145 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
146
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
147 debug_printf("icq_SetTimeout: %ld\n", interval);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
148 if (interval > 0 && id->ack_timer < 1)
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
149 id->ack_timer = gtk_timeout_add(interval * 1000, (GtkFunction)icq_set_timeout_cb, id);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
150 else if (id->ack_timer > 0) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
151 gtk_timeout_remove(id->ack_timer);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
152 id->ack_timer = -1;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
153 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
154 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
155
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
156 static void icq_url_incoming(struct icq_link *link, unsigned long uin, unsigned char hour,
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
157 unsigned char minute, unsigned char day, unsigned char month,
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
158 unsigned short year, const char *url, const char *descr) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
159 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
160 int len = strlen(url) + strlen(descr) + 25; /* 25 is straight out of my ass */
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
161 char *msg = g_malloc(len), buf[256];
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
162 g_snprintf(msg, len, "<A HREF=\"%s\">%s</A>", url, descr);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
163 g_snprintf(buf, 256, "%lu", uin);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
164 serv_got_im(gc, buf, msg, 0);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
165 g_free(msg);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
166 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
167
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
168 static void icq_wrong_passwd(struct icq_link *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
169 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
170 hide_login_progress(gc, "Invalid password.");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
171 signoff(gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
172 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
173
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
174 static void icq_invalid_uin(struct icq_link *link) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
175 struct gaim_connection *gc = find_gaim_conn_by_icq_link(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
176 hide_login_progress(gc, "Invalid UIN.");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
177 signoff(gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
178 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
179
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
180 static void icq_info_reply(struct icq_link *link, unsigned long uin, const char *nick,
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
181 const char *first, const char *last, const char *email, char auth) {
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
182 char buf[16 * 1024];
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
183
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
184 g_snprintf(buf, sizeof buf,
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
185 "<B>UIN:</B> %lu<BR>"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
186 "<B>Nick:</B> %s<BR>"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
187 "<B>Name:</B> %s %s<BR>"
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
188 "<B>Email:</B> %s\n",
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
189 uin,
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
190 nick,
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
191 first, last,
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
192 email);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
193 g_show_info_text(buf);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
194 }
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
195
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
196 static void icq_login(struct aim_user *user) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
197 struct gaim_connection *gc = new_gaim_conn(user);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
198 struct icq_data *id = gc->proto_data = g_new0(struct icq_data, 1);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
199 ICQLINK *link = id->link = g_new0(ICQLINK, 1);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
200 int icqSocket;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
201
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
202 icq_LogLevel = ICQ_LOG_MESSAGE;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
203
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
204 icq_Init(link, atol(user->username), user->password, "gaim user" /* hehe :) */);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
205
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
206 link->icq_Logged = icq_online;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
207 link->icq_Disconnected = icq_logged_off;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
208 link->icq_RecvMessage = icq_msg_incoming;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
209 link->icq_RecvURL = icq_url_incoming;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
210 link->icq_UserOnline = icq_user_online;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
211 link->icq_UserOffline = icq_user_offline;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
212 link->icq_UserStatusUpdate = icq_user_status;
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
213 link->icq_InfoReply = icq_info_reply;
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
214 link->icq_WrongPassword = icq_wrong_passwd;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
215 link->icq_InvalidUIN = icq_invalid_uin;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
216 link->icq_Log = icq_do_log;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
217 link->icq_SetTimeout = icq_set_timeout;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
218
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
219 icq_UnsetProxy(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
220
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
221 if (icq_Connect(link, "icq.mirabilis.com", 4000) < 1) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
222 hide_login_progress(gc, "Unable to connect");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
223 g_free(id);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
224 signoff(gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
225 return;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
226 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
227
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
228 icqSocket = icq_GetSok(link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
229 gc->inpa = gdk_input_add(icqSocket, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, icq_callback, gc);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
230
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
231 icq_Login(link, STATUS_ONLINE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
232 id->cur_status = STATUS_ONLINE;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
233
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
234 id->tcp_timer = gtk_timeout_add(100, (GtkFunction)icq_tcp_timer, link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
235
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
236 set_login_progress(gc, 0, "Connecting...");
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
237 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
238
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
239 static void icq_close(struct gaim_connection *gc) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
240 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
241
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
242 gtk_timeout_remove(id->tcp_timer);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
243 gdk_input_remove(gc->inpa);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
244 icq_Logout(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
245 icq_Disconnect(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
246 icq_Done(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
247 g_free(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
248 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
249
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
250 static struct prpl *my_protocol = NULL;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
251
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
252 static void icq_send_msg(struct gaim_connection *gc, char *who, char *msg, int away) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
253 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
254 icq_SendMessage(id->link, atol(who), msg, !away);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
255 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
256
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
257 static void icq_keepalive(struct gaim_connection *gc) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
258 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
259 icq_KeepAlive(id->link);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
260 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
261
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
262 static void icq_add_buddy(struct gaim_connection *gc, char *who) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
263 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
264 icq_ContactAdd(id->link, atol(who));
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
265 icq_ContactSetVis(id->link, atol(who), TRUE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
266 icq_SendNewUser(id->link, atol(who));
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
267 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
268
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
269 static void icq_add_buddies(struct gaim_connection *gc, GList *whos) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
270 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
271 while (whos) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
272 icq_ContactAdd(id->link, atol(whos->data));
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
273 icq_ContactSetVis(id->link, atol(whos->data), TRUE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
274 icq_SendNewUser(id->link, atol(whos->data));
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
275 whos = whos->next;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
276 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
277 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
278
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
279 static void icq_rem_buddy(struct gaim_connection *gc, char *who) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
280 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
281 icq_ContactRemove(id->link, atol(who));
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
282 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
283
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
284 static void icq_set_away(struct gaim_connection *gc, char *msg) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
285 struct icq_data *id = (struct icq_data *)gc->proto_data;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
286
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287 if (msg && msg[0]) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
288 icq_ChangeStatus(id->link, STATUS_NA);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
289 } else {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
290 icq_ChangeStatus(id->link, STATUS_ONLINE);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
291 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
292 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
293
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
294 static char **icq_list_icon(int uc) {
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
295 guint status;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
296 if (uc == UC_NORMAL)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
297 return icon_online_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
298 status = uc >> 5;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
299 if (status & STATUS_NA)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
300 return icon_na_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
301 if (status & STATUS_DND)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
302 return icon_dnd_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
303 if (status & STATUS_OCCUPIED)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
304 return icon_occ_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
305 if (status & STATUS_AWAY)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
306 return icon_away_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
307 if (status & STATUS_FREE_CHAT)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
308 return icon_ffc_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
309 if (status & STATUS_INVISIBLE)
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
310 return NULL;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
311 return icon_online_xpm;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
312 }
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
313
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
314 static void icq_get_info(struct gaim_connection *gc, char *who) {
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
315 struct icq_data *id = (struct icq_data *)gc->proto_data;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
316 icq_SendInfoReq(id->link, atol(who));
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
317 }
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
318
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
319 static void icq_info(GtkObject *obj, char *who) {
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
320 serv_get_info(gtk_object_get_user_data(obj), who);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
321 }
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
322
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
323 static void icq_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) {
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
324 GtkWidget *button;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
325
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
326 button = gtk_menu_item_new_with_label(_("Get Info"));
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
327 gtk_signal_connect(GTK_OBJECT(button), "activate",
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
328 GTK_SIGNAL_FUNC(icq_info), who);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
329 gtk_object_set_user_data(GTK_OBJECT(button), gc);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
330 gtk_menu_append(GTK_MENU(menu), button);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
331 gtk_widget_show(button);
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
332 }
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
333
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
334 static void icq_init(struct prpl *ret) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
335 ret->protocol = PROTO_ICQ;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
336 ret->name = icq_name;
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
337 ret->list_icon = icq_list_icon;
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
338 ret->action_menu = icq_action_menu;
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
339 ret->login = icq_login;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
340 ret->close = icq_close;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
341 ret->send_im = icq_send_msg;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
342 ret->add_buddy = icq_add_buddy;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
343 ret->add_buddies = icq_add_buddies;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
344 ret->remove_buddy = icq_rem_buddy;
1220
16ea7a3fdbb6 [gaim-migrate @ 1230]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1167
diff changeset
345 ret->get_info = icq_get_info;
1152
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
346 ret->set_away = icq_set_away;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
347 ret->keepalive = icq_keepalive;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
348
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
349 my_protocol = ret;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
350 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
351
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
352 char *gaim_plugin_init(GModule *handle) {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
353 load_protocol(icq_init);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
354 return NULL;
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
355 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
356
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
357 void gaim_plugin_remove() {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
358 struct prpl *p = find_prpl(PROTO_ICQ);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
359 if (p == my_protocol)
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
360 unload_protocol(p);
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
361 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
362
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
363 char *name() {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
364 return "ICQ";
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
365 }
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
366
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
367 char *description() {
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
368 return "Allows gaim to use the ICQ protocol";
201ec77f3a60 [gaim-migrate @ 1162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
369 }