Mercurial > pidgin
annotate plugins/gaim-remote/remote.c @ 9709:4d05b6e9e9cd
[gaim-migrate @ 10570]
This patch is freaking massive.
Renamed ui.h to gtkdialogs.h
Renamed dialogs.c to gtkdialogs.c
sed'ed the hell out of the .po files
These files are similar to gtkutil.c/.h. They are meant to contain
dialogs such as the "New Instant Message" window, which does not
belong in gtkblist.c or gtkconv.c, and is called from both places.
Eventually the functions in gtkdialogs.c/.h should be changed to
conform to Gaim's naming convention.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 08 Aug 2004 00:48:19 +0000 |
parents | 204f5d66a863 |
children | c9ac1976ef01 |
rev | line source |
---|---|
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6179
diff
changeset
|
1 /** |
5859 | 2 * Remote control plugin for Gaim |
3 * | |
4 * Copyright (C) 2003 Christian Hammond. | |
5 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
6 * | |
7 * This program is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU General Public License as | |
9 * published by the Free Software Foundation; either version 2 of the | |
10 * License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
20 * 02111-1307, USA. | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
21 * |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
22 * @todo Make this a core plugin! |
5859 | 23 */ |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
24 #include "internal.h" |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6179
diff
changeset
|
25 #include "gtkinternal.h" |
5859 | 26 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
27 #ifndef _WIN32 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
28 # include <sys/un.h> |
5859 | 29 #endif |
30 | |
31 #include <signal.h> | |
32 #include <getopt.h> | |
33 | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
34 #include "conversation.h" |
6179
16e384bb7fbf
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6177
diff
changeset
|
35 #include "core.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
36 #include "debug.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
37 #include "prpl.h" |
8704 | 38 #include "notify.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
39 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
40 /* XXX */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
41 #include "gtkconv.h" |
9709 | 42 #include "gtkdialogs.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
43 #include "gtkplugin.h" |
5859 | 44 #include "gaim.h" |
9608 | 45 #include "prefs.h" |
5859 | 46 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
47 #include <gaim-remote/remote.h> |
5859 | 48 |
5873
a18e88c4dace
[gaim-migrate @ 6305]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
49 #define REMOTE_PLUGIN_ID "gtk-remote" |
5859 | 50 |
51 struct UI { | |
52 GIOChannel *channel; | |
53 guint inpa; | |
54 }; | |
55 | |
56 #ifndef _WIN32 | |
57 static gint UI_fd = -1; | |
6107 | 58 static guint watcher = 0; |
5859 | 59 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
60 static int gaim_session = 0; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
61 static GSList *uis = NULL; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
62 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
63 /* AIM URI's ARE FUN :-D */ |
5884
d188b000e892
[gaim-migrate @ 6316]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
64 static const char * |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
65 gaim_remote_handle_uri(const char *uri) |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
66 { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
67 const char *username; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
68 GString *str; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
69 GList *conn; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
70 GaimConnection *gc = NULL; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
71 GaimAccount *account; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
72 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
73 gaim_debug(GAIM_DEBUG_INFO, "gaim_remote_handle_uri", "Handling URI: %s\n", uri); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
74 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
75 /* Well, we'd better check to make sure we have at least one |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
76 AIM account connected. */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
77 for (conn = gaim_connections_get_all(); conn != NULL; conn = conn->next) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
78 gc = conn->data; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
79 account = gaim_connection_get_account(gc); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
80 username = gaim_account_get_username(account); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
81 |
9460 | 82 if (strcmp(gaim_account_get_protocol_id(account), "prpl-oscar") == 0 && |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
83 username != NULL && isalpha(*username)) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
84 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
85 break; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
86 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
87 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
88 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
89 if (gc == NULL) |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
90 return _("Not connected to AIM"); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
91 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
92 /* aim:goim?screenname=screenname&message=message */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
93 if (!g_ascii_strncasecmp(uri, "aim:goim?", strlen("aim:goim?"))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
94 char *who, *what; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
95 GaimConversation *c; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
96 uri = uri + strlen("aim:goim?"); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
97 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
98 if (!(who = strstr(uri, "screenname="))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
99 return _("No screenname given."); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
100 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
101 /* spaces are encoded as +'s */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
102 who = who + strlen("screenname="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
103 str = g_string_new(NULL); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
104 while (*who && (*who != '&')) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
105 g_string_append_c(str, *who == '+' ? ' ' : *who); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
106 who++; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
107 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
108 who = g_strdup(str->str); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
109 g_string_free(str, TRUE); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
110 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
111 what = strstr(uri, "message="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
112 if (what) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
113 what = what + strlen("message="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
114 str = g_string_new(NULL); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
115 while (*what && (*what != '&' || !g_ascii_strncasecmp(what, "&", 5))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
116 g_string_append_c(str, *what == '+' ? ' ' : *what); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
117 what++; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
118 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
119 what = g_strdup(str->str); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
120 g_string_free(str, TRUE); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
121 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
122 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
123 c = gaim_conversation_new(GAIM_CONV_IM, gc->account, who); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
124 g_free(who); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
125 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
126 if (what) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
127 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(c); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
128 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
129 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, what, -1); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
130 g_free(what); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
131 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
132 } else if (!g_ascii_strncasecmp(uri, "aim:addbuddy?", strlen("aim:addbuddy?"))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
133 char *who, *group; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
134 uri = uri + strlen("aim:addbuddy?"); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
135 /* spaces are encoded as +'s */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
136 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
137 if (!(who = strstr(uri, "screenname="))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
138 return _("No screenname given."); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
139 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
140 who = who + strlen("screenname="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
141 str = g_string_new(NULL); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
142 while (*who && (*who != '&')) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
143 g_string_append_c(str, *who == '+' ? ' ' : *who); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
144 who++; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
145 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
146 who = g_strdup(str->str); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
147 g_string_free(str, TRUE); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
148 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
149 group = strstr(uri, "group="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
150 if (group) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
151 group = group + strlen("group="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
152 str = g_string_new(NULL); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
153 while (*group && (*group != '&' || !g_ascii_strncasecmp(group, "&", 5))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
154 g_string_append_c(str, *group == '+' ? ' ' : *group); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
155 group++; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
156 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
157 group = g_strdup(str->str); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
158 g_string_free(str, TRUE); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
159 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
160 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
161 gaim_debug(GAIM_DEBUG_MISC, "gaim_remote_handle_uri", "who: %s\n", who); |
7100
abdc55ffadba
[gaim-migrate @ 7665]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
162 gaim_blist_request_add_buddy(gc->account, who, group, NULL); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
163 g_free(who); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
164 if (group) |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
165 g_free(group); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
166 } else if (!g_ascii_strncasecmp(uri, "aim:gochat?", strlen("aim:gochat?"))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
167 char *room; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
168 GHashTable *components; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
169 int exch = 5; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
170 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
171 uri = uri + strlen("aim:gochat?"); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
172 /* spaces are encoded as +'s */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
173 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
174 if (!(room = strstr(uri, "roomname="))) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
175 return _("No roomname given."); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
176 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
177 room = room + strlen("roomname="); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
178 str = g_string_new(NULL); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
179 while (*room && (*room != '&')) { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
180 g_string_append_c(str, *room == '+' ? ' ' : *room); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
181 room++; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
182 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
183 room = g_strdup(str->str); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
184 g_string_free(str, TRUE); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
185 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
186 g_free); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
187 g_hash_table_replace(components, g_strdup("room"), room); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
188 g_hash_table_replace(components, g_strdup("exchange"), |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
189 g_strdup_printf("%d", exch)); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
190 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
191 serv_join_chat(gc, components); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
192 g_hash_table_destroy(components); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
193 } else { |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
194 return _("Invalid AIM URI"); |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
195 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
196 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
197 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
198 return NULL; |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
199 } |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
200 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
201 |
5859 | 202 |
203 #if 0 | |
204 static guchar * | |
205 UI_build(guint32 *len, guchar type, guchar subtype, va_list args) | |
206 { | |
207 guchar *buffer; | |
208 guint32 pos; | |
209 int size; | |
210 void *data; | |
211 | |
212 *len = sizeof(guchar) * 2 + 4; | |
213 buffer = g_malloc(*len); | |
214 pos = 0; | |
215 | |
216 memcpy(buffer + pos, &type, sizeof(type)); pos += sizeof(type); | |
217 memcpy(buffer + pos, &subtype, sizeof(subtype)); pos += sizeof(subtype); | |
218 | |
219 /* we come back and do size last */ | |
220 pos += 4; | |
221 | |
222 size = va_arg(args, int); | |
223 while (size != -1) { | |
224 *len += size; | |
225 buffer = g_realloc(buffer, *len); | |
226 | |
227 data = va_arg(args, void *); | |
228 memcpy(buffer + pos, data, size); | |
229 pos += size; | |
230 | |
231 size = va_arg(args, int); | |
232 } | |
233 | |
234 pos -= sizeof(guchar) * 2 + 4; | |
235 | |
236 /* now we do size */ | |
237 memcpy(buffer + sizeof(guchar) * 2, &pos, 4); | |
238 | |
239 return buffer; | |
240 } | |
241 | |
242 static gint | |
243 UI_write(struct UI *ui, guchar *data, gint len) | |
244 { | |
245 GError *error = NULL; | |
246 gint sent; | |
247 /* we'll let the write silently fail because the read will pick it up as dead */ | |
248 g_io_channel_write_chars(ui->channel, data, len, &sent, &error); | |
249 if (error) | |
250 g_error_free(error); | |
251 return sent; | |
252 } | |
253 | |
254 static void | |
255 UI_build_write(struct UI *ui, guchar type, guchar subtype, ...) | |
256 { | |
257 va_list ap; | |
258 gchar *data; | |
259 guint32 len; | |
260 | |
261 va_start(ap, subtype); | |
262 data = UI_build(&len, type, subtype, ap); | |
263 va_end(ap); | |
264 | |
265 UI_write(ui, data, len); | |
266 | |
267 g_free(data); | |
268 } | |
269 | |
270 static void | |
271 UI_broadcast(guchar *data, gint len) | |
272 { | |
273 GSList *u = uis; | |
274 while (u) { | |
275 struct UI *ui = u->data; | |
276 UI_write(ui, data, len); | |
277 u = u->next; | |
278 } | |
279 } | |
280 | |
281 static void | |
282 UI_build_broadcast(guchar type, guchar subtype, ...) | |
283 { | |
284 va_list ap; | |
285 gchar *data; | |
286 guint32 len; | |
287 | |
288 if (!uis) | |
289 return; | |
290 | |
291 va_start(ap, subtype); | |
292 data = UI_build(&len, type, subtype, ap); | |
293 va_end(ap); | |
294 | |
295 UI_broadcast(data, len); | |
296 | |
297 g_free(data); | |
298 } | |
299 #endif | |
300 | |
301 #ifndef _WIN32 | |
302 static void | |
6063 | 303 meta_handler(struct UI *ui, guchar subtype, gchar *data) |
5859 | 304 { |
305 GaimRemotePacket *p; | |
306 GError *error = NULL; | |
307 switch (subtype) { | |
308 case CUI_META_LIST: | |
309 break; | |
310 case CUI_META_QUIT: | |
311 while (uis) { | |
312 ui = uis->data; | |
313 uis = g_slist_remove(uis, ui); | |
314 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
315 g_source_remove(ui->inpa); | |
316 g_free(ui); | |
317 } | |
7646 | 318 g_timeout_add(0, gaim_core_quit_cb, NULL); |
5859 | 319 break; |
320 case CUI_META_DETACH: | |
321 uis = g_slist_remove(uis, ui); | |
322 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
323 g_source_remove(ui->inpa); | |
324 g_free(ui); | |
325 break; | |
326 case CUI_META_PING: | |
327 p = gaim_remote_packet_new(CUI_TYPE_META, CUI_META_ACK); | |
328 gaim_remote_session_send_packet(g_io_channel_unix_get_fd(ui->channel), | |
329 p); | |
330 gaim_remote_packet_free(p); | |
331 break; | |
332 default: | |
333 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
334 "Unhandled meta subtype %d\n", subtype); | |
335 break; | |
336 } | |
337 | |
338 if(error) | |
339 g_error_free(error); | |
340 } | |
341 | |
342 static void | |
6063 | 343 plugin_handler(struct UI *ui, guchar subtype, gpointer data) |
5859 | 344 { |
345 #ifdef GAIM_PLUGINS | |
346 guint id; | |
347 GaimPlugin *p; | |
348 | |
349 switch (subtype) { | |
350 /* | |
351 case CUI_PLUGIN_LIST: | |
352 break; | |
353 */ | |
354 case CUI_PLUGIN_LOAD: | |
355 gaim_plugin_load(gaim_plugin_probe(data)); | |
356 break; | |
357 case CUI_PLUGIN_UNLOAD: | |
358 memcpy(&id, data, sizeof(id)); | |
359 p = g_list_nth_data(gaim_plugins_get_loaded(), id); | |
360 if (p) { | |
361 gaim_plugin_unload(p); | |
362 } | |
363 break; | |
364 default: | |
365 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
366 "Unhandled plugin subtype %d\n", subtype); | |
367 break; | |
368 } | |
369 #endif | |
370 } | |
371 | |
372 static void | |
6063 | 373 user_handler(struct UI *ui, guchar subtype, gchar *data) |
5859 | 374 { |
375 guint id; | |
376 GaimAccount *account; | |
377 | |
378 switch (subtype) { | |
379 /* | |
380 case CUI_USER_LIST: | |
381 break; | |
382 case CUI_USER_ADD: | |
383 break; | |
384 case CUI_USER_REMOVE: | |
385 break; | |
386 case CUI_USER_MODIFY: | |
387 break; | |
388 */ | |
389 case CUI_USER_SIGNON: | |
390 if (!data) | |
391 return; | |
392 memcpy(&id, data, sizeof(id)); | |
393 account = g_list_nth_data(gaim_accounts_get_all(), id); | |
394 if (account) | |
6036 | 395 gaim_account_connect(account); |
5859 | 396 /* don't need to do anything here because the UI will get updates from other handlers */ |
397 break; | |
9608 | 398 case CUI_USER_AWAY: |
399 { | |
400 GSList* l; | |
401 const char* default_away_name = gaim_prefs_get_string("/core/away/default_message"); | |
402 | |
403 for(l = away_messages; l; l = l->next) { | |
404 if(!strcmp(default_away_name, ((struct away_message *)l->data)->name)) { | |
405 do_away_message(NULL, l->data); | |
406 break; | |
407 } | |
408 } | |
409 } | |
410 break; | |
411 case CUI_USER_BACK: | |
412 do_im_back(NULL, NULL); | |
413 break; | |
5859 | 414 default: |
415 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
416 "Unhandled user subtype %d\n", subtype); | |
417 break; | |
418 } | |
419 } | |
420 | |
421 static void | |
6063 | 422 message_handler(struct UI *ui, guchar subtype, gchar *data) |
5859 | 423 { |
424 switch (subtype) { | |
425 case CUI_MESSAGE_LIST: | |
426 break; | |
427 case CUI_MESSAGE_SEND: | |
428 if (!data) | |
429 return; | |
430 { | |
431 guint id; | |
432 GaimConnection *gc; | |
433 guint len; | |
434 char *who, *msg; | |
435 gint flags; | |
436 int pos = 0; | |
437 | |
438 memcpy(&id, data + pos, sizeof(id)); | |
439 pos += sizeof(id); | |
440 gc = g_list_nth_data(gaim_connections_get_all(), id); | |
441 if (!gc) | |
442 return; | |
443 | |
444 memcpy(&len, data + pos, sizeof(len)); | |
445 pos += sizeof(len); | |
446 who = g_strndup(data + pos, len + 1); | |
447 pos += len; | |
448 | |
449 memcpy(&len, data + pos, sizeof(len)); | |
450 pos += sizeof(len); | |
451 msg = g_strndup(data + pos, len + 1); | |
452 pos += len; | |
453 | |
454 memcpy(&flags, data + pos, sizeof(flags)); | |
6982 | 455 serv_send_im(gc, who, msg, flags); |
5859 | 456 |
457 g_free(who); | |
458 g_free(msg); | |
459 } | |
460 break; | |
461 case CUI_MESSAGE_RECV: | |
462 break; | |
463 default: | |
464 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
465 "Unhandled message subtype %d\n", subtype); | |
466 break; | |
467 } | |
468 } | |
469 | |
470 static gint | |
6063 | 471 gaim_recv(GIOChannel *source, gchar *buf, gint len) |
5859 | 472 { |
473 gint total = 0; | |
6063 | 474 guint cur; |
5859 | 475 |
476 GError *error = NULL; | |
477 | |
478 while (total < len) { | |
7386 | 479 if (g_io_channel_read_chars(source, buf + total, len - total, (gsize *) &cur, &error) != G_IO_STATUS_NORMAL) { |
5859 | 480 if (error) |
481 g_error_free(error); | |
482 return -1; | |
483 } | |
484 if (cur == 0) | |
485 return total; | |
486 total += cur; | |
487 } | |
488 | |
489 return total; | |
490 } | |
491 | |
492 static void | |
6063 | 493 remote_handler(struct UI *ui, guchar subtype, gchar *data, int len) |
5859 | 494 { |
495 const char *resp; | |
496 char *send; | |
497 switch (subtype) { | |
498 case CUI_REMOTE_CONNECTIONS: | |
499 break; | |
500 case CUI_REMOTE_URI: | |
501 send = g_malloc(len + 1); | |
502 memcpy(send, data, len); | |
503 send[len] = 0; | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
504 resp = gaim_remote_handle_uri(send); |
5859 | 505 g_free(send); |
506 /* report error */ | |
507 break; | |
508 default: | |
509 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
510 "Unhandled remote subtype %d\n", subtype); | |
511 break; | |
512 } | |
513 } | |
514 | |
515 static gboolean | |
516 UI_readable(GIOChannel *source, GIOCondition cond, gpointer data) | |
517 { | |
518 struct UI *ui = data; | |
519 | |
6063 | 520 gchar type; |
521 gchar subtype; | |
7631 | 522 gint len; |
5859 | 523 |
524 GError *error = NULL; | |
525 | |
6063 | 526 gchar *in; |
5859 | 527 |
528 /* no byte order worries! this'll change if we go to TCP */ | |
529 if (gaim_recv(source, &type, sizeof(type)) != sizeof(type)) { | |
530 gaim_debug(GAIM_DEBUG_ERROR, "cui", "UI has abandoned us!\n"); | |
531 uis = g_slist_remove(uis, ui); | |
532 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
533 if(error) { | |
534 g_error_free(error); | |
535 error = NULL; | |
536 } | |
537 g_source_remove(ui->inpa); | |
538 g_free(ui); | |
539 return FALSE; | |
540 } | |
541 | |
542 if (gaim_recv(source, &subtype, sizeof(subtype)) != sizeof(subtype)) { | |
543 gaim_debug(GAIM_DEBUG_ERROR, "cui", "UI has abandoned us!\n"); | |
544 uis = g_slist_remove(uis, ui); | |
545 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
546 if(error) { | |
547 g_error_free(error); | |
548 error = NULL; | |
549 } | |
550 g_source_remove(ui->inpa); | |
551 g_free(ui); | |
552 return FALSE; | |
553 } | |
554 | |
6063 | 555 if (gaim_recv(source, (gchar *)&len, sizeof(len)) != sizeof(len)) { |
5859 | 556 gaim_debug(GAIM_DEBUG_ERROR, "cui", "UI has abandoned us!\n"); |
557 uis = g_slist_remove(uis, ui); | |
558 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
559 if(error) { | |
560 g_error_free(error); | |
561 error = NULL; | |
562 } | |
563 g_source_remove(ui->inpa); | |
564 g_free(ui); | |
565 return FALSE; | |
566 } | |
567 | |
568 if (len) { | |
6063 | 569 in = g_new0(gchar, len); |
5859 | 570 if (gaim_recv(source, in, len) != len) { |
571 gaim_debug(GAIM_DEBUG_ERROR, "cui", "UI has abandoned us!\n"); | |
572 uis = g_slist_remove(uis, ui); | |
573 g_io_channel_shutdown(ui->channel, TRUE, &error); | |
574 if(error) { | |
575 g_error_free(error); | |
576 error = NULL; | |
577 } | |
578 g_source_remove(ui->inpa); | |
579 g_free(ui); | |
580 return FALSE; | |
581 } | |
582 } else | |
583 in = NULL; | |
584 | |
585 switch (type) { | |
586 case CUI_TYPE_META: | |
587 meta_handler(ui, subtype, in); | |
588 break; | |
589 case CUI_TYPE_PLUGIN: | |
590 plugin_handler(ui, subtype, in); | |
591 break; | |
592 case CUI_TYPE_USER: | |
593 user_handler(ui, subtype, in); | |
594 break; | |
595 /* | |
596 case CUI_TYPE_CONN: | |
597 conn_handler(ui, subtype, in); | |
598 break; | |
599 case CUI_TYPE_BUDDY: | |
600 buddy_handler(ui, subtype, in); | |
601 break; | |
602 */ | |
603 case CUI_TYPE_MESSAGE: | |
604 message_handler(ui, subtype, in); | |
605 break; | |
606 /* | |
607 case CUI_TYPE_CHAT: | |
608 chat_handler(ui, subtype, in); | |
609 break; | |
610 */ | |
611 case CUI_TYPE_REMOTE: | |
612 remote_handler(ui, subtype, in, len); | |
613 break; | |
614 default: | |
615 gaim_debug(GAIM_DEBUG_WARNING, "cui", | |
616 "Unhandled type %d\n", type); | |
617 break; | |
618 } | |
619 | |
620 if (in) | |
621 g_free(in); | |
622 return TRUE; | |
623 } | |
624 | |
625 static gboolean | |
626 socket_readable(GIOChannel *source, GIOCondition cond, gpointer data) | |
627 { | |
628 struct sockaddr_un saddr; | |
6063 | 629 guint len = sizeof(saddr); |
5859 | 630 gint fd; |
631 | |
632 struct UI *ui; | |
633 | |
634 if ((fd = accept(UI_fd, (struct sockaddr *)&saddr, &len)) == -1) | |
635 return FALSE; | |
636 | |
637 ui = g_new0(struct UI, 1); | |
638 uis = g_slist_append(uis, ui); | |
639 | |
640 ui->channel = g_io_channel_unix_new(fd); | |
641 ui->inpa = g_io_add_watch(ui->channel, G_IO_IN | G_IO_HUP | G_IO_ERR, UI_readable, ui); | |
642 g_io_channel_unref(ui->channel); | |
643 | |
644 gaim_debug(GAIM_DEBUG_MISC, "cui", "Got one\n"); | |
645 return TRUE; | |
646 } | |
647 | |
648 static gint | |
8704 | 649 open_socket(char **error) |
5859 | 650 { |
651 struct sockaddr_un saddr; | |
652 gint fd; | |
653 | |
654 while (gaim_remote_session_exists(gaim_session)) | |
655 gaim_session++; | |
656 | |
657 gaim_debug(GAIM_DEBUG_MISC, "cui", "Session: %d\n", gaim_session); | |
658 | |
659 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) != -1) { | |
660 mode_t m = umask(0177); | |
661 saddr.sun_family = AF_UNIX; | |
662 | |
663 g_snprintf(saddr.sun_path, sizeof(saddr.sun_path), "%s" G_DIR_SEPARATOR_S "gaim_%s.%d", | |
664 g_get_tmp_dir(), g_get_user_name(), gaim_session); | |
665 if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) != -1) | |
666 listen(fd, 100); | |
667 else { | |
8704 | 668 *error = g_strdup_printf(_("Failed to assign %s to a socket:\n%s"), |
669 saddr.sun_path, strerror(errno)); | |
5859 | 670 g_log(NULL, G_LOG_LEVEL_CRITICAL, |
671 "Failed to assign %s to a socket (Error: %s)", | |
672 saddr.sun_path, strerror(errno)); | |
7617 | 673 umask(m); |
5859 | 674 return -1; |
675 } | |
676 umask(m); | |
677 } else | |
678 g_log(NULL, G_LOG_LEVEL_CRITICAL, "Unable to open socket: %s", strerror(errno)); | |
679 return fd; | |
680 } | |
681 #endif /*! _WIN32*/ | |
682 | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
683 static gboolean |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
684 plugin_load(GaimPlugin *plugin) |
5859 | 685 { |
686 #ifndef _WIN32 | |
687 GIOChannel *channel; | |
8704 | 688 char *buf; |
5859 | 689 |
8704 | 690 if ((UI_fd = open_socket(&buf)) < 0) { |
691 gaim_notify_error(NULL, NULL, _("Unable to open socket"), buf); | |
692 g_free(buf); | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
693 return FALSE; |
8704 | 694 } |
5859 | 695 |
696 channel = g_io_channel_unix_new(UI_fd); | |
6107 | 697 watcher = g_io_add_watch(channel, G_IO_IN, socket_readable, NULL); |
5859 | 698 g_io_channel_unref(channel); |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
699 |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
700 return TRUE; |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
701 #else |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
702 return FALSE; |
5859 | 703 #endif |
704 } | |
705 | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
706 static gboolean |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
707 plugin_unload(GaimPlugin *plugin) |
5859 | 708 { |
709 /* don't save prefs after plugins are gone... */ | |
710 #ifndef _WIN32 | |
711 char buf[1024]; | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
712 |
6107 | 713 g_source_remove(watcher); |
5859 | 714 close(UI_fd); |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
715 |
6063 | 716 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gaim_%s.%d", |
5859 | 717 g_get_tmp_dir(), g_get_user_name(), gaim_session); |
718 | |
719 unlink(buf); | |
720 | |
721 gaim_debug(GAIM_DEBUG_MISC, "core", "Removed core\n"); | |
5954 | 722 |
723 return TRUE; | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
724 #else |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
725 return FALSE; |
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
726 #endif |
5859 | 727 } |
728 | |
729 static GaimPluginInfo info = | |
730 { | |
8749
d7b8eb1f0a18
[gaim-migrate @ 9504]
Christian Hammond <chipx86@chipx86.com>
parents:
8704
diff
changeset
|
731 GAIM_PLUGIN_API_VERSION, /**< api_version */ |
5859 | 732 GAIM_PLUGIN_STANDARD, /**< type */ |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
733 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
5859 | 734 0, /**< flags */ |
735 NULL, /**< dependencies */ | |
736 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
737 | |
738 REMOTE_PLUGIN_ID, /**< id */ | |
739 N_("Remote Control"), /**< name */ | |
740 VERSION, /**< version */ | |
741 /** summary */ | |
742 N_("Provides remote control for gaim applications."), | |
743 /** description */ | |
744 N_("Gives Gaim the ability to be remote-controlled through third-party " | |
745 "applications or through the gaim-remote tool."), | |
7782
795b71216887
[gaim-migrate @ 8427]
Christian Hammond <chipx86@chipx86.com>
parents:
7646
diff
changeset
|
746 "Sean Egan <sean.egan@binghamton.edu>", |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6179
diff
changeset
|
747 GAIM_WEBSITE, /**< homepage */ |
5859 | 748 |
749 plugin_load, /**< load */ | |
750 plugin_unload, /**< unload */ | |
751 NULL, /**< destroy */ | |
752 | |
753 NULL, /**< ui_info */ | |
8993 | 754 NULL, /**< extra_info */ |
755 NULL, | |
756 NULL | |
5859 | 757 }; |
758 | |
759 static void | |
760 __init_plugin(GaimPlugin *plugin) | |
761 { | |
762 } | |
763 | |
6177
73f8f5c0e348
[gaim-migrate @ 6662]
Christian Hammond <chipx86@chipx86.com>
parents:
6107
diff
changeset
|
764 /* This may be horribly wrong. Oh the mayhem! */ |
6063 | 765 GAIM_INIT_PLUGIN(remote, __init_plugin, info) |