src/protocols/yahoo/ycht.c

Thu, 20 Jul 2006 08:11:54 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Thu, 20 Jul 2006 08:11:54 +0000
changeset 14030
23144f1dc950
parent 13201
8c224ef70efa
child 14151
34427f138b1f
permissions
-rw-r--r--

[gaim-migrate @ 16525]
A bunch of little things
* Use GAIM_CONNECTION_IS_VALID(gc) in a lot of places where
we were doing g_list_find(gaim_connections_get_all(), gc)
* Get rid of a lot of places where we were doing
g_list_find(gaim_connections_get_all(), gc). The handle used
by the request API ensures that the ok and cancel callback
functions won't be called if the gc is destroyed. However,
GAIM_CONNECTION_IS_VALID(gc) is still very important for
callback functions where we can't cancel the request.
For example, gaim_proxy_connect() callback functions.
* "Added" a function to Yahoo! that should help us notice
when our buddies change their buddy icon/display picture
* Some comments in a few places
* Changed GAIM_CONNECTION_IS_VALID(gc) to only look through
the list of "all" connections and not the list of
"connecting" connections. Some time ago we changed how
this was done so that the list of "all" connections now
includes the "connection" connections.

9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /**
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * @file ycht.c The Yahoo! protocol plugin, YCHT protocol stuff.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
4 * gaim
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
5 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2004 Timothy Ringenbach <omarvo@hotmail.com>
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
7 * Liberal amounts of code borrowed from the rest of the Yahoo! prpl.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
9 * Gaim is the legal property of its developers, whose names are too numerous
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * to list here. Please refer to the COPYRIGHT file distributed with this
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * source distribution.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * This program is free software; you can redistribute it and/or modify
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * it under the terms of the GNU General Public License as published by
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * the Free Software Foundation; either version 2 of the License, or
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * (at your option) any later version.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * This program is distributed in the hope that it will be useful,
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 * GNU General Public License for more details.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 *
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23 * You should have received a copy of the GNU General Public License
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 * along with this program; if not, write to the Free Software
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 */
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28 #include <string.h>
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "internal.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #include "prpl.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32 #include "notify.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33 #include "account.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34 #include "proxy.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35 #include "debug.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36 #include "conversation.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 #include "util.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39 #include "yahoo.h"
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9846
diff changeset
40 #include "yahoo_packet.h"
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41 #include "ycht.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
42 #include "yahoochat.h"
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
43
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
44 /*
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
45 * dword: YCHT
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46 * dword: 0x000000AE
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47 * dword: service
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 * word: status
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49 * word: size
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 */
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51 #define YAHOO_CHAT_ID (1)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 /************************************************************************************
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53 * Functions to process various kinds of packets.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
54 ************************************************************************************/
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
55 static void ycht_process_login(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
58 struct yahoo_data *yd = gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
59
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
60 if (ycht->logged_in)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
61 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 yd->chat_online = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
64 ycht->logged_in = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
65
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 if (ycht->room)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 ycht_chat_join(ycht, ycht->room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 static void ycht_process_logout(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
72 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73 struct yahoo_data *yd = gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
75 yd->chat_online = FALSE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 ycht->logged_in = FALSE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 static void ycht_process_chatjoin(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 char *room, *topic;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83 GaimConversation *c = NULL;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 gboolean new_room = FALSE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 char **members;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 int i;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88 room = g_list_nth_data(pkt->data, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 topic = g_list_nth_data(pkt->data, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 if (!g_list_nth_data(pkt->data, 4))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 if (!room)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95 members = g_strsplit(g_list_nth_data(pkt->data, 4), "\001", 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 for (i = 0; members[i]; i++) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 char *tmp = strchr(members[i], '\002');
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 if (tmp)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 *tmp = '\0';
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 if (g_list_length(pkt->data) > 5)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 new_room = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 if (new_room && ycht->changing_rooms) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106 serv_got_chat_left(gc, YAHOO_CHAT_ID);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 ycht->changing_rooms = FALSE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109 } else {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113 if (topic)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
114 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), NULL, topic);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 for (i = 0; members[i]; i++) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117 if (new_room) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118 /*if (!strcmp(members[i], gaim_connection_get_display_name(ycht->gc)))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119 continue;*/
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9554
diff changeset
120 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c), members[i], NULL, GAIM_CBFLAGS_NONE, TRUE);
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 } else {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 yahoo_chat_add_user(GAIM_CONV_CHAT(c), members[i], NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126 g_strfreev(members);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 static void ycht_process_chatpart(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 char *room, *who;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
133 room = g_list_nth_data(pkt->data, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134 who = g_list_nth_data(pkt->data, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136 if (who && room) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
137 GaimConversation *c = gaim_find_chat(ycht->gc, YAHOO_CHAT_ID);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
138 if (c && !gaim_utf8_strcasecmp(gaim_conversation_get_name(c), room))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c), who, NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144 static void ycht_progress_chatmsg(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146 char *who, *what, *msg;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 GaimConversation *c;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
149
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150 who = g_list_nth_data(pkt->data, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 what = g_list_nth_data(pkt->data, 2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 if (!who || !what)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157 if (!c)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
158 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
159
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160 msg = yahoo_string_decode(gc, what, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
161 what = yahoo_codes_to_html(msg);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162 g_free(msg);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 if (pkt->service == YCHT_SERVICE_CHATMSG_EMOTE) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165 char *tmp = g_strdup_printf("/me %s", what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166 g_free(what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 what = tmp;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 serv_got_chat_in(gc, YAHOO_CHAT_ID, who, 0, what, time(NULL));
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 g_free(what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
173
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174 static void ycht_progress_online_friends(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176 #if 0
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178 struct yahoo_data *yd = gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
179
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 if (ycht->logged_in)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
181 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183 yd->chat_online = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184 ycht->logged_in = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186 if (ycht->room)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
187 ycht_chat_join(ycht, ycht->room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
188 #endif
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
190
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
191 /*****************************************************************************
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
192 * Functions dealing with YCHT packets and their contents directly.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 *****************************************************************************/
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10392
diff changeset
194 static void ycht_packet_dump(const guchar *data, int len)
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196 #ifdef YAHOO_YCHT_DEBUG
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 int i;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
200
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
201 for (i = 0; i + 1 < len; i += 2) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
202 if ((i % 16 == 0) && i) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
203 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
204 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
205 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
206
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx%02hhx ", data[i], data[i + 1]);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
208 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
209 if (i < len)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
210 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx", data[i]);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
211
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
213 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
214
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215 for (i = 0; i < len; i++) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
216 if ((i % 16 == 0) && i) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
219 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
220
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
221 if (g_ascii_isprint(data[i]))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
222 gaim_debug(GAIM_DEBUG_MISC, NULL, "%c ", data[i]);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
223 else
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224 gaim_debug(GAIM_DEBUG_MISC, NULL, ". ");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
225 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
226
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
227 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228 #endif
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
229 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
231 static YchtPkt *ycht_packet_new(guint version, guint service, int status)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
232 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233 YchtPkt *ret;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
234
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 ret = g_new0(YchtPkt, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237 ret->version = version;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
238 ret->service = service;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
239 ret->status = status;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
240
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 return ret;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
243
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244 static void ycht_packet_append(YchtPkt *pkt, const char *str)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 g_return_if_fail(pkt != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
247 g_return_if_fail(str != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
249 pkt->data = g_list_append(pkt->data, g_strdup(str));
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252 static int ycht_packet_length(YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254 int ret;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
255 GList *l;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
257 ret = YCHT_HEADER_LEN;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
258
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
259 for (l = pkt->data; l; l = l->next) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
260 ret += strlen(l->data);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
261 if (l->next)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
262 ret += strlen(YCHT_SEP);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
263 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
264
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
265 return ret;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
266 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
267
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
268 static void ycht_packet_send_write_cb(gpointer data, gint source, GaimInputCondition cond)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
269 {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
270 YchtConn *ycht = data;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
271 int ret, writelen;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
272
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
273 writelen = gaim_circ_buffer_get_max_read(ycht->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
274
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
275 if (writelen == 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
276 gaim_input_remove(ycht->tx_handler);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
277 ycht->tx_handler = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
278 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
279 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
280
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
281 ret = write(ycht->fd, ycht->txbuf->outptr, writelen);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
282
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
283 if (ret < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
284 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
285 else if (ret <= 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
286 /* TODO: error handling */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
287 /*
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
288 gaim_connection_error(gaim_account_get_connection(irc->account),
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
289 _("Server has disconnected"));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
290 */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
291 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
292 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
293
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
294 gaim_circ_buffer_mark_read(ycht->txbuf, ret);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
295
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
296 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
297
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
298 static void ycht_packet_send(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
299 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
300 int len, pos, written;
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
301 char *buf;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
302 GList *l;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
303
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
304 g_return_if_fail(ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
305 g_return_if_fail(pkt != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
306 g_return_if_fail(ycht->fd != -1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
307
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
308 pos = 0;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
309 len = ycht_packet_length(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
310 buf = g_malloc(len);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
311
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
312 memcpy(buf + pos, "YCHT", 4); pos += 4;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
313 pos += yahoo_put32(buf + pos, pkt->version);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314 pos += yahoo_put32(buf + pos, pkt->service);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
315 pos += yahoo_put16(buf + pos, pkt->status);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 pos += yahoo_put16(buf + pos, len - YCHT_HEADER_LEN);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318 for (l = pkt->data; l; l = l->next) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319 int slen = strlen(l->data);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 memcpy(buf + pos, l->data, slen); pos += slen;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
322 if (l->next) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323 memcpy(buf + pos, YCHT_SEP, strlen(YCHT_SEP));
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 pos += strlen(YCHT_SEP);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
326 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
327
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
328 if (!ycht->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
329 written = write(ycht->fd, buf, len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
330 else {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
331 written = -1;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
332 errno = EAGAIN;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
333 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
334
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
335 if (written < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
336 written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
337 else if (written <= 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
338 /* TODO: Error handling (was none before NBIO changes) */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
339 written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
340 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
341
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
342 if (written < len) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
343 if (!ycht->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
344 ycht->tx_handler = gaim_input_add(ycht->fd,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
345 GAIM_INPUT_WRITE, ycht_packet_send_write_cb,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
346 ycht);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
347 gaim_circ_buffer_append(ycht->txbuf, buf + written,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
348 len - written);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
349 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
350
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351 g_free(buf);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 static void ycht_packet_read(YchtPkt *pkt, const char *buf, int len)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356 const char *pos = buf;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 const char *needle;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358 char *tmp, *tmp2;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359 int i = 0;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361 while (len > 0 && (needle = g_strstr_len(pos, len, YCHT_SEP))) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 tmp = g_strndup(pos, needle - pos);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363 pkt->data = g_list_append(pkt->data, tmp);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364 len -= needle - pos + strlen(YCHT_SEP);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
365 pos = needle + strlen(YCHT_SEP);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
366 tmp2 = g_strescape(tmp, NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
367 gaim_debug_misc("yahoo", "Data[%d]:\t%s\n", i++, tmp2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
368 g_free(tmp2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
369 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
370
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
371 if (len) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
372 tmp = g_strndup(pos, len);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
373 pkt->data = g_list_append(pkt->data, tmp);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
374 tmp2 = g_strescape(tmp, NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375 gaim_debug_misc("yahoo", "Data[%d]:\t%s\n", i, tmp2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 g_free(tmp2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
377 };
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379 gaim_debug_misc("yahoo", "--==End of incoming YCHT packet==--\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
382 static void ycht_packet_process(YchtConn *ycht, YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 if (pkt->data && !strncmp(pkt->data->data, "*** Danger Will Robinson!!!", strlen("*** Danger Will Robinson!!!")))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
385 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
386
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387 switch (pkt->service) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
388 case YCHT_SERVICE_LOGIN:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 ycht_process_login(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
391 case YCHT_SERVICE_LOGOUT:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
392 ycht_process_logout(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
393 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394 case YCHT_SERVICE_CHATJOIN:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395 ycht_process_chatjoin(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
397 case YCHT_SERVICE_CHATPART:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398 ycht_process_chatpart(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 case YCHT_SERVICE_CHATMSG:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 case YCHT_SERVICE_CHATMSG_EMOTE:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402 ycht_progress_chatmsg(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
403 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
404 case YCHT_SERVICE_ONLINE_FRIENDS:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
405 ycht_progress_online_friends(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
406 break;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
407 default:
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
408 gaim_debug_warning("yahoo", "YCHT: warning, unhandled service 0x%02x\n", pkt->service);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
412 static void ycht_packet_free(YchtPkt *pkt)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
413 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
414 GList *l;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 g_return_if_fail(pkt != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
418 for (l = pkt->data; l; l = l->next)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
419 g_free(l->data);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
420 g_list_free(pkt->data);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
421 g_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
422 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
423
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
424 /************************************************************************************
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
425 * Functions dealing with connecting and disconnecting and reading data into YchtPkt
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
426 * structs, and all that stuff.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
427 ************************************************************************************/
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
428
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
429 void ycht_connection_close(YchtConn *ycht)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
430 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
431 struct yahoo_data *yd = ycht->gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
432
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
433 if (yd) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
434 yd->ycht = NULL;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
435 yd->chat_online = FALSE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
436 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
437
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
438 if (ycht->fd > 0)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
439 close(ycht->fd);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
440 if (ycht->inpa)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
441 gaim_input_remove(ycht->inpa);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
442
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
443 if (ycht->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
444 gaim_input_remove(ycht->tx_handler);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
445
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
446 gaim_circ_buffer_destroy(ycht->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
447
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
448 g_free(ycht->rxqueue);
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
449
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
450 g_free(ycht);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
451 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
452
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
453 static void ycht_connection_error(YchtConn *ycht, const gchar *error)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
454 {
9397
ba8c98dbdc00 [gaim-migrate @ 10209]
Tim Ringenbach <marv@pidgin.im>
parents: 9376
diff changeset
455
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
456 gaim_notify_info(ycht->gc, NULL, _("Connection problem with the YCHT server."), error);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
457 ycht_connection_close(ycht);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
458 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
459
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
460 static void ycht_pending(gpointer data, gint source, GaimInputCondition cond)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
461 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
462 YchtConn *ycht = data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
463 char buf[1024];
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
464 int len;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
465
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
466 len = read(ycht->fd, buf, sizeof(buf));
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
467
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
468 if (len < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
469 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
470
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
471 if (len <= 0) {
9397
ba8c98dbdc00 [gaim-migrate @ 10209]
Tim Ringenbach <marv@pidgin.im>
parents: 9376
diff changeset
472 ycht_connection_error(ycht, _("Unable to read"));
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
473 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
474 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
475
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
476 ycht->rxqueue = g_realloc(ycht->rxqueue, len + ycht->rxlen);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
477 memcpy(ycht->rxqueue + ycht->rxlen, buf, len);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
478 ycht->rxlen += len;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
479
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480 while (1) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 YchtPkt *pkt;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
482 int pos = 0;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
483 int pktlen;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
484 guint service;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485 guint version;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486 gint status;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
487
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488 if (ycht->rxlen < YCHT_HEADER_LEN)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
490
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10392
diff changeset
491 if (strncmp("YCHT", (char *)ycht->rxqueue, 4) != 0)
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
492 gaim_debug_error("yahoo", "YCHT: protocol error.\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
493
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494 pos += 4; /* YCHT */
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
495
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
496 version = yahoo_get32(ycht->rxqueue + pos); pos += 4;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
497 service = yahoo_get32(ycht->rxqueue + pos); pos += 4;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
498 status = yahoo_get16(ycht->rxqueue + pos); pos += 2;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
499 pktlen = yahoo_get16(ycht->rxqueue + pos); pos += 2;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 "ycht: %d bytes to read, rxlen is %d\n", pktlen, ycht->rxlen);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
502
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
503 if (ycht->rxlen < (YCHT_HEADER_LEN + pktlen))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
504 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
506 gaim_debug_misc("yahoo", "--==Incoming YCHT packet==--\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
507 gaim_debug(GAIM_DEBUG_MISC, "yahoo",
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508 "YCHT Service: 0x%02x Version: 0x%02x Status: 0x%02x\n",
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509 service, version, status);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
510 ycht_packet_dump(ycht->rxqueue, YCHT_HEADER_LEN + pktlen);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
511
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
512 pkt = ycht_packet_new(version, service, status);
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10392
diff changeset
513 ycht_packet_read(pkt, (char *)ycht->rxqueue + pos, pktlen);
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
514
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
515 ycht->rxlen -= YCHT_HEADER_LEN + pktlen;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
516 if (ycht->rxlen) {
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10392
diff changeset
517 guchar *tmp = g_memdup(ycht->rxqueue + YCHT_HEADER_LEN + pktlen, ycht->rxlen);
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
518 g_free(ycht->rxqueue);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
519 ycht->rxqueue = tmp;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520 } else {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521 g_free(ycht->rxqueue);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
522 ycht->rxqueue = NULL;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
523 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
524
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
525 ycht_packet_process(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
526
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
527 ycht_packet_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
528 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
529 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
530
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
531 static void ycht_got_connected(gpointer data, gint source, GaimInputCondition cond)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
532 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
533 YchtConn *ycht = data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
534 GaimConnection *gc = ycht->gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
535 struct yahoo_data *yd = gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
536 YchtPkt *pkt;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537 char *buf;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
538
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
539 if (source < 0) {
9397
ba8c98dbdc00 [gaim-migrate @ 10209]
Tim Ringenbach <marv@pidgin.im>
parents: 9376
diff changeset
540 ycht_connection_error(ycht, _("Unable to connect."));
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
541 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
542 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
543
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
544 ycht->fd = source;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
545
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
546 pkt = ycht_packet_new(YCHT_VERSION, YCHT_SERVICE_LOGIN, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
547
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
548 buf = g_strdup_printf("%s\001Y=%s; T=%s", gaim_connection_get_display_name(gc), yd->cookie_y, yd->cookie_t);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
549 ycht_packet_append(pkt, buf);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
550 g_free(buf);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
551
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
552 ycht_packet_send(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
553
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
554 ycht_packet_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
555
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
556 ycht->inpa = gaim_input_add(ycht->fd, GAIM_INPUT_READ, ycht_pending, ycht);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
557 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
558
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
559 void ycht_connection_open(GaimConnection *gc)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
560 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
561 YchtConn *ycht;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
562 struct yahoo_data *yd = gc->proto_data;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
563 GaimAccount *account = gaim_connection_get_account(gc);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
564
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
565 ycht = g_new0(YchtConn, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
566 ycht->gc = gc;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
567 ycht->fd = -1;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
568
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
569 yd->ycht = ycht;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
570
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
571 if (gaim_proxy_connect(account,
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
572 gaim_account_get_string(account, "ycht-server", YAHOO_YCHT_HOST),
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
573 gaim_account_get_int(account, "ycht-port", YAHOO_YCHT_PORT),
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
574 ycht_got_connected, ycht) != 0)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
575 {
9397
ba8c98dbdc00 [gaim-migrate @ 10209]
Tim Ringenbach <marv@pidgin.im>
parents: 9376
diff changeset
576 ycht_connection_error(ycht, _("Connection problem"));
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
577 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
578 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
579 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
580
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
581 /*******************************************************************************************
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
582 * These are functions called because the user did something.
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
583 *******************************************************************************************/
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
584
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
585 void ycht_chat_join(YchtConn *ycht, const char *room)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
586 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
587 YchtPkt *pkt;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
588 char *tmp;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
589
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
590 tmp = g_strdup(room);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 11644
diff changeset
591 g_free(ycht->room);
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
592 ycht->room = tmp;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
593
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
594 if (!ycht->logged_in)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
595 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
596
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
597 ycht->changing_rooms = TRUE;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
598 pkt = ycht_packet_new(YCHT_VERSION, YCHT_SERVICE_CHATJOIN, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
599 ycht_packet_append(pkt, ycht->room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
600 ycht_packet_send(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
601 ycht_packet_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
602 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
603
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
604 int ycht_chat_send(YchtConn *ycht, const char *room, const char *what)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
605 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
606 YchtPkt *pkt;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
607 char *msg1, *msg2, *buf;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
608
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
609 if (strcmp(room, ycht->room))
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
610 gaim_debug_warning("yahoo", "uhoh, sending to the wrong room!\n");
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
611
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
612 pkt = ycht_packet_new(YCHT_VERSION, YCHT_SERVICE_CHATMSG, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
613
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
614 msg1 = yahoo_html_to_codes(what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
615 msg2 = yahoo_string_encode(ycht->gc, msg1, NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
616 g_free(msg1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
617
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
618 buf = g_strdup_printf("%s\001%s", ycht->room, msg2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
619 ycht_packet_append(pkt, buf);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
620 g_free(msg2);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
621 g_free(buf);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
622
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
623 ycht_packet_send(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
624 ycht_packet_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
625 return 1;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
626 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
627
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
628 void ycht_chat_leave(YchtConn *ycht, const char *room, gboolean logout)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
629 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
630 if (logout)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
631 ycht_connection_close(ycht);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
632 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
633
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
634 void ycht_chat_send_invite(YchtConn *ycht, const char *room, const char *buddy, const char *msg)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
635 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
636 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
637
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
638 void ycht_chat_goto_user(YchtConn *ycht, const char *name)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
639 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
640 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
641
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
642 void ycht_chat_send_keepalive(YchtConn *ycht)
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
643 {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
644 YchtPkt *pkt;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
645
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
646 pkt = ycht_packet_new(YCHT_VERSION, YCHT_SERVICE_PING, 0);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
647 ycht_packet_send(ycht, pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
648 ycht_packet_free(pkt);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
649 }

mercurial