comparison src/core.c @ 2447:6bdeb91abe4e

[gaim-migrate @ 2460] i hope this works committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 08 Oct 2001 01:12:02 +0000
parents f9cad82d321b
children cf2f2450f7cc
comparison
equal deleted inserted replaced
2446:f9cad82d321b 2447:6bdeb91abe4e
32 #include <sys/un.h> 32 #include <sys/un.h>
33 #include <unistd.h> 33 #include <unistd.h>
34 #include <errno.h> 34 #include <errno.h>
35 #include <signal.h> 35 #include <signal.h>
36 #include <getopt.h> 36 #include <getopt.h>
37 #include <stdarg.h>
37 38
38 #include "gaim.h" 39 #include "gaim.h"
39 40
40 static gint UI_fd = -1; 41 static gint UI_fd = -1;
41 GSList *uis = NULL; 42 GSList *uis = NULL;
43
44 static guchar *UI_build(int *len, guchar type, guchar subtype, va_list args1)
45 {
46 va_list args2;
47 guchar *buffer;
48 int pos;
49 int size;
50 void *data;
51
52 G_VA_COPY(args2, args1);
53
54 buffer = g_malloc(sizeof(guchar) * 2 + 4);
55 *len = sizeof(guchar) * 2 + 4;
56 pos = 0;
57
58 memcpy(buffer + pos, &type, sizeof(type)); pos += sizeof(type);
59 memcpy(buffer + pos, &subtype, sizeof(subtype)); pos += sizeof(subtype);
60
61 /* we come back and do size last */
62 pos += 4;
63
64 size = va_arg(args2, int);
65 while (size != -1) {
66 *len += size;
67 buffer = g_realloc(buffer, *len);
68
69 data = va_arg(args2, void *);
70 memcpy(buffer + pos, data, size);
71 pos += size;
72
73 size = va_arg(args2, int);
74 }
75
76 va_end(args2);
77
78 return buffer;
79 }
42 80
43 gint UI_write(struct UI *ui, guchar *data, gint len) 81 gint UI_write(struct UI *ui, guchar *data, gint len)
44 { 82 {
45 guchar *send = g_new0(guchar, len + 6); 83 guchar *send = g_new0(guchar, len + 6);
46 gint sent; 84 gint sent;
51 /* we'll let the write silently fail because the read will pick it up as dead */ 89 /* we'll let the write silently fail because the read will pick it up as dead */
52 g_io_channel_write(ui->channel, send, len + 6, &sent); 90 g_io_channel_write(ui->channel, send, len + 6, &sent);
53 return sent; 91 return sent;
54 } 92 }
55 93
94 void UI_build_write(struct UI *ui, guchar type, guchar subtype, ...)
95 {
96 va_list ap;
97 gchar *data;
98 int len;
99
100 va_start(ap, subtype);
101 data = UI_build(&len, type, subtype, ap);
102 va_end(ap);
103
104 UI_write(ui, data, len);
105
106 g_free(data);
107 }
108
56 void UI_broadcast(guchar *data, gint len) 109 void UI_broadcast(guchar *data, gint len)
57 { 110 {
58 GSList *u = uis; 111 GSList *u = uis;
59 while (u) { 112 while (u) {
60 struct UI *ui = u->data; 113 struct UI *ui = u->data;
61 UI_write(ui, data, len); 114 UI_write(ui, data, len);
62 u = u->next; 115 u = u->next;
63 } 116 }
117 }
118
119 void UI_build_broadcast(guchar type, guchar subtype, ...)
120 {
121 va_list ap;
122 gchar *data;
123 int len;
124
125 if (!uis)
126 return;
127
128 va_start(ap, subtype);
129 data = UI_build(&len, type, subtype, ap);
130 va_end(ap);
131
132 UI_broadcast(data, len);
133
134 g_free(data);
64 } 135 }
65 136
66 static void meta_handler(struct UI *ui, guchar subtype, guchar *data) 137 static void meta_handler(struct UI *ui, guchar subtype, guchar *data)
67 { 138 {
68 switch (subtype) { 139 switch (subtype) {
288 conn_handler(ui, subtype, in); 359 conn_handler(ui, subtype, in);
289 break; 360 break;
290 case CUI_TYPE_BUDDY: 361 case CUI_TYPE_BUDDY:
291 buddy_handler(ui, subtype, in); 362 buddy_handler(ui, subtype, in);
292 break; 363 break;
364 */
293 case CUI_TYPE_MESSAGE: 365 case CUI_TYPE_MESSAGE:
294 message_handler(ui, subtype, in); 366 message_handler(ui, subtype, in);
295 break; 367 break;
368 /*
296 case CUI_TYPE_CHAT: 369 case CUI_TYPE_CHAT:
297 chat_handler(ui, subtype, in); 370 chat_handler(ui, subtype, in);
298 break; 371 break;
299 */ 372 */
300 default: 373 default: