annotate src/core.c @ 3551:cd938f18f3f8

[gaim-migrate @ 3626] In the interest of continued progress, I pulled what's usable out of my development tree and am committing it. Here, we have gotten rid of the plugins dialog and perl menu under Tools and put them both in preferences. Perl scripts now work like plugins--you have to load them explicitly (it will probe $prefix/lib/gaim and $HOME/.gaim for them) and you can unload them (although right now, this is entirely unreliable) Oh, and I broke all your perl scripts. Sorry about that. Don't try fixing them yet, though--I'm gonna make unloading single scripts more reliable tommorow. I should also finish Phase Two tommorow as well. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Thu, 26 Sep 2002 07:37:52 +0000
parents 6c32036050cf
children 9682c0e022c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * gaim
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 *
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * (at your option) any later version.
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 *
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * GNU General Public License for more details.
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 *
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 *
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 */
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22 #ifdef HAVE_CONFIG_H
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
23 #include "config.h"
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 #endif
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26 #include <glib.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27 #include <stdio.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
28 #include <stdlib.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
29 #include <sys/types.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
30 #include <sys/socket.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 #include <sys/stat.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #include <sys/un.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33 #include <unistd.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 #include <errno.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #include <signal.h>
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #include <getopt.h>
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
37 #include <stdarg.h>
2596
35c23df11d16 [gaim-migrate @ 2609]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2544
diff changeset
38 #include <string.h>
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
40 #include "gaim.h"
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
41 #include "gaim-socket.h"
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
42
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
43 static gint UI_fd = -1;
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
44 int gaim_session = 0;
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
45 GSList *uis = NULL;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
46
2544
271011bbe14e [gaim-migrate @ 2557]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2541
diff changeset
47 static guchar *UI_build(guint32 *len, guchar type, guchar subtype, va_list args)
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
48 {
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
49 guchar *buffer;
2462
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
50 guint32 pos;
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
51 int size;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
52 void *data;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
53
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
54 *len = sizeof(guchar) * 2 + 4;
2462
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
55 buffer = g_malloc(*len);
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
56 pos = 0;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
57
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
58 memcpy(buffer + pos, &type, sizeof(type)); pos += sizeof(type);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
59 memcpy(buffer + pos, &subtype, sizeof(subtype)); pos += sizeof(subtype);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
60
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
61 /* we come back and do size last */
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
62 pos += 4;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
63
2544
271011bbe14e [gaim-migrate @ 2557]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2541
diff changeset
64 size = va_arg(args, int);
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
65 while (size != -1) {
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
66 *len += size;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
67 buffer = g_realloc(buffer, *len);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
68
2544
271011bbe14e [gaim-migrate @ 2557]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2541
diff changeset
69 data = va_arg(args, void *);
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
70 memcpy(buffer + pos, data, size);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
71 pos += size;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
72
2544
271011bbe14e [gaim-migrate @ 2557]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2541
diff changeset
73 size = va_arg(args, int);
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
74 }
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
75
2482
7e4757801725 [gaim-migrate @ 2495]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2462
diff changeset
76 pos -= sizeof(guchar) * 2 + 4;
7e4757801725 [gaim-migrate @ 2495]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2462
diff changeset
77
2462
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
78 /* now we do size */
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
79 memcpy(buffer + sizeof(guchar) * 2, &pos, 4);
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
80
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
81 return buffer;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
82 }
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
83
2435
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
84 gint UI_write(struct UI *ui, guchar *data, gint len)
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
85 {
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
86 gint sent;
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
87 /* we'll let the write silently fail because the read will pick it up as dead */
2482
7e4757801725 [gaim-migrate @ 2495]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2462
diff changeset
88 g_io_channel_write(ui->channel, data, len, &sent);
2435
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
89 return sent;
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
90 }
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
91
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
92 void UI_build_write(struct UI *ui, guchar type, guchar subtype, ...)
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
93 {
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
94 va_list ap;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
95 gchar *data;
2462
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
96 guint32 len;
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
97
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
98 va_start(ap, subtype);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
99 data = UI_build(&len, type, subtype, ap);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
100 va_end(ap);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
101
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
102 UI_write(ui, data, len);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
103
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
104 g_free(data);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
105 }
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
106
2435
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
107 void UI_broadcast(guchar *data, gint len)
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
108 {
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
109 GSList *u = uis;
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
110 while (u) {
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
111 struct UI *ui = u->data;
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
112 UI_write(ui, data, len);
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
113 u = u->next;
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
114 }
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
115 }
b4f2a53c0ee5 [gaim-migrate @ 2448]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2430
diff changeset
116
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
117 void UI_build_broadcast(guchar type, guchar subtype, ...)
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
118 {
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
119 va_list ap;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
120 gchar *data;
2462
cf2f2450f7cc [gaim-migrate @ 2475]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2447
diff changeset
121 guint32 len;
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
122
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
123 if (!uis)
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
124 return;
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
125
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
126 va_start(ap, subtype);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
127 data = UI_build(&len, type, subtype, ap);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
128 va_end(ap);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
129
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
130 UI_broadcast(data, len);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
131
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
132 g_free(data);
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
133 }
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
134
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
135 static void meta_handler(struct UI *ui, guchar subtype, guchar *data)
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
136 {
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
137 struct gaim_cui_packet *p;
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
138 switch (subtype) {
2440
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
139 case CUI_META_LIST:
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
140 break;
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
141 case CUI_META_QUIT:
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
142 while (uis) {
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
143 ui = uis->data;
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
144 uis = g_slist_remove(uis, ui);
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
145 g_io_channel_close(ui->channel);
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
146 g_source_remove(ui->inpa);
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
147 g_free(ui);
2440
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
148 }
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
149 do_quit();
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
150 break;
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
151 case CUI_META_DETACH:
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
152 uis = g_slist_remove(uis, ui);
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
153 g_io_channel_close(ui->channel);
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
154 g_source_remove(ui->inpa);
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
155 g_free(ui);
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
156 break;
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
157 case CUI_META_PING:
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
158 p = cui_packet_new(CUI_TYPE_META, CUI_META_ACK);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
159 cui_send_packet(g_io_channel_unix_get_fd(ui->channel), p);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
160 cui_packet_free(p);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
161 break;
2440
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
162 default:
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
163 debug_printf("unhandled meta subtype %d\n", subtype);
8306c042bac7 [gaim-migrate @ 2453]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2439
diff changeset
164 break;
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
165 }
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
166 }
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
167
2443
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
168 static void plugin_handler(struct UI *ui, guchar subtype, guchar *data)
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
169 {
2446
f9cad82d321b [gaim-migrate @ 2459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2443
diff changeset
170 #ifdef GAIM_PLUGINS
2443
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
171 guint id;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
172 struct gaim_plugin *p;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
173
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
174 switch (subtype) {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
175 /*
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
176 case CUI_PLUGIN_LIST:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
177 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
178 */
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
179 case CUI_PLUGIN_LOAD:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
180 p = load_plugin(data);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
181 /* XXX need to broadcast to UIs that plugin has been loaded */
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
182 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
183 case CUI_PLUGIN_UNLOAD:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
184 memcpy(&id, data, sizeof(id));
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
185 p = g_list_nth_data(plugins, id);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
186 if (p) {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
187 unload_plugin(p);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
188 /* XXX need to broadcast to UIs that plugin has been unloaded */
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
189 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
190 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
191 case CUI_PLUGIN_RELOAD:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
192 memcpy(&id, data, sizeof(id));
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
193 p = g_list_nth_data(plugins, id);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
194 if (p) {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
195 p = reload_plugin(p);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
196 /* XXX need to broadcast to UIs that plugin has been reloaded */
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
197 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
198 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
199 default:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
200 debug_printf("unhandled plugin subtype %d\n", subtype);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
201 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
202 }
2446
f9cad82d321b [gaim-migrate @ 2459]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2443
diff changeset
203 #endif
2443
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
204 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
205
2441
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
206 static void user_handler(struct UI *ui, guchar subtype, guchar *data)
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
207 {
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
208 guint id;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
209 struct aim_user *u;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
210
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
211 switch (subtype) {
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
212 /*
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
213 case CUI_USER_LIST:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
214 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
215 case CUI_USER_ADD:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
216 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
217 case CUI_USER_REMOVE:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
218 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
219 case CUI_USER_MODIFY:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
220 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
221 */
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
222 case CUI_USER_SIGNON:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
223 if (!data)
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
224 return;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
225 memcpy(&id, data, sizeof(id));
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
226 u = g_slist_nth_data(aim_users, id);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
227 if (u)
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
228 serv_login(u);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
229 /* don't need to do anything here because the UI will get updates from other handlers */
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
230 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
231 default:
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
232 debug_printf("unhandled user subtype %d\n", subtype);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
233 break;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
234 }
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
235 }
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
236
2443
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
237 static void message_handler(struct UI *ui, guchar subtype, guchar *data)
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
238 {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
239 switch (subtype) {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
240 case CUI_MESSAGE_LIST:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
241 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
242 case CUI_MESSAGE_SEND:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
243 if (!data)
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
244 return;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
245 {
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
246 guint id;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
247 struct gaim_connection *gc;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
248 guint len;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
249 char *who, *msg;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
250 gint flags;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
251 int pos = 0;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
252
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
253 memcpy(&id, data + pos, sizeof(id));
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
254 pos += sizeof(id);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
255 gc = g_slist_nth_data(connections, id);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
256 if (!gc)
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
257 return;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
258
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
259 memcpy(&len, data + pos, sizeof(len));
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
260 pos += sizeof(len);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
261 who = g_strndup(data + pos, len + 1);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
262 pos += len;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
263
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
264 memcpy(&len, data + pos, sizeof(len));
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
265 pos += sizeof(len);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
266 msg = g_strndup(data + pos, len + 1);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
267 pos += len;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
268
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
269 memcpy(&flags, data + pos, sizeof(flags));
3033
1143524a2eaf [gaim-migrate @ 3046]
Sean Egan <seanegan@gmail.com>
parents: 2755
diff changeset
270 serv_send_im(gc, who, msg, -1, flags);
2443
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
271
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
272 g_free(who);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
273 g_free(msg);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
274 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
275 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
276 case CUI_MESSAGE_RECV:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
277 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
278 default:
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
279 debug_printf("unhandled message subtype %d\n", subtype);
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
280 break;
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
281 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
282 }
7f2432a87376 [gaim-migrate @ 2456]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2441
diff changeset
283
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2503
diff changeset
284 static gint gaim_recv(GIOChannel *source, guchar *buf, gint len)
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
285 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
286 gint total = 0;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287 gint cur;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
288
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
289 while (total < len) {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
290 if (g_io_channel_read(source, buf + total, len - total, &cur) != G_IO_ERROR_NONE)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
291 return -1;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
292 if (cur == 0)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
293 return total;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
294 total += cur;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
295 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
296
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
297 return total;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
298 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
299
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
300 static void remote_handler(struct UI *ui, guchar subtype, guchar *data, int len)
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
301 {
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
302 const char *resp;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
303 char *send;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
304 switch (subtype) {
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
305 case CUI_REMOTE_CONNECTIONS:
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
306 break;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
307 case CUI_REMOTE_URI:
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
308 send = g_malloc(len + 1);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
309 memcpy(send, data, len);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
310 send[len] = 0;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
311 resp = handle_uri(send);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
312 g_free(send);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
313 /* report error */
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
314 break;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
315 default:
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
316 debug_printf("Unhandled remote subtype %d\n", subtype);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
317 break;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
318 }
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
319 }
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
320
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
321 static gboolean UI_readable(GIOChannel *source, GIOCondition cond, gpointer data)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
322 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
323 struct UI *ui = data;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
324
2438
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
325 guchar type;
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
326 guchar subtype;
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
327 guint32 len;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
328
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
329 guchar *in;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
330
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
331 /* no byte order worries! this'll change if we go to TCP */
2438
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
332 if (gaim_recv(source, &type, sizeof(type)) != sizeof(type)) {
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
333 debug_printf("UI has abandoned us!\n");
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
334 uis = g_slist_remove(uis, ui);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
335 g_io_channel_close(ui->channel);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
336 g_source_remove(ui->inpa);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
337 g_free(ui);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
338 return FALSE;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
339 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
340
2438
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
341 if (gaim_recv(source, &subtype, sizeof(subtype)) != sizeof(subtype)) {
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
342 debug_printf("UI has abandoned us!\n");
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
343 uis = g_slist_remove(uis, ui);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
344 g_io_channel_close(ui->channel);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
345 g_source_remove(ui->inpa);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
346 g_free(ui);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
347 return FALSE;
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
348 }
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
349
2541
8229710b343b [gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2503
diff changeset
350 if (gaim_recv(source, (guchar *)&len, sizeof(len)) != sizeof(len)) {
2438
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
351 debug_printf("UI has abandoned us!\n");
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
352 uis = g_slist_remove(uis, ui);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
353 g_io_channel_close(ui->channel);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
354 g_source_remove(ui->inpa);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
355 g_free(ui);
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
356 return FALSE;
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
357 }
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
358
2441
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
359 if (len) {
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
360 in = g_new0(guchar, len);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
361 if (gaim_recv(source, in, len) != len) {
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
362 debug_printf("UI has abandoned us!\n");
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
363 uis = g_slist_remove(uis, ui);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
364 g_io_channel_close(ui->channel);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
365 g_source_remove(ui->inpa);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
366 g_free(ui);
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
367 return FALSE;
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
368 }
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
369 } else
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
370 in = NULL;
2438
5cbe86a444d9 [gaim-migrate @ 2451]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2435
diff changeset
371
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
372 switch (type) {
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
373 case CUI_TYPE_META:
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
374 meta_handler(ui, subtype, in);
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
375 break;
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
376 case CUI_TYPE_PLUGIN:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
377 plugin_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
378 break;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
379 case CUI_TYPE_USER:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
380 user_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
381 break;
2441
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
382 /*
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
383 case CUI_TYPE_CONN:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
384 conn_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
385 break;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
386 case CUI_TYPE_BUDDY:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
387 buddy_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
388 break;
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
389 */
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
390 case CUI_TYPE_MESSAGE:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
391 message_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
392 break;
2447
6bdeb91abe4e [gaim-migrate @ 2460]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2446
diff changeset
393 /*
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
394 case CUI_TYPE_CHAT:
2439
932adc1ac9ed [gaim-migrate @ 2452]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2438
diff changeset
395 chat_handler(ui, subtype, in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
396 break;
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
397 */
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
398 case CUI_TYPE_REMOTE:
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
399 remote_handler(ui, subtype, in, len);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
400 break;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
401 default:
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
402 debug_printf("unhandled type %d\n", type);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
403 break;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
404 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
405
2441
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
406 if (in)
2c2c1f717616 [gaim-migrate @ 2454]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2440
diff changeset
407 g_free(in);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
408 return TRUE;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
409 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
410
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
411 static gboolean socket_readable(GIOChannel *source, GIOCondition cond, gpointer data)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
412 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
413 struct sockaddr_un saddr;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
414 gint len;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
415 gint fd;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
417 struct UI *ui;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
418
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
419 if ((fd = accept(UI_fd, (struct sockaddr *)&saddr, &len)) == -1)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
420 return FALSE;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
421
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
422 ui = g_new0(struct UI, 1);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
423 uis = g_slist_append(uis, ui);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
424
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
425 ui->channel = g_io_channel_unix_new(fd);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
426 ui->inpa = g_io_add_watch(ui->channel, G_IO_IN | G_IO_HUP | G_IO_ERR, UI_readable, ui);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
427 g_io_channel_unref(ui->channel);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
429 debug_printf("got one\n");
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
430 return TRUE;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
431 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
432
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
433 static gint open_socket()
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
434 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
435 struct sockaddr_un saddr;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
436 gint fd;
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
437
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
438 while (gaim_session_exists(gaim_session))
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
439 gaim_session++;
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
440
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
441 debug_printf("session: %d\n", gaim_session);
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
442
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
443 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) != -1) {
2503
b4ac3b5f484b [gaim-migrate @ 2516]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2482
diff changeset
444 mode_t m = umask(0177);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
445 saddr.sun_family = AF_UNIX;
3533
6c32036050cf [gaim-migrate @ 3607]
Sean Egan <seanegan@gmail.com>
parents: 3478
diff changeset
446 g_snprintf(saddr.sun_path, sizeof(saddr.sun_path), "%s/gaim_%s.%d",
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
447 g_get_tmp_dir(), g_get_user_name(), gaim_session);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
448 if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) != -1)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
449 listen(fd, 100);
3091
1e12a24b7f27 [gaim-migrate @ 3105]
Sean Egan <seanegan@gmail.com>
parents: 3033
diff changeset
450 else {
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
451 g_log(NULL, G_LOG_LEVEL_CRITICAL,
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
452 "Failed to assign %s to a socket (Error: %s)",
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
453 saddr.sun_path, strerror(errno));
3091
1e12a24b7f27 [gaim-migrate @ 3105]
Sean Egan <seanegan@gmail.com>
parents: 3033
diff changeset
454 return -1;
1e12a24b7f27 [gaim-migrate @ 3105]
Sean Egan <seanegan@gmail.com>
parents: 3033
diff changeset
455 }
2503
b4ac3b5f484b [gaim-migrate @ 2516]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2482
diff changeset
456 umask(m);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
457 } else
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
458 g_log(NULL, G_LOG_LEVEL_CRITICAL, "Unable to open socket: %s", strerror(errno));
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
459 return fd;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
460 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
461
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
462 int core_main()
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
463 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
464 /*
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
465 GMainLoop *loop;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
466 */
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
467
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
468 GIOChannel *channel;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
469
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
470 UI_fd = open_socket();
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
471 if (UI_fd < 0)
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
472 return 1;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
473
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
474 channel = g_io_channel_unix_new(UI_fd);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
475 g_io_add_watch(channel, G_IO_IN, socket_readable, NULL);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
476 g_io_channel_unref(channel);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
477
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
478 /*
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
479 loop = g_main_new(TRUE);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
480 g_main_run(loop);
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
481 */
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
482
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
483 return 0;
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
484 }
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
485
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
486 void core_quit()
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
487 {
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
488 char buf[1024];
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
489 close(UI_fd);
3478
3da42b64304e [gaim-migrate @ 3532]
Sean Egan <seanegan@gmail.com>
parents: 3091
diff changeset
490 sprintf(buf, "%s/gaim_%s.%d", g_get_tmp_dir(), g_get_user_name(), gaim_session);
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
491 unlink(buf);
2755
adbda5d9b50c [gaim-migrate @ 2768]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2596
diff changeset
492 debug_printf("Removed core\n");
2416
61b816a7b467 [gaim-migrate @ 2429]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
493 }