comparison plugins/raw.c @ 2495:b46e8a80da4f

[gaim-migrate @ 2508] i don't know why i added irc. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 12 Oct 2001 22:51:10 +0000
parents
children 2c39e70dd07c
comparison
equal deleted inserted replaced
2494:2c1950c5544a 2495:b46e8a80da4f
1 #define GAIM_PLUGINS
2 #include "gaim.h"
3 #include "prpl.h"
4 #ifdef MAX
5 #undef MAX
6 #undef MIN
7 #endif
8 #include "jabber/jabber.h"
9
10 static GtkWidget *window = NULL;
11 static GtkWidget *optmenu = NULL;
12 static struct gaim_connection *gc = NULL;
13 static GModule *me = NULL;
14
15 /* this is an evil hack.
16 * gc->proto_data for Jabber connections can be cast to a jconn *.
17 * gc->proto_data for MSN, TOC, and IRC connections can be cast to an int *.
18 */
19
20 char *name()
21 {
22 return "Raw";
23 }
24
25 char *description()
26 {
27 return "Lets you send raw XML to Jabber, or raw commands to MSN, IRC, and TOC."
28 " Not very useful except for debugging. Hit 'enter' in the entry to send."
29 " Watch the debug window.";
30 }
31
32 static int goodbye()
33 {
34 gaim_plugin_unload(me);
35 return FALSE;
36 }
37
38 static void send_it(GtkEntry *entry)
39 {
40 char *txt;
41 if (!gc) return;
42 txt = gtk_entry_get_text(entry);
43 switch (gc->protocol) {
44 case PROTO_TOC:
45 {
46 int *a = (int *)gc->proto_data;
47 unsigned short seqno = htons(a[1]++ & 0xffff);
48 unsigned short len = htons(strlen(txt) + 1);
49 write(*a, "*\002", 2);
50 write(*a, &seqno, 2);
51 write(*a, &len, 2);
52 write(*a, txt, ntohs(len));
53 debug_printf("TOC C: %s\n", txt);
54 }
55 break;
56 case PROTO_MSN:
57 write(*(int *)gc->proto_data, txt, strlen(txt));
58 write(*(int *)gc->proto_data, "\r\n", 2);
59 debug_printf("MSN C: %s\n", txt);
60 break;
61 case PROTO_IRC:
62 write(*(int *)gc->proto_data, txt, strlen(txt));
63 write(*(int *)gc->proto_data, "\r\n", 2);
64 debug_printf("IRC C: %s\n", txt);
65 break;
66 case PROTO_JABBER:
67 jab_send_raw(*(jconn *)gc->proto_data, txt);
68 break;
69 }
70 gtk_entry_set_text(entry, "");
71 }
72
73 static void set_gc(gpointer d, struct gaim_connection *c)
74 {
75 gc = c;
76 }
77
78 static void redo_optmenu(struct gaim_connection *arg, gpointer x)
79 {
80 GtkWidget *menu;
81 GSList *g = connections;
82 struct gaim_connection *c;
83
84 menu = gtk_menu_new();
85 gc = NULL;
86
87 while (g) {
88 char buf[256];
89 GtkWidget *opt;
90 c = (struct gaim_connection *)g->data;
91 g = g->next;
92 if (x && c == arg)
93 continue;
94 if (c->protocol != PROTO_TOC && c->protocol != PROTO_MSN &&
95 c->protocol != PROTO_IRC && c->protocol != PROTO_JABBER)
96 continue;
97 if (!gc)
98 gc = c;
99 g_snprintf(buf, sizeof buf, "%s (%s)", c->username, (*c->prpl->name)());
100 opt = gtk_menu_item_new_with_label(buf);
101 gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_gc), c);
102 gtk_widget_show(opt);
103 gtk_menu_append(GTK_MENU(menu), opt);
104 }
105
106 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
107 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
108 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0);
109 }
110
111 char *gaim_plugin_init(GModule *h)
112 {
113 GtkWidget *hbox;
114 GtkWidget *entry;
115
116 me = h;
117
118 gaim_signal_connect(h, event_signon, redo_optmenu, NULL);
119 gaim_signal_connect(h, event_signoff, redo_optmenu, me);
120
121 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
122 gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(goodbye), NULL);
123
124 hbox = gtk_hbox_new(FALSE, 0);
125 gtk_container_add(GTK_CONTAINER(window), hbox);
126
127 optmenu = gtk_option_menu_new();
128 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5);
129
130 redo_optmenu(NULL, NULL);
131
132 entry = gtk_entry_new();
133 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 5);
134 gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(send_it), NULL);
135
136 gtk_widget_show_all(window);
137
138 return NULL;
139 }
140
141 void gaim_plugin_remove()
142 {
143 if (window)
144 gtk_widget_destroy(window);
145 window = NULL;
146 me = NULL;
147 }