Mon, 04 Jun 2007 02:22:50 +0000
Changing this timer to run every 50 milliseconds instead of every 5
milliseconds. The timer is used to integrate our glib mainloop with
silcclient's mainloop.
Some Red Hat people complained that the timer causes the CPU to wake
up really often and that hurts out power consumption on laptops and
what not. Ideally the integration wouldn't need the timeout thing
and would instead by event-driven.
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=242398
| 8849 | 1 | /* |
| 2 | ||
| 15884 | 3 | silcpurple.c |
| 8849 | 4 | |
| 5 | Author: Pekka Riikonen <priikone@silcnet.org> | |
| 6 | ||
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
7 | Copyright (C) 2004 - 2005 Pekka Riikonen |
| 8849 | 8 | |
| 9 | This program is free software; you can redistribute it and/or modify | |
| 10 | it under the terms of the GNU General Public License as published by | |
| 11 | the Free Software Foundation; version 2 of the License. | |
| 12 | ||
| 13 | This program is distributed in the hope that it will be useful, | |
| 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | GNU General Public License for more details. | |
| 17 | ||
| 18 | */ | |
| 19 | ||
| 20 | #include "silcincludes.h" | |
| 21 | #include "silcclient.h" | |
| 15884 | 22 | #include "silcpurple.h" |
| 9943 | 23 | #include "version.h" |
|
12058
6d4b6e3bd0ba
[gaim-migrate @ 14353]
Pekka Riikonen <priikone@silcnet.org>
parents:
11837
diff
changeset
|
24 | #include "wb.h" |
| 8849 | 25 | |
| 26 | extern SilcClientOperations ops; | |
| 15884 | 27 | static PurplePlugin *silc_plugin = NULL; |
| 8849 | 28 | |
| 29 | static const char * | |
| 15884 | 30 | silcpurple_list_icon(PurpleAccount *a, PurpleBuddy *b) |
| 8849 | 31 | { |
| 32 | return (const char *)"silc"; | |
| 33 | } | |
| 34 | ||
| 35 | static GList * | |
| 15884 | 36 | silcpurple_away_states(PurpleAccount *account) |
| 8849 | 37 | { |
| 15884 | 38 | PurpleStatusType *type; |
| 9968 | 39 | GList *types = NULL; |
| 8849 | 40 | |
| 15884 | 41 | type = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, SILCPURPLE_STATUS_ID_AVAILABLE, NULL, FALSE, TRUE, FALSE); |
| 9968 | 42 | types = g_list_append(types, type); |
| 15884 | 43 | type = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, SILCPURPLE_STATUS_ID_HYPER, _("Hyper Active"), FALSE, TRUE, FALSE); |
| 9968 | 44 | types = g_list_append(types, type); |
| 15884 | 45 | type = purple_status_type_new_full(PURPLE_STATUS_AWAY, SILCPURPLE_STATUS_ID_AWAY, NULL, FALSE, TRUE, FALSE); |
| 9968 | 46 | types = g_list_append(types, type); |
| 15884 | 47 | type = purple_status_type_new_full(PURPLE_STATUS_UNAVAILABLE, SILCPURPLE_STATUS_ID_BUSY, _("Busy"), FALSE, TRUE, FALSE); |
| 9968 | 48 | types = g_list_append(types, type); |
| 15884 | 49 | type = purple_status_type_new_full(PURPLE_STATUS_AWAY, SILCPURPLE_STATUS_ID_INDISPOSED, _("Indisposed"), FALSE, TRUE, FALSE); |
| 9968 | 50 | types = g_list_append(types, type); |
| 15884 | 51 | type = purple_status_type_new_full(PURPLE_STATUS_AWAY, SILCPURPLE_STATUS_ID_PAGE, _("Wake Me Up"), FALSE, TRUE, FALSE); |
| 9968 | 52 | types = g_list_append(types, type); |
| 15884 | 53 | type = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, SILCPURPLE_STATUS_ID_OFFLINE, NULL, FALSE, TRUE, FALSE); |
|
12658
4aa7a873628d
[gaim-migrate @ 15001]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
54 | types = g_list_append(types, type); |
| 8849 | 55 | |
| 9968 | 56 | return types; |
| 8849 | 57 | } |
| 58 | ||
| 59 | static void | |
| 15884 | 60 | silcpurple_set_status(PurpleAccount *account, PurpleStatus *status) |
| 8849 | 61 | { |
| 15884 | 62 | PurpleConnection *gc = purple_account_get_connection(account); |
| 63 | SilcPurple sg = NULL; | |
| 8849 | 64 | SilcUInt32 mode; |
| 65 | SilcBuffer idp; | |
| 66 | unsigned char mb[4]; | |
| 9968 | 67 | const char *state; |
| 8849 | 68 | |
|
10801
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
69 | if (gc != NULL) |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
70 | sg = gc->proto_data; |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
71 | |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
72 | if (status == NULL) |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
73 | return; |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
74 | |
| 15884 | 75 | state = purple_status_get_id(status); |
|
10225
0dfea1bc8695
[gaim-migrate @ 11357]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10050
diff
changeset
|
76 | |
|
10801
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
77 | if (state == NULL) |
|
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
78 | return; |
|
10225
0dfea1bc8695
[gaim-migrate @ 11357]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10050
diff
changeset
|
79 | |
|
10801
b5f44181183f
[gaim-migrate @ 12447]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10751
diff
changeset
|
80 | if ((sg == NULL) || (sg->conn == NULL)) |
| 8849 | 81 | return; |
| 82 | ||
| 83 | mode = sg->conn->local_entry->mode; | |
| 84 | mode &= ~(SILC_UMODE_GONE | | |
| 85 | SILC_UMODE_HYPER | | |
| 86 | SILC_UMODE_BUSY | | |
| 87 | SILC_UMODE_INDISPOSED | | |
| 88 | SILC_UMODE_PAGE); | |
| 89 | ||
| 9968 | 90 | if (!strcmp(state, "hyper")) |
| 8849 | 91 | mode |= SILC_UMODE_HYPER; |
| 9968 | 92 | else if (!strcmp(state, "away")) |
| 8849 | 93 | mode |= SILC_UMODE_GONE; |
| 9968 | 94 | else if (!strcmp(state, "busy")) |
| 8849 | 95 | mode |= SILC_UMODE_BUSY; |
| 9968 | 96 | else if (!strcmp(state, "indisposed")) |
| 8849 | 97 | mode |= SILC_UMODE_INDISPOSED; |
| 9968 | 98 | else if (!strcmp(state, "page")) |
| 8849 | 99 | mode |= SILC_UMODE_PAGE; |
| 100 | ||
| 101 | /* Send UMODE */ | |
| 102 | idp = silc_id_payload_encode(sg->conn->local_id, SILC_ID_CLIENT); | |
| 103 | SILC_PUT32_MSB(mode, mb); | |
| 104 | silc_client_command_send(sg->client, sg->conn, SILC_COMMAND_UMODE, | |
| 105 | ++sg->conn->cmd_ident, 2, | |
| 106 | 1, idp->data, idp->len, | |
| 107 | 2, mb, sizeof(mb)); | |
| 108 | silc_buffer_free(idp); | |
| 109 | } | |
| 110 | ||
| 111 | ||
| 112 | /*************************** Connection Routines *****************************/ | |
| 113 | ||
| 114 | static void | |
| 15884 | 115 | silcpurple_keepalive(PurpleConnection *gc) |
| 8849 | 116 | { |
| 15884 | 117 | SilcPurple sg = gc->proto_data; |
| 8849 | 118 | silc_client_send_packet(sg->client, sg->conn, SILC_PACKET_HEARTBEAT, |
| 119 | NULL, 0); | |
| 120 | } | |
| 121 | ||
| 122 | static int | |
| 15884 | 123 | silcpurple_scheduler(gpointer *context) |
| 8849 | 124 | { |
| 15884 | 125 | SilcPurple sg = (SilcPurple)context; |
| 8849 | 126 | silc_client_run_one(sg->client); |
| 127 | return 1; | |
| 128 | } | |
| 129 | ||
| 130 | static void | |
| 15884 | 131 | silcpurple_nickname_parse(const char *nickname, |
| 8849 | 132 | char **ret_nickname) |
| 133 | { | |
| 134 | silc_parse_userfqdn(nickname, ret_nickname, NULL); | |
| 135 | } | |
| 136 | ||
| 137 | static void | |
| 15884 | 138 | silcpurple_login_connected(gpointer data, gint source, const gchar *error_message) |
| 8849 | 139 | { |
| 15884 | 140 | PurpleConnection *gc = data; |
| 141 | SilcPurple sg; | |
|
9732
644615310076
[gaim-migrate @ 10593]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9597
diff
changeset
|
142 | SilcClient client; |
| 8849 | 143 | SilcClientConnection conn; |
| 15884 | 144 | PurpleAccount *account; |
| 8849 | 145 | SilcClientConnectionParams params; |
| 146 | const char *dfile; | |
| 147 | ||
|
13410
590ccd4c9bb1
[gaim-migrate @ 15784]
Richard Laager <rlaager@pidgin.im>
parents:
13297
diff
changeset
|
148 | g_return_if_fail(gc != NULL); |
|
14030
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13961
diff
changeset
|
149 | |
|
14179
b54c870fb9d0
[gaim-migrate @ 16751]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
150 | sg = gc->proto_data; |
|
13410
590ccd4c9bb1
[gaim-migrate @ 15784]
Richard Laager <rlaager@pidgin.im>
parents:
13297
diff
changeset
|
151 | |
| 8849 | 152 | if (source < 0) { |
| 15884 | 153 | purple_connection_error(gc, _("Connection failed")); |
| 8849 | 154 | return; |
| 155 | } | |
|
9732
644615310076
[gaim-migrate @ 10593]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9597
diff
changeset
|
156 | |
|
644615310076
[gaim-migrate @ 10593]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9597
diff
changeset
|
157 | client = sg->client; |
|
13410
590ccd4c9bb1
[gaim-migrate @ 15784]
Richard Laager <rlaager@pidgin.im>
parents:
13297
diff
changeset
|
158 | account = sg->account; |
|
9732
644615310076
[gaim-migrate @ 10593]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9597
diff
changeset
|
159 | |
| 8849 | 160 | /* Get session detachment data, if available */ |
| 161 | memset(¶ms, 0, sizeof(params)); | |
| 15884 | 162 | dfile = silcpurple_session_file(purple_account_get_username(sg->account)); |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11257
diff
changeset
|
163 | params.detach_data = (unsigned char *)silc_file_readfile(dfile, ¶ms.detach_data_len); |
| 8849 | 164 | if (params.detach_data) |
| 165 | params.detach_data[params.detach_data_len] = 0; | |
| 166 | ||
| 167 | /* Add connection to SILC client library */ | |
| 168 | conn = silc_client_add_connection( | |
| 169 | sg->client, ¶ms, | |
| 15884 | 170 | (char *)purple_account_get_string(account, "server", |
| 8849 | 171 | "silc.silcnet.org"), |
| 15884 | 172 | purple_account_get_int(account, "port", 706), sg); |
| 8849 | 173 | if (!conn) { |
| 15884 | 174 | purple_connection_error(gc, _("Cannot initialize SILC Client connection")); |
| 8849 | 175 | gc->proto_data = NULL; |
| 176 | return; | |
| 177 | } | |
| 178 | sg->conn = conn; | |
| 179 | ||
| 180 | /* Progress */ | |
| 181 | if (params.detach_data) { | |
| 15884 | 182 | purple_connection_update_progress(gc, _("Resuming session"), 2, 5); |
| 8849 | 183 | sg->resuming = TRUE; |
| 184 | } else { | |
| 15884 | 185 | purple_connection_update_progress(gc, _("Performing key exchange"), 2, 5); |
| 8849 | 186 | } |
| 187 | ||
| 188 | /* Perform SILC Key Exchange. The "silc_connected" will be called | |
| 189 | eventually. */ | |
| 190 | silc_client_start_key_exchange(sg->client, sg->conn, source); | |
| 191 | ||
| 192 | /* Set default attributes */ | |
| 15884 | 193 | if (!purple_account_get_bool(account, "reject-attrs", FALSE)) { |
| 8849 | 194 | SilcUInt32 mask; |
| 195 | const char *tmp; | |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
196 | #ifdef SILC_ATTRIBUTE_USER_ICON |
|
16549
59e5ad39510c
Update SILC for imgstore changes.
Daniel Atallah <datallah@pidgin.im>
parents:
16492
diff
changeset
|
197 | PurpleStoredImage *img; |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
198 | #endif |
| 8849 | 199 | #ifdef HAVE_SYS_UTSNAME_H |
| 200 | struct utsname u; | |
| 201 | #endif | |
| 202 | ||
| 203 | mask = SILC_ATTRIBUTE_MOOD_NORMAL; | |
| 204 | silc_client_attribute_add(client, conn, | |
| 205 | SILC_ATTRIBUTE_STATUS_MOOD, | |
| 206 | SILC_32_TO_PTR(mask), | |
| 207 | sizeof(SilcUInt32)); | |
| 208 | mask = SILC_ATTRIBUTE_CONTACT_CHAT; | |
| 209 | silc_client_attribute_add(client, conn, | |
| 210 | SILC_ATTRIBUTE_PREFERRED_CONTACT, | |
| 211 | SILC_32_TO_PTR(mask), | |
| 212 | sizeof(SilcUInt32)); | |
| 213 | #ifdef HAVE_SYS_UTSNAME_H | |
| 214 | if (!uname(&u)) { | |
| 215 | SilcAttributeObjDevice dev; | |
| 216 | memset(&dev, 0, sizeof(dev)); | |
| 217 | dev.type = SILC_ATTRIBUTE_DEVICE_COMPUTER; | |
| 218 | dev.version = u.release; | |
| 219 | dev.model = u.sysname; | |
| 220 | silc_client_attribute_add(client, conn, | |
| 221 | SILC_ATTRIBUTE_DEVICE_INFO, | |
| 222 | (void *)&dev, sizeof(dev)); | |
| 223 | } | |
| 224 | #endif | |
| 225 | #ifdef _WIN32 | |
| 226 | tmp = _tzname[0]; | |
| 227 | #else | |
| 228 | tmp = tzname[0]; | |
| 229 | #endif | |
| 230 | silc_client_attribute_add(client, conn, | |
| 231 | SILC_ATTRIBUTE_TIMEZONE, | |
| 232 | (void *)tmp, strlen(tmp)); | |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
233 | |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
234 | #ifdef SILC_ATTRIBUTE_USER_ICON |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
235 | /* Set our buddy icon */ |
|
16549
59e5ad39510c
Update SILC for imgstore changes.
Daniel Atallah <datallah@pidgin.im>
parents:
16492
diff
changeset
|
236 | img = purple_buddy_icons_find_account_icon(account); |
|
59e5ad39510c
Update SILC for imgstore changes.
Daniel Atallah <datallah@pidgin.im>
parents:
16492
diff
changeset
|
237 | silcpurple_buddy_set_icon(gc, img); |
|
59e5ad39510c
Update SILC for imgstore changes.
Daniel Atallah <datallah@pidgin.im>
parents:
16492
diff
changeset
|
238 | purple_imgstore_unref(img); |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
239 | #endif |
| 8849 | 240 | } |
| 241 | ||
| 242 | silc_free(params.detach_data); | |
| 243 | } | |
| 244 | ||
| 245 | static void | |
| 15884 | 246 | silcpurple_login(PurpleAccount *account) |
| 8849 | 247 | { |
| 15884 | 248 | SilcPurple sg; |
| 8849 | 249 | SilcClient client; |
| 250 | SilcClientParams params; | |
| 15884 | 251 | PurpleConnection *gc; |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
252 | char pkd[256], prd[256]; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
253 | const char *cipher, *hmac; |
|
13961
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
254 | char *realname; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
255 | int i; |
| 8849 | 256 | |
| 257 | gc = account->gc; | |
| 258 | if (!gc) | |
| 259 | return; | |
| 260 | gc->proto_data = NULL; | |
| 261 | ||
| 262 | memset(¶ms, 0, sizeof(params)); | |
| 263 | strcat(params.nickname_format, "%n@%h%a"); | |
| 15884 | 264 | params.nickname_parse = silcpurple_nickname_parse; |
| 8849 | 265 | params.ignore_requested_attributes = |
| 15884 | 266 | purple_account_get_bool(account, "reject-attrs", FALSE); |
| 8849 | 267 | |
| 268 | /* Allocate SILC client */ | |
| 269 | client = silc_client_alloc(&ops, ¶ms, gc, NULL); | |
| 270 | if (!client) { | |
| 15884 | 271 | purple_connection_error(gc, _("Out of memory")); |
| 8849 | 272 | return; |
| 273 | } | |
| 274 | ||
| 275 | /* Get username, real name and local hostname for SILC library */ | |
| 15884 | 276 | if (purple_account_get_username(account)) { |
| 277 | const char *u = purple_account_get_username(account); | |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
278 | char **up = g_strsplit(u, "@", 2); |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
279 | client->username = strdup(up[0]); |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
280 | g_strfreev(up); |
| 8849 | 281 | } else { |
| 282 | client->username = silc_get_username(); | |
| 15884 | 283 | purple_account_set_username(account, client->username); |
| 8849 | 284 | } |
|
13961
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
285 | realname = silc_get_real_name(); |
| 15884 | 286 | if (purple_account_get_user_info(account)) { |
| 287 | client->realname = strdup(purple_account_get_user_info(account)); | |
|
13961
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
288 | free(realname); |
|
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
289 | } else if ((silc_get_real_name() != NULL) && (*realname != '\0')) { |
|
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
290 | client->realname = realname; |
| 15884 | 291 | purple_account_set_user_info(account, client->realname); |
| 8849 | 292 | } else { |
|
13961
a1f8ffceca10
[gaim-migrate @ 16384]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13636
diff
changeset
|
293 | free(realname); |
|
15444
b793ef258d23
I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
294 | client->realname = strdup(_("John Noname")); |
| 8849 | 295 | } |
| 296 | client->hostname = silc_net_localhost(); | |
| 297 | ||
| 15884 | 298 | purple_connection_set_display_name(gc, client->username); |
| 8849 | 299 | |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
300 | /* Register requested cipher and HMAC */ |
| 15884 | 301 | cipher = purple_account_get_string(account, "cipher", SILC_DEFAULT_CIPHER); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
302 | for (i = 0; silc_default_ciphers[i].name; i++) |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
303 | if (!strcmp(silc_default_ciphers[i].name, cipher)) { |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
304 | silc_cipher_register(&(silc_default_ciphers[i])); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
305 | break; |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
306 | } |
| 15884 | 307 | hmac = purple_account_get_string(account, "hmac", SILC_DEFAULT_HMAC); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
308 | for (i = 0; silc_default_hmacs[i].name; i++) |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
309 | if (!strcmp(silc_default_hmacs[i].name, hmac)) { |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
310 | silc_hmac_register(&(silc_default_hmacs[i])); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
311 | break; |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
312 | } |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
313 | |
| 8849 | 314 | /* Init SILC client */ |
| 315 | if (!silc_client_init(client)) { | |
|
10909
8c22a8f1ecd1
[gaim-migrate @ 12642]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10869
diff
changeset
|
316 | gc->wants_to_die = TRUE; |
| 15884 | 317 | purple_connection_error(gc, _("Cannot initialize SILC protocol")); |
| 8849 | 318 | return; |
| 319 | } | |
| 320 | ||
| 321 | /* Check the ~/.silc dir and create it, and new key pair if necessary. */ | |
| 15884 | 322 | if (!silcpurple_check_silc_dir(gc)) { |
|
10909
8c22a8f1ecd1
[gaim-migrate @ 12642]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10869
diff
changeset
|
323 | gc->wants_to_die = TRUE; |
| 15884 | 324 | purple_connection_error(gc, _("Cannot find/access ~/.silc directory")); |
| 8849 | 325 | return; |
| 326 | } | |
| 327 | ||
| 328 | /* Progress */ | |
| 15884 | 329 | purple_connection_update_progress(gc, _("Connecting to SILC Server"), 1, 5); |
| 8849 | 330 | |
| 331 | /* Load SILC key pair */ | |
| 15884 | 332 | g_snprintf(pkd, sizeof(pkd), "%s" G_DIR_SEPARATOR_S "public_key.pub", silcpurple_silcdir()); |
| 333 | g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.prv", silcpurple_silcdir()); | |
| 334 | if (!silc_load_key_pair((char *)purple_account_get_string(account, "public-key", pkd), | |
| 335 | (char *)purple_account_get_string(account, "private-key", prd), | |
|
10751
e15f4f5927ce
[gaim-migrate @ 12354]
Mark Doliner <markdoliner@pidgin.im>
parents:
10732
diff
changeset
|
336 | (gc->password == NULL) ? "" : gc->password, &client->pkcs, |
| 9272 | 337 | &client->public_key, &client->private_key)) { |
|
12885
c0fcda07fb52
[gaim-migrate @ 15237]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12761
diff
changeset
|
338 | g_snprintf(pkd, sizeof(pkd), _("Could not load SILC key pair: %s"), strerror(errno)); |
| 15884 | 339 | purple_connection_error(gc, pkd); |
| 8849 | 340 | return; |
| 341 | } | |
| 342 | ||
| 343 | sg = silc_calloc(1, sizeof(*sg)); | |
| 344 | if (!sg) | |
| 345 | return; | |
| 346 | memset(sg, 0, sizeof(*sg)); | |
| 347 | sg->client = client; | |
| 348 | sg->gc = gc; | |
| 349 | sg->account = account; | |
| 350 | gc->proto_data = sg; | |
| 351 | ||
| 352 | /* Connect to the SILC server */ | |
| 15884 | 353 | if (purple_proxy_connect(gc, account, |
| 354 | purple_account_get_string(account, "server", | |
| 8849 | 355 | "silc.silcnet.org"), |
| 15884 | 356 | purple_account_get_int(account, "port", 706), |
| 357 | silcpurple_login_connected, gc) == NULL) | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14030
diff
changeset
|
358 | { |
| 15884 | 359 | purple_connection_error(gc, _("Unable to create connection")); |
| 8849 | 360 | return; |
| 361 | } | |
| 362 | ||
| 363 | /* Schedule SILC using Glib's event loop */ | |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
364 | #ifndef _WIN32 |
|
17564
8969c8a6f952
Changing this timer to run every 50 milliseconds instead of every 5
Mark Doliner <markdoliner@pidgin.im>
parents:
17408
diff
changeset
|
365 | sg->scheduler = g_timeout_add(50, (GSourceFunc)silcpurple_scheduler, sg); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
366 | #else |
| 15884 | 367 | sg->scheduler = g_timeout_add(300, (GSourceFunc)silcpurple_scheduler, sg); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
368 | #endif |
| 8849 | 369 | } |
| 370 | ||
| 371 | static int | |
| 15884 | 372 | silcpurple_close_final(gpointer *context) |
| 8849 | 373 | { |
| 15884 | 374 | SilcPurple sg = (SilcPurple)context; |
| 8849 | 375 | silc_client_stop(sg->client); |
| 376 | silc_client_free(sg->client); | |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
377 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
378 | if (sg->mimeass) |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
379 | silc_mime_assembler_free(sg->mimeass); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
380 | #endif |
| 8849 | 381 | silc_free(sg); |
| 382 | return 0; | |
| 383 | } | |
| 384 | ||
| 385 | static void | |
| 15884 | 386 | silcpurple_close(PurpleConnection *gc) |
| 8849 | 387 | { |
| 15884 | 388 | SilcPurple sg = gc->proto_data; |
| 8849 | 389 | |
|
10547
61f5540fc15a
[gaim-migrate @ 11917]
Mark Doliner <markdoliner@pidgin.im>
parents:
10516
diff
changeset
|
390 | g_return_if_fail(sg != NULL); |
| 8849 | 391 | |
| 392 | /* Send QUIT */ | |
| 393 | silc_client_command_call(sg->client, sg->conn, NULL, | |
|
17408
24fe7521e5d8
(20:36:49) nosnilmot: we need to do something about 'Download Purple: http://pidgin.im/'
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16776
diff
changeset
|
394 | "QUIT", "Download this: " PURPLE_WEBSITE, NULL); |
| 8849 | 395 | |
| 396 | if (sg->conn) | |
| 397 | silc_client_close_connection(sg->client, sg->conn); | |
| 398 | ||
| 399 | g_source_remove(sg->scheduler); | |
| 15884 | 400 | g_timeout_add(1, (GSourceFunc)silcpurple_close_final, sg); |
| 8849 | 401 | } |
| 402 | ||
| 403 | ||
| 404 | /****************************** Protocol Actions *****************************/ | |
| 405 | ||
| 406 | static void | |
| 15884 | 407 | silcpurple_attrs_cancel(PurpleConnection *gc, PurpleRequestFields *fields) |
| 8849 | 408 | { |
| 409 | /* Nothing */ | |
| 410 | } | |
| 411 | ||
| 412 | static void | |
| 15884 | 413 | silcpurple_attrs_cb(PurpleConnection *gc, PurpleRequestFields *fields) |
| 8849 | 414 | { |
| 15884 | 415 | SilcPurple sg = gc->proto_data; |
| 8849 | 416 | SilcClient client = sg->client; |
| 417 | SilcClientConnection conn = sg->conn; | |
| 15884 | 418 | PurpleRequestField *f; |
| 8849 | 419 | char *tmp; |
| 420 | SilcUInt32 tmp_len, mask; | |
| 421 | SilcAttributeObjService service; | |
| 422 | SilcAttributeObjDevice dev; | |
| 423 | SilcVCardStruct vcard; | |
| 424 | const char *val; | |
| 425 | ||
| 426 | sg = gc->proto_data; | |
| 427 | if (!sg) | |
| 428 | return; | |
| 429 | ||
| 430 | memset(&service, 0, sizeof(service)); | |
| 431 | memset(&dev, 0, sizeof(dev)); | |
| 432 | memset(&vcard, 0, sizeof(vcard)); | |
| 433 | ||
| 434 | silc_client_attribute_del(client, conn, | |
| 435 | SILC_ATTRIBUTE_USER_INFO, NULL); | |
| 436 | silc_client_attribute_del(client, conn, | |
| 437 | SILC_ATTRIBUTE_SERVICE, NULL); | |
| 438 | silc_client_attribute_del(client, conn, | |
| 439 | SILC_ATTRIBUTE_STATUS_MOOD, NULL); | |
| 440 | silc_client_attribute_del(client, conn, | |
| 441 | SILC_ATTRIBUTE_STATUS_FREETEXT, NULL); | |
| 442 | silc_client_attribute_del(client, conn, | |
| 443 | SILC_ATTRIBUTE_STATUS_MESSAGE, NULL); | |
| 444 | silc_client_attribute_del(client, conn, | |
| 445 | SILC_ATTRIBUTE_PREFERRED_LANGUAGE, NULL); | |
| 446 | silc_client_attribute_del(client, conn, | |
| 447 | SILC_ATTRIBUTE_PREFERRED_CONTACT, NULL); | |
| 448 | silc_client_attribute_del(client, conn, | |
| 449 | SILC_ATTRIBUTE_TIMEZONE, NULL); | |
| 450 | silc_client_attribute_del(client, conn, | |
| 451 | SILC_ATTRIBUTE_GEOLOCATION, NULL); | |
| 452 | silc_client_attribute_del(client, conn, | |
| 453 | SILC_ATTRIBUTE_DEVICE_INFO, NULL); | |
| 454 | ||
| 455 | /* Set mood */ | |
| 456 | mask = 0; | |
| 15884 | 457 | f = purple_request_fields_get_field(fields, "mood_normal"); |
| 458 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 459 | mask |= SILC_ATTRIBUTE_MOOD_NORMAL; |
| 15884 | 460 | f = purple_request_fields_get_field(fields, "mood_happy"); |
| 461 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 462 | mask |= SILC_ATTRIBUTE_MOOD_HAPPY; |
| 15884 | 463 | f = purple_request_fields_get_field(fields, "mood_sad"); |
| 464 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 465 | mask |= SILC_ATTRIBUTE_MOOD_SAD; |
| 15884 | 466 | f = purple_request_fields_get_field(fields, "mood_angry"); |
| 467 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 468 | mask |= SILC_ATTRIBUTE_MOOD_ANGRY; |
| 15884 | 469 | f = purple_request_fields_get_field(fields, "mood_jealous"); |
| 470 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 471 | mask |= SILC_ATTRIBUTE_MOOD_JEALOUS; |
| 15884 | 472 | f = purple_request_fields_get_field(fields, "mood_ashamed"); |
| 473 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 474 | mask |= SILC_ATTRIBUTE_MOOD_ASHAMED; |
| 15884 | 475 | f = purple_request_fields_get_field(fields, "mood_invincible"); |
| 476 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 477 | mask |= SILC_ATTRIBUTE_MOOD_INVINCIBLE; |
| 15884 | 478 | f = purple_request_fields_get_field(fields, "mood_inlove"); |
| 479 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 480 | mask |= SILC_ATTRIBUTE_MOOD_INLOVE; |
| 15884 | 481 | f = purple_request_fields_get_field(fields, "mood_sleepy"); |
| 482 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 483 | mask |= SILC_ATTRIBUTE_MOOD_SLEEPY; |
| 15884 | 484 | f = purple_request_fields_get_field(fields, "mood_bored"); |
| 485 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 486 | mask |= SILC_ATTRIBUTE_MOOD_BORED; |
| 15884 | 487 | f = purple_request_fields_get_field(fields, "mood_excited"); |
| 488 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 489 | mask |= SILC_ATTRIBUTE_MOOD_EXCITED; |
| 15884 | 490 | f = purple_request_fields_get_field(fields, "mood_anxious"); |
| 491 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 492 | mask |= SILC_ATTRIBUTE_MOOD_ANXIOUS; |
| 493 | silc_client_attribute_add(client, conn, | |
| 494 | SILC_ATTRIBUTE_STATUS_MOOD, | |
| 495 | SILC_32_TO_PTR(mask), | |
| 496 | sizeof(SilcUInt32)); | |
| 497 | ||
| 498 | /* Set preferred contact */ | |
| 499 | mask = 0; | |
| 15884 | 500 | f = purple_request_fields_get_field(fields, "contact_chat"); |
| 501 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 502 | mask |= SILC_ATTRIBUTE_CONTACT_CHAT; |
| 15884 | 503 | f = purple_request_fields_get_field(fields, "contact_email"); |
| 504 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 505 | mask |= SILC_ATTRIBUTE_CONTACT_EMAIL; |
| 15884 | 506 | f = purple_request_fields_get_field(fields, "contact_call"); |
| 507 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 508 | mask |= SILC_ATTRIBUTE_CONTACT_CALL; |
| 15884 | 509 | f = purple_request_fields_get_field(fields, "contact_sms"); |
| 510 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 511 | mask |= SILC_ATTRIBUTE_CONTACT_SMS; |
| 15884 | 512 | f = purple_request_fields_get_field(fields, "contact_mms"); |
| 513 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 514 | mask |= SILC_ATTRIBUTE_CONTACT_MMS; |
| 15884 | 515 | f = purple_request_fields_get_field(fields, "contact_video"); |
| 516 | if (f && purple_request_field_bool_get_value(f)) | |
| 8849 | 517 | mask |= SILC_ATTRIBUTE_CONTACT_VIDEO; |
| 518 | if (mask) | |
| 519 | silc_client_attribute_add(client, conn, | |
| 520 | SILC_ATTRIBUTE_PREFERRED_CONTACT, | |
| 521 | SILC_32_TO_PTR(mask), | |
| 522 | sizeof(SilcUInt32)); | |
| 523 | ||
| 524 | /* Set status text */ | |
| 525 | val = NULL; | |
| 15884 | 526 | f = purple_request_fields_get_field(fields, "status_text"); |
| 8849 | 527 | if (f) |
| 15884 | 528 | val = purple_request_field_string_get_value(f); |
| 8849 | 529 | if (val && *val) |
| 530 | silc_client_attribute_add(client, conn, | |
| 531 | SILC_ATTRIBUTE_STATUS_FREETEXT, | |
| 532 | (void *)val, strlen(val)); | |
| 533 | ||
| 534 | /* Set vcard */ | |
| 535 | val = NULL; | |
| 15884 | 536 | f = purple_request_fields_get_field(fields, "vcard"); |
| 8849 | 537 | if (f) |
| 15884 | 538 | val = purple_request_field_string_get_value(f); |
| 8849 | 539 | if (val && *val) { |
| 15884 | 540 | purple_account_set_string(sg->account, "vcard", val); |
| 8849 | 541 | tmp = silc_file_readfile(val, &tmp_len); |
| 542 | if (tmp) { | |
| 543 | tmp[tmp_len] = 0; | |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11257
diff
changeset
|
544 | if (silc_vcard_decode((unsigned char *)tmp, tmp_len, &vcard)) |
| 8849 | 545 | silc_client_attribute_add(client, conn, |
| 546 | SILC_ATTRIBUTE_USER_INFO, | |
| 547 | (void *)&vcard, | |
| 548 | sizeof(vcard)); | |
| 549 | } | |
| 550 | silc_vcard_free(&vcard); | |
| 551 | silc_free(tmp); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
552 | } else { |
| 15884 | 553 | purple_account_set_string(sg->account, "vcard", ""); |
| 8849 | 554 | } |
| 555 | ||
| 556 | #ifdef HAVE_SYS_UTSNAME_H | |
| 557 | /* Set device info */ | |
| 15884 | 558 | f = purple_request_fields_get_field(fields, "device"); |
| 559 | if (f && purple_request_field_bool_get_value(f)) { | |
| 8849 | 560 | struct utsname u; |
| 561 | if (!uname(&u)) { | |
| 562 | dev.type = SILC_ATTRIBUTE_DEVICE_COMPUTER; | |
| 563 | dev.version = u.release; | |
| 564 | dev.model = u.sysname; | |
| 565 | silc_client_attribute_add(client, conn, | |
| 566 | SILC_ATTRIBUTE_DEVICE_INFO, | |
| 567 | (void *)&dev, sizeof(dev)); | |
| 568 | } | |
| 569 | } | |
| 570 | #endif | |
| 571 | ||
| 572 | /* Set timezone */ | |
| 573 | val = NULL; | |
| 15884 | 574 | f = purple_request_fields_get_field(fields, "timezone"); |
| 8849 | 575 | if (f) |
| 15884 | 576 | val = purple_request_field_string_get_value(f); |
| 8849 | 577 | if (val && *val) |
| 578 | silc_client_attribute_add(client, conn, | |
| 579 | SILC_ATTRIBUTE_TIMEZONE, | |
| 580 | (void *)val, strlen(val)); | |
| 581 | } | |
| 582 | ||
| 583 | static void | |
| 15884 | 584 | silcpurple_attrs(PurplePluginAction *action) |
| 8849 | 585 | { |
| 15884 | 586 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 587 | SilcPurple sg = gc->proto_data; | |
| 8849 | 588 | SilcClient client = sg->client; |
| 589 | SilcClientConnection conn = sg->conn; | |
| 15884 | 590 | PurpleRequestFields *fields; |
| 591 | PurpleRequestFieldGroup *g; | |
| 592 | PurpleRequestField *f; | |
| 8849 | 593 | SilcHashTable attrs; |
| 594 | SilcAttributePayload attr; | |
| 595 | gboolean mnormal = TRUE, mhappy = FALSE, msad = FALSE, | |
| 596 | mangry = FALSE, mjealous = FALSE, mashamed = FALSE, | |
| 597 | minvincible = FALSE, minlove = FALSE, msleepy = FALSE, | |
| 598 | mbored = FALSE, mexcited = FALSE, manxious = FALSE; | |
| 599 | gboolean cemail = FALSE, ccall = FALSE, csms = FALSE, | |
| 600 | cmms = FALSE, cchat = TRUE, cvideo = FALSE; | |
| 601 | gboolean device = TRUE; | |
| 602 | char status[1024]; | |
| 603 | ||
| 604 | sg = gc->proto_data; | |
| 605 | if (!sg) | |
| 606 | return; | |
| 607 | ||
| 608 | memset(status, 0, sizeof(status)); | |
| 609 | ||
| 610 | attrs = silc_client_attributes_get(client, conn); | |
| 611 | if (attrs) { | |
| 612 | if (silc_hash_table_find(attrs, | |
| 613 | SILC_32_TO_PTR(SILC_ATTRIBUTE_STATUS_MOOD), | |
| 614 | NULL, (void *)&attr)) { | |
| 615 | SilcUInt32 mood = 0; | |
| 616 | silc_attribute_get_object(attr, &mood, sizeof(mood)); | |
| 617 | mnormal = !mood; | |
| 618 | mhappy = (mood & SILC_ATTRIBUTE_MOOD_HAPPY); | |
| 619 | msad = (mood & SILC_ATTRIBUTE_MOOD_SAD); | |
| 620 | mangry = (mood & SILC_ATTRIBUTE_MOOD_ANGRY); | |
| 621 | mjealous = (mood & SILC_ATTRIBUTE_MOOD_JEALOUS); | |
| 622 | mashamed = (mood & SILC_ATTRIBUTE_MOOD_ASHAMED); | |
| 623 | minvincible = (mood & SILC_ATTRIBUTE_MOOD_INVINCIBLE); | |
| 624 | minlove = (mood & SILC_ATTRIBUTE_MOOD_INLOVE); | |
| 625 | msleepy = (mood & SILC_ATTRIBUTE_MOOD_SLEEPY); | |
| 626 | mbored = (mood & SILC_ATTRIBUTE_MOOD_BORED); | |
| 627 | mexcited = (mood & SILC_ATTRIBUTE_MOOD_EXCITED); | |
| 628 | manxious = (mood & SILC_ATTRIBUTE_MOOD_ANXIOUS); | |
| 629 | } | |
| 630 | ||
| 631 | if (silc_hash_table_find(attrs, | |
| 632 | SILC_32_TO_PTR(SILC_ATTRIBUTE_PREFERRED_CONTACT), | |
| 633 | NULL, (void *)&attr)) { | |
| 634 | SilcUInt32 contact = 0; | |
| 635 | silc_attribute_get_object(attr, &contact, sizeof(contact)); | |
| 636 | cemail = (contact & SILC_ATTRIBUTE_CONTACT_EMAIL); | |
| 637 | ccall = (contact & SILC_ATTRIBUTE_CONTACT_CALL); | |
| 638 | csms = (contact & SILC_ATTRIBUTE_CONTACT_SMS); | |
| 639 | cmms = (contact & SILC_ATTRIBUTE_CONTACT_MMS); | |
| 640 | cchat = (contact & SILC_ATTRIBUTE_CONTACT_CHAT); | |
| 641 | cvideo = (contact & SILC_ATTRIBUTE_CONTACT_VIDEO); | |
| 642 | } | |
| 643 | ||
| 644 | if (silc_hash_table_find(attrs, | |
| 645 | SILC_32_TO_PTR(SILC_ATTRIBUTE_STATUS_FREETEXT), | |
| 646 | NULL, (void *)&attr)) | |
| 647 | silc_attribute_get_object(attr, &status, sizeof(status)); | |
| 648 | ||
| 649 | if (!silc_hash_table_find(attrs, | |
| 650 | SILC_32_TO_PTR(SILC_ATTRIBUTE_DEVICE_INFO), | |
| 651 | NULL, (void *)&attr)) | |
| 652 | device = FALSE; | |
| 653 | } | |
| 654 | ||
| 15884 | 655 | fields = purple_request_fields_new(); |
| 8849 | 656 | |
| 15884 | 657 | g = purple_request_field_group_new(NULL); |
| 658 | f = purple_request_field_label_new("l3", _("Your Current Mood")); | |
| 659 | purple_request_field_group_add_field(g, f); | |
| 660 | f = purple_request_field_bool_new("mood_normal", _("Normal"), mnormal); | |
| 661 | purple_request_field_group_add_field(g, f); | |
| 662 | f = purple_request_field_bool_new("mood_happy", _("Happy"), mhappy); | |
| 663 | purple_request_field_group_add_field(g, f); | |
| 664 | f = purple_request_field_bool_new("mood_sad", _("Sad"), msad); | |
| 665 | purple_request_field_group_add_field(g, f); | |
| 666 | f = purple_request_field_bool_new("mood_angry", _("Angry"), mangry); | |
| 667 | purple_request_field_group_add_field(g, f); | |
| 668 | f = purple_request_field_bool_new("mood_jealous", _("Jealous"), mjealous); | |
| 669 | purple_request_field_group_add_field(g, f); | |
| 670 | f = purple_request_field_bool_new("mood_ashamed", _("Ashamed"), mashamed); | |
| 671 | purple_request_field_group_add_field(g, f); | |
| 672 | f = purple_request_field_bool_new("mood_invincible", _("Invincible"), minvincible); | |
| 673 | purple_request_field_group_add_field(g, f); | |
| 674 | f = purple_request_field_bool_new("mood_inlove", _("In love"), minlove); | |
| 675 | purple_request_field_group_add_field(g, f); | |
| 676 | f = purple_request_field_bool_new("mood_sleepy", _("Sleepy"), msleepy); | |
| 677 | purple_request_field_group_add_field(g, f); | |
| 678 | f = purple_request_field_bool_new("mood_bored", _("Bored"), mbored); | |
| 679 | purple_request_field_group_add_field(g, f); | |
| 680 | f = purple_request_field_bool_new("mood_excited", _("Excited"), mexcited); | |
| 681 | purple_request_field_group_add_field(g, f); | |
| 682 | f = purple_request_field_bool_new("mood_anxious", _("Anxious"), manxious); | |
| 683 | purple_request_field_group_add_field(g, f); | |
| 8849 | 684 | |
| 15884 | 685 | f = purple_request_field_label_new("l4", _("\nYour Preferred Contact Methods")); |
| 686 | purple_request_field_group_add_field(g, f); | |
| 687 | f = purple_request_field_bool_new("contact_chat", _("Chat"), cchat); | |
| 688 | purple_request_field_group_add_field(g, f); | |
| 689 | f = purple_request_field_bool_new("contact_email", _("E-mail"), cemail); | |
| 690 | purple_request_field_group_add_field(g, f); | |
| 691 | f = purple_request_field_bool_new("contact_call", _("Phone"), ccall); | |
| 692 | purple_request_field_group_add_field(g, f); | |
| 693 | f = purple_request_field_bool_new("contact_sms", _("SMS"), csms); | |
| 694 | purple_request_field_group_add_field(g, f); | |
| 695 | f = purple_request_field_bool_new("contact_mms", _("MMS"), cmms); | |
| 696 | purple_request_field_group_add_field(g, f); | |
| 697 | f = purple_request_field_bool_new("contact_video", _("Video conferencing"), cvideo); | |
| 698 | purple_request_field_group_add_field(g, f); | |
| 699 | purple_request_fields_add_group(fields, g); | |
| 8849 | 700 | |
| 15884 | 701 | g = purple_request_field_group_new(NULL); |
| 702 | f = purple_request_field_string_new("status_text", _("Your Current Status"), | |
| 8849 | 703 | status[0] ? status : NULL, TRUE); |
| 15884 | 704 | purple_request_field_group_add_field(g, f); |
| 705 | purple_request_fields_add_group(fields, g); | |
| 8849 | 706 | |
| 15884 | 707 | g = purple_request_field_group_new(NULL); |
| 8849 | 708 | #if 0 |
| 15884 | 709 | f = purple_request_field_label_new("l2", _("Online Services")); |
| 710 | purple_request_field_group_add_field(g, f); | |
| 711 | f = purple_request_field_bool_new("services", | |
| 8849 | 712 | _("Let others see what services you are using"), |
| 713 | TRUE); | |
| 15884 | 714 | purple_request_field_group_add_field(g, f); |
| 8849 | 715 | #endif |
| 716 | #ifdef HAVE_SYS_UTSNAME_H | |
| 15884 | 717 | f = purple_request_field_bool_new("device", |
| 8849 | 718 | _("Let others see what computer you are using"), |
| 719 | device); | |
| 15884 | 720 | purple_request_field_group_add_field(g, f); |
| 8849 | 721 | #endif |
| 15884 | 722 | purple_request_fields_add_group(fields, g); |
| 8849 | 723 | |
| 15884 | 724 | g = purple_request_field_group_new(NULL); |
| 725 | f = purple_request_field_string_new("vcard", _("Your VCard File"), | |
| 726 | purple_account_get_string(sg->account, "vcard", ""), | |
| 8849 | 727 | FALSE); |
| 15884 | 728 | purple_request_field_group_add_field(g, f); |
| 8849 | 729 | #ifdef _WIN32 |
| 15884 | 730 | f = purple_request_field_string_new("timezone", _("Timezone"), _tzname[0], FALSE); |
| 8849 | 731 | #else |
| 15884 | 732 | f = purple_request_field_string_new("timezone", _("Timezone"), tzname[0], FALSE); |
| 8849 | 733 | #endif |
| 15884 | 734 | purple_request_field_group_add_field(g, f); |
| 735 | purple_request_fields_add_group(fields, g); | |
| 8849 | 736 | |
| 15884 | 737 | purple_request_fields(gc, _("User Online Status Attributes"), |
| 8849 | 738 | _("User Online Status Attributes"), |
| 739 | _("You can let other users see your online status information " | |
| 740 | "and your personal information. Please fill the information " | |
| 741 | "you would like other users to see about yourself."), | |
| 742 | fields, | |
| 15884 | 743 | _("OK"), G_CALLBACK(silcpurple_attrs_cb), |
|
16492
4f0dc2d16e55
Update SILC to match resent request API changes
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
744 | _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel), |
|
4f0dc2d16e55
Update SILC to match resent request API changes
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
745 | gc->account, NULL, NULL, gc); |
| 8849 | 746 | } |
| 747 | ||
| 748 | static void | |
| 15884 | 749 | silcpurple_detach(PurplePluginAction *action) |
| 8849 | 750 | { |
| 15884 | 751 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 752 | SilcPurple sg; | |
| 8849 | 753 | |
| 754 | if (!gc) | |
| 755 | return; | |
| 756 | sg = gc->proto_data; | |
| 757 | if (!sg) | |
| 758 | return; | |
| 759 | ||
| 760 | /* Call DETACH */ | |
| 761 | silc_client_command_call(sg->client, sg->conn, "DETACH"); | |
| 762 | sg->detaching = TRUE; | |
| 763 | } | |
| 764 | ||
| 765 | static void | |
| 15884 | 766 | silcpurple_view_motd(PurplePluginAction *action) |
| 8849 | 767 | { |
| 15884 | 768 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 769 | SilcPurple sg; | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
770 | char *tmp; |
| 8849 | 771 | |
| 772 | if (!gc) | |
| 773 | return; | |
| 774 | sg = gc->proto_data; | |
| 775 | if (!sg) | |
| 776 | return; | |
| 777 | ||
| 778 | if (!sg->motd) { | |
| 15884 | 779 | purple_notify_error( |
| 8849 | 780 | gc, _("Message of the Day"), _("No Message of the Day available"), |
| 781 | _("There is no Message of the Day associated with this connection")); | |
| 782 | return; | |
| 783 | } | |
| 784 | ||
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10547
diff
changeset
|
785 | tmp = g_markup_escape_text(sg->motd, -1); |
| 15884 | 786 | purple_notify_formatted(gc, NULL, _("Message of the Day"), NULL, |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
787 | tmp, NULL, NULL); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
788 | g_free(tmp); |
| 8849 | 789 | } |
| 790 | ||
| 9272 | 791 | static void |
| 15884 | 792 | silcpurple_create_keypair_cancel(PurpleConnection *gc, PurpleRequestFields *fields) |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
793 | { |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
794 | /* Nothing */ |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
795 | } |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
796 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
797 | static void |
| 15884 | 798 | silcpurple_create_keypair_cb(PurpleConnection *gc, PurpleRequestFields *fields) |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
799 | { |
| 15884 | 800 | SilcPurple sg = gc->proto_data; |
| 801 | PurpleRequestField *f; | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
802 | const char *val, *pkfile = NULL, *prfile = NULL; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
803 | const char *pass1 = NULL, *pass2 = NULL, *un = NULL, *hn = NULL; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
804 | const char *rn = NULL, *e = NULL, *o = NULL, *c = NULL; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
805 | char *identifier; |
| 15884 | 806 | int keylen = SILCPURPLE_DEF_PKCS_LEN; |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
807 | SilcPublicKey public_key; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
808 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
809 | sg = gc->proto_data; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
810 | if (!sg) |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
811 | return; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
812 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
813 | val = NULL; |
| 15884 | 814 | f = purple_request_fields_get_field(fields, "pass1"); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
815 | if (f) |
| 15884 | 816 | val = purple_request_field_string_get_value(f); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
817 | if (val && *val) |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
818 | pass1 = val; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
819 | else |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
820 | pass1 = ""; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
821 | val = NULL; |
| 15884 | 822 | f = purple_request_fields_get_field(fields, "pass2"); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
823 | if (f) |
| 15884 | 824 | val = purple_request_field_string_get_value(f); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
825 | if (val && *val) |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
826 | pass2 = val; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
827 | else |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
828 | pass2 = ""; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
829 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
830 | if (strcmp(pass1, pass2)) { |
| 15884 | 831 | purple_notify_error( |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
832 | gc, _("Create New SILC Key Pair"), _("Passphrases do not match"), NULL); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
833 | return; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
834 | } |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
835 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
836 | val = NULL; |
| 15884 | 837 | f = purple_request_fields_get_field(fields, "key"); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
838 | if (f) |
| 15884 | 839 | val = purple_request_field_string_get_value(f); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
840 | if (val && *val) |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
841 | keylen = atoi(val); |
| 15884 | 842 | f = purple_request_fields_get_field(fields, "pkfile"); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
843 | if (f) |
| 15884 | 844 | pkfile = purple_request_field_string_get_value(f); |
| 845 | f = purple_request_fields_get_field(fields, "prfile"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
846 | if (f) |
| 15884 | 847 | prfile = purple_request_field_string_get_value(f); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
848 | |
| 15884 | 849 | f = purple_request_fields_get_field(fields, "un"); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
850 | if (f) |
| 15884 | 851 | un = purple_request_field_string_get_value(f); |
| 852 | f = purple_request_fields_get_field(fields, "hn"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
853 | if (f) |
| 15884 | 854 | hn = purple_request_field_string_get_value(f); |
| 855 | f = purple_request_fields_get_field(fields, "rn"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
856 | if (f) |
| 15884 | 857 | rn = purple_request_field_string_get_value(f); |
| 858 | f = purple_request_fields_get_field(fields, "e"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
859 | if (f) |
| 15884 | 860 | e = purple_request_field_string_get_value(f); |
| 861 | f = purple_request_fields_get_field(fields, "o"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
862 | if (f) |
| 15884 | 863 | o = purple_request_field_string_get_value(f); |
| 864 | f = purple_request_fields_get_field(fields, "c"); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
865 | if (f) |
| 15884 | 866 | c = purple_request_field_string_get_value(f); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
867 | |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
868 | identifier = silc_pkcs_encode_identifier((char *)un, (char *)hn, |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
869 | (char *)rn, (char *)e, (char *)o, (char *)c); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
870 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
871 | /* Create the key pair */ |
| 15884 | 872 | if (!silc_create_key_pair(SILCPURPLE_DEF_PKCS, keylen, pkfile, prfile, |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
873 | identifier, pass1, NULL, &public_key, NULL, |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
874 | FALSE)) { |
| 15884 | 875 | purple_notify_error( |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
876 | gc, _("Create New SILC Key Pair"), _("Key Pair Generation failed"), NULL); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
877 | return; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
878 | } |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
879 | |
| 15884 | 880 | silcpurple_show_public_key(sg, NULL, public_key, NULL, NULL); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
881 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
882 | silc_pkcs_public_key_free(public_key); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
883 | silc_free(identifier); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
884 | } |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
885 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
886 | static void |
| 15884 | 887 | silcpurple_create_keypair(PurplePluginAction *action) |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
888 | { |
| 15884 | 889 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 890 | SilcPurple sg = gc->proto_data; | |
| 891 | PurpleRequestFields *fields; | |
| 892 | PurpleRequestFieldGroup *g; | |
| 893 | PurpleRequestField *f; | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
894 | const char *username, *realname; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
895 | char *hostname, **u; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
896 | char tmp[256], pkd[256], pkd2[256], prd[256], prd2[256]; |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
897 | |
| 15884 | 898 | username = purple_account_get_username(sg->account); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
899 | u = g_strsplit(username, "@", 2); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
900 | username = u[0]; |
| 15884 | 901 | realname = purple_account_get_user_info(sg->account); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
902 | hostname = silc_net_localhost(); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
903 | g_snprintf(tmp, sizeof(tmp), "%s@%s", username, hostname); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
904 | |
| 15884 | 905 | g_snprintf(pkd2, sizeof(pkd2), "%s" G_DIR_SEPARATOR_S"public_key.pub", silcpurple_silcdir()); |
| 906 | g_snprintf(prd2, sizeof(prd2), "%s" G_DIR_SEPARATOR_S"private_key.prv", silcpurple_silcdir()); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
907 | g_snprintf(pkd, sizeof(pkd) - 1, "%s", |
| 15884 | 908 | purple_account_get_string(gc->account, "public-key", pkd2)); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
909 | g_snprintf(prd, sizeof(prd) - 1, "%s", |
| 15884 | 910 | purple_account_get_string(gc->account, "private-key", prd2)); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
911 | |
| 15884 | 912 | fields = purple_request_fields_new(); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
913 | |
| 15884 | 914 | g = purple_request_field_group_new(NULL); |
| 915 | f = purple_request_field_string_new("key", _("Key length"), "2048", FALSE); | |
| 916 | purple_request_field_group_add_field(g, f); | |
| 917 | f = purple_request_field_string_new("pkfile", _("Public key file"), pkd, FALSE); | |
| 918 | purple_request_field_group_add_field(g, f); | |
| 919 | f = purple_request_field_string_new("prfile", _("Private key file"), prd, FALSE); | |
| 920 | purple_request_field_group_add_field(g, f); | |
| 921 | purple_request_fields_add_group(fields, g); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
922 | |
| 15884 | 923 | g = purple_request_field_group_new(NULL); |
| 924 | f = purple_request_field_string_new("un", _("Username"), username ? username : "", FALSE); | |
| 925 | purple_request_field_group_add_field(g, f); | |
| 926 | f = purple_request_field_string_new("hn", _("Hostname"), hostname ? hostname : "", FALSE); | |
| 927 | purple_request_field_group_add_field(g, f); | |
| 928 | f = purple_request_field_string_new("rn", _("Real name"), realname ? realname : "", FALSE); | |
| 929 | purple_request_field_group_add_field(g, f); | |
| 930 | f = purple_request_field_string_new("e", _("E-mail"), tmp, FALSE); | |
| 931 | purple_request_field_group_add_field(g, f); | |
| 932 | f = purple_request_field_string_new("o", _("Organization"), "", FALSE); | |
| 933 | purple_request_field_group_add_field(g, f); | |
| 934 | f = purple_request_field_string_new("c", _("Country"), "", FALSE); | |
| 935 | purple_request_field_group_add_field(g, f); | |
| 936 | purple_request_fields_add_group(fields, g); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
937 | |
| 15884 | 938 | g = purple_request_field_group_new(NULL); |
| 939 | f = purple_request_field_string_new("pass1", _("Passphrase"), "", FALSE); | |
| 940 | purple_request_field_string_set_masked(f, TRUE); | |
| 941 | purple_request_field_group_add_field(g, f); | |
| 942 | f = purple_request_field_string_new("pass2", _("Passphrase (retype)"), "", FALSE); | |
| 943 | purple_request_field_string_set_masked(f, TRUE); | |
| 944 | purple_request_field_group_add_field(g, f); | |
| 945 | purple_request_fields_add_group(fields, g); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
946 | |
| 15884 | 947 | purple_request_fields(gc, _("Create New SILC Key Pair"), |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
948 | _("Create New SILC Key Pair"), NULL, fields, |
| 15884 | 949 | _("Generate Key Pair"), G_CALLBACK(silcpurple_create_keypair_cb), |
|
16492
4f0dc2d16e55
Update SILC to match resent request API changes
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
950 | _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel), |
|
4f0dc2d16e55
Update SILC to match resent request API changes
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
951 | gc->account, NULL, NULL, gc); |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
952 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
953 | g_strfreev(u); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
954 | silc_free(hostname); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
955 | } |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
956 | |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
957 | static void |
| 15884 | 958 | silcpurple_change_pass(PurplePluginAction *action) |
| 9272 | 959 | { |
| 15884 | 960 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 961 | purple_account_request_change_password(purple_connection_get_account(gc)); | |
| 9272 | 962 | } |
| 963 | ||
| 964 | static void | |
| 15884 | 965 | silcpurple_change_passwd(PurpleConnection *gc, const char *old, const char *new) |
| 9272 | 966 | { |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
967 | char prd[256]; |
| 15884 | 968 | g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.pub", silcpurple_silcdir()); |
| 969 | silc_change_private_key_passphrase(purple_account_get_string(gc->account, | |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
970 | "private-key", |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
971 | prd), old, new); |
| 9272 | 972 | } |
| 973 | ||
| 974 | static void | |
| 15884 | 975 | silcpurple_show_set_info(PurplePluginAction *action) |
| 9272 | 976 | { |
| 15884 | 977 | PurpleConnection *gc = (PurpleConnection *) action->context; |
| 978 | purple_account_request_change_user_info(purple_connection_get_account(gc)); | |
| 9272 | 979 | } |
| 980 | ||
| 981 | static void | |
| 15884 | 982 | silcpurple_set_info(PurpleConnection *gc, const char *text) |
| 9272 | 983 | { |
| 984 | } | |
| 985 | ||
| 8849 | 986 | static GList * |
| 15884 | 987 | silcpurple_actions(PurplePlugin *plugin, gpointer context) |
| 8849 | 988 | { |
| 15884 | 989 | PurpleConnection *gc = context; |
| 8849 | 990 | GList *list = NULL; |
| 15884 | 991 | PurplePluginAction *act; |
| 8849 | 992 | |
| 15884 | 993 | if (!purple_account_get_bool(gc->account, "reject-attrs", FALSE)) { |
| 994 | act = purple_plugin_action_new(_("Online Status"), | |
| 995 | silcpurple_attrs); | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
8993
diff
changeset
|
996 | list = g_list_append(list, act); |
| 8849 | 997 | } |
| 998 | ||
| 15884 | 999 | act = purple_plugin_action_new(_("Detach From Server"), |
| 1000 | silcpurple_detach); | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
8993
diff
changeset
|
1001 | list = g_list_append(list, act); |
| 8849 | 1002 | |
| 15884 | 1003 | act = purple_plugin_action_new(_("View Message of the Day"), |
| 1004 | silcpurple_view_motd); | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
8993
diff
changeset
|
1005 | list = g_list_append(list, act); |
| 8849 | 1006 | |
| 15884 | 1007 | act = purple_plugin_action_new(_("Create SILC Key Pair..."), |
| 1008 | silcpurple_create_keypair); | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1009 | list = g_list_append(list, act); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1010 | |
| 15884 | 1011 | act = purple_plugin_action_new(_("Change Password..."), |
| 1012 | silcpurple_change_pass); | |
| 9272 | 1013 | list = g_list_append(list, act); |
| 1014 | ||
| 15884 | 1015 | act = purple_plugin_action_new(_("Set User Info..."), |
| 1016 | silcpurple_show_set_info); | |
| 9272 | 1017 | list = g_list_append(list, act); |
| 1018 | ||
| 8849 | 1019 | return list; |
| 1020 | } | |
| 1021 | ||
| 1022 | ||
| 1023 | /******************************* IM Routines *********************************/ | |
| 1024 | ||
| 1025 | typedef struct { | |
| 1026 | char *nick; | |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11257
diff
changeset
|
1027 | char *message; |
| 8849 | 1028 | SilcUInt32 message_len; |
| 1029 | SilcMessageFlags flags; | |
| 15884 | 1030 | PurpleMessageFlags gflags; |
| 1031 | } *SilcPurpleIM; | |
| 8849 | 1032 | |
| 1033 | static void | |
| 15884 | 1034 | silcpurple_send_im_resolved(SilcClient client, |
| 8849 | 1035 | SilcClientConnection conn, |
| 1036 | SilcClientEntry *clients, | |
| 1037 | SilcUInt32 clients_count, | |
| 1038 | void *context) | |
| 1039 | { | |
| 15884 | 1040 | PurpleConnection *gc = client->application; |
| 1041 | SilcPurple sg = gc->proto_data; | |
| 1042 | SilcPurpleIM im = context; | |
| 1043 | PurpleConversation *convo; | |
| 8849 | 1044 | char tmp[256], *nickname = NULL; |
| 1045 | SilcClientEntry client_entry; | |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1046 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1047 | SilcDList list; |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1048 | #endif |
| 8849 | 1049 | |
| 15884 | 1050 | convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, im->nick, |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10225
diff
changeset
|
1051 | sg->account); |
| 8849 | 1052 | if (!convo) |
| 1053 | return; | |
| 1054 | ||
| 1055 | if (!clients) | |
| 1056 | goto err; | |
| 1057 | ||
| 1058 | if (clients_count > 1) { | |
| 1059 | silc_parse_userfqdn(im->nick, &nickname, NULL); | |
| 1060 | ||
| 1061 | /* Find the correct one. The im->nick might be a formatted nick | |
| 1062 | so this will find the correct one. */ | |
| 1063 | clients = silc_client_get_clients_local(client, conn, | |
| 1064 | nickname, im->nick, | |
| 1065 | &clients_count); | |
| 1066 | if (!clients) | |
| 1067 | goto err; | |
| 1068 | client_entry = clients[0]; | |
| 1069 | silc_free(clients); | |
| 1070 | } else { | |
| 1071 | client_entry = clients[0]; | |
| 1072 | } | |
| 1073 | ||
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1074 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1075 | /* Check for images */ |
| 15884 | 1076 | if (im->gflags & PURPLE_MESSAGE_IMAGES) { |
| 1077 | list = silcpurple_image_message(im->message, (SilcUInt32 *)&im->flags); | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1078 | if (list) { |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1079 | /* Send one or more MIME message. If more than one, they |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1080 | are MIME fragments due to over large message */ |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1081 | SilcBuffer buf; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1082 | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1083 | silc_dlist_start(list); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1084 | while ((buf = silc_dlist_get(list)) != SILC_LIST_END) |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1085 | silc_client_send_private_message(client, conn, |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1086 | client_entry, im->flags, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1087 | buf->data, buf->len, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1088 | TRUE); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1089 | silc_mime_partial_free(list); |
| 15884 | 1090 | purple_conv_im_write(PURPLE_CONV_IM(convo), conn->local_entry->nickname, |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1091 | im->message, 0, time(NULL)); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1092 | goto out; |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1093 | } |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1094 | } |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1095 | #endif |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1096 | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1097 | /* Send the message */ |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1098 | silc_client_send_private_message(client, conn, client_entry, im->flags, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1099 | (unsigned char *)im->message, im->message_len, TRUE); |
| 15884 | 1100 | purple_conv_im_write(PURPLE_CONV_IM(convo), conn->local_entry->nickname, |
| 8849 | 1101 | im->message, 0, time(NULL)); |
| 1102 | goto out; | |
| 1103 | ||
| 1104 | err: | |
| 1105 | g_snprintf(tmp, sizeof(tmp), | |
| 1106 | _("User <I>%s</I> is not present in the network"), im->nick); | |
| 15884 | 1107 | purple_conversation_write(convo, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| 8849 | 1108 | |
| 1109 | out: | |
| 1110 | g_free(im->nick); | |
| 1111 | g_free(im->message); | |
| 1112 | silc_free(im); | |
| 1113 | silc_free(nickname); | |
| 1114 | } | |
| 1115 | ||
| 1116 | static int | |
| 15884 | 1117 | silcpurple_send_im(PurpleConnection *gc, const char *who, const char *message, |
| 1118 | PurpleMessageFlags flags) | |
| 8849 | 1119 | { |
| 15884 | 1120 | SilcPurple sg = gc->proto_data; |
| 8849 | 1121 | SilcClient client = sg->client; |
| 1122 | SilcClientConnection conn = sg->conn; | |
| 1123 | SilcClientEntry *clients; | |
| 1124 | SilcUInt32 clients_count, mflags; | |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1125 | char *nickname, *msg, *tmp; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1126 | int ret = 0; |
| 15884 | 1127 | gboolean sign = purple_account_get_bool(sg->account, "sign-verify", FALSE); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1128 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1129 | SilcDList list; |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1130 | #endif |
| 8849 | 1131 | |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1132 | if (!who || !message) |
| 8849 | 1133 | return 0; |
| 1134 | ||
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1135 | mflags = SILC_MESSAGE_FLAG_UTF8; |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1136 | |
| 15884 | 1137 | tmp = msg = purple_unescape_html(message); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1138 | |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1139 | if (!g_ascii_strncasecmp(msg, "/me ", 4)) { |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1140 | msg += 4; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1141 | if (!*msg) { |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1142 | g_free(tmp); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1143 | return 0; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1144 | } |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1145 | mflags |= SILC_MESSAGE_FLAG_ACTION; |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1146 | } else if (strlen(msg) > 1 && msg[0] == '/') { |
| 8849 | 1147 | if (!silc_client_command_call(client, conn, msg + 1)) |
| 15884 | 1148 | purple_notify_error(gc, _("Call Command"), _("Cannot call command"), |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1149 | _("Unknown command")); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1150 | g_free(tmp); |
| 8849 | 1151 | return 0; |
| 1152 | } | |
| 1153 | ||
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1154 | |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1155 | if (!silc_parse_userfqdn(who, &nickname, NULL)) { |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1156 | g_free(tmp); |
| 8849 | 1157 | return 0; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1158 | } |
| 8849 | 1159 | |
| 1160 | if (sign) | |
| 1161 | mflags |= SILC_MESSAGE_FLAG_SIGNED; | |
| 1162 | ||
| 1163 | /* Find client entry */ | |
| 1164 | clients = silc_client_get_clients_local(client, conn, nickname, who, | |
| 1165 | &clients_count); | |
| 1166 | if (!clients) { | |
| 1167 | /* Resolve unknown user */ | |
| 15884 | 1168 | SilcPurpleIM im = silc_calloc(1, sizeof(*im)); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1169 | if (!im) { |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1170 | g_free(tmp); |
| 8849 | 1171 | return 0; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1172 | } |
| 8849 | 1173 | im->nick = g_strdup(who); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1174 | im->message = g_strdup(message); |
| 8849 | 1175 | im->message_len = strlen(im->message); |
| 1176 | im->flags = mflags; | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1177 | im->gflags = flags; |
| 8849 | 1178 | silc_client_get_clients(client, conn, nickname, NULL, |
| 15884 | 1179 | silcpurple_send_im_resolved, im); |
| 8849 | 1180 | silc_free(nickname); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1181 | g_free(tmp); |
| 8849 | 1182 | return 0; |
| 1183 | } | |
| 1184 | ||
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1185 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1186 | /* Check for images */ |
| 15884 | 1187 | if (flags & PURPLE_MESSAGE_IMAGES) { |
| 1188 | list = silcpurple_image_message(message, &mflags); | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1189 | if (list) { |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1190 | /* Send one or more MIME message. If more than one, they |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1191 | are MIME fragments due to over large message */ |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1192 | SilcBuffer buf; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1193 | |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1194 | silc_dlist_start(list); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1195 | while ((buf = silc_dlist_get(list)) != SILC_LIST_END) |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1196 | ret = |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1197 | silc_client_send_private_message(client, conn, |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1198 | clients[0], mflags, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1199 | buf->data, buf->len, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1200 | TRUE); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1201 | silc_mime_partial_free(list); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1202 | g_free(tmp); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1203 | silc_free(nickname); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1204 | silc_free(clients); |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1205 | return ret; |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1206 | } |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1207 | } |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1208 | #endif |
|
12303
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1209 | |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1210 | /* Send private message directly */ |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1211 | ret = silc_client_send_private_message(client, conn, clients[0], |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1212 | mflags, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1213 | (unsigned char *)msg, |
|
f2b594862195
[gaim-migrate @ 14607]
Pekka Riikonen <priikone@silcnet.org>
parents:
12217
diff
changeset
|
1214 | strlen(msg), TRUE); |
| 8849 | 1215 | |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12167
diff
changeset
|
1216 | g_free(tmp); |
| 8849 | 1217 | silc_free(nickname); |
| 1218 | silc_free(clients); | |
| 1219 | return ret; | |
| 1220 | } | |
| 1221 | ||
| 1222 | ||
| 15884 | 1223 | static GList *silcpurple_blist_node_menu(PurpleBlistNode *node) { |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1224 | /* split this single menu building function back into the two |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1225 | original: one for buddies and one for chats */ |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1226 | |
| 15884 | 1227 | if(PURPLE_BLIST_NODE_IS_CHAT(node)) { |
| 1228 | return silcpurple_chat_menu((PurpleChat *) node); | |
| 1229 | } else if(PURPLE_BLIST_NODE_IS_BUDDY(node)) { | |
| 1230 | return silcpurple_buddy_menu((PurpleBuddy *) node); | |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1231 | } else { |
| 9038 | 1232 | g_return_val_if_reached(NULL); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1233 | } |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1234 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1235 | |
| 9272 | 1236 | /********************************* Commands **********************************/ |
| 1237 | ||
| 15884 | 1238 | static PurpleCmdRet silcpurple_cmd_chat_part(PurpleConversation *conv, |
| 9597 | 1239 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1240 | { |
| 15884 | 1241 | PurpleConnection *gc; |
| 1242 | PurpleConversation *convo = conv; | |
| 9272 | 1243 | int id = 0; |
| 1244 | ||
| 15884 | 1245 | gc = purple_conversation_get_gc(conv); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1246 | |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1247 | if (gc == NULL) |
| 15884 | 1248 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1249 | |
|
13636
7f3119845b45
[gaim-migrate @ 16033]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13546
diff
changeset
|
1250 | if(args && args[0]) |
| 15884 | 1251 | convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10225
diff
changeset
|
1252 | gc->account); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1253 | |
|
13636
7f3119845b45
[gaim-migrate @ 16033]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13546
diff
changeset
|
1254 | if (convo != NULL) |
| 15884 | 1255 | id = purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1256 | |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1257 | if (id == 0) |
| 15884 | 1258 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1259 | |
| 15884 | 1260 | silcpurple_chat_leave(gc, id); |
| 9272 | 1261 | |
| 15884 | 1262 | return PURPLE_CMD_RET_OK; |
| 9272 | 1263 | |
| 1264 | } | |
| 1265 | ||
| 15884 | 1266 | static PurpleCmdRet silcpurple_cmd_chat_topic(PurpleConversation *conv, |
| 9597 | 1267 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1268 | { |
| 15884 | 1269 | PurpleConnection *gc; |
| 9272 | 1270 | int id = 0; |
| 9762 | 1271 | char *buf, *tmp, *tmp2; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1272 | const char *topic; |
| 9272 | 1273 | |
| 15884 | 1274 | gc = purple_conversation_get_gc(conv); |
| 1275 | id = purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv)); | |
| 9272 | 1276 | |
| 1277 | if (gc == NULL || id == 0) | |
| 15884 | 1278 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1279 | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1280 | if (!args || !args[0]) { |
| 15884 | 1281 | topic = purple_conv_chat_get_topic (PURPLE_CONV_CHAT(conv)); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1282 | if (topic) { |
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10547
diff
changeset
|
1283 | tmp = g_markup_escape_text(topic, -1); |
| 15884 | 1284 | tmp2 = purple_markup_linkify(tmp); |
| 9762 | 1285 | buf = g_strdup_printf(_("current topic is: %s"), tmp2); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1286 | g_free(tmp); |
| 9762 | 1287 | g_free(tmp2); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1288 | } else |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1289 | buf = g_strdup(_("No topic is set")); |
| 15884 | 1290 | purple_conv_chat_write(PURPLE_CONV_CHAT(conv), gc->account->username, buf, |
| 1291 | PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1292 | g_free(buf); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1293 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1294 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1295 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1296 | if (args && args[0] && (strlen(args[0]) > 255)) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1297 | *error = g_strdup(_("Topic too long")); |
| 15884 | 1298 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1299 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1300 | |
| 15884 | 1301 | silcpurple_chat_set_topic(gc, id, args ? args[0] : NULL); |
| 9272 | 1302 | |
| 15884 | 1303 | return PURPLE_CMD_RET_OK; |
| 9272 | 1304 | } |
| 1305 | ||
| 15884 | 1306 | static PurpleCmdRet silcpurple_cmd_chat_join(PurpleConversation *conv, |
| 9597 | 1307 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1308 | { |
| 1309 | GHashTable *comp; | |
| 1310 | ||
| 1311 | if(!args || !args[0]) | |
| 15884 | 1312 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1313 | |
| 1314 | comp = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); | |
| 1315 | ||
| 1316 | g_hash_table_replace(comp, "channel", args[0]); | |
| 1317 | if(args[1]) | |
| 1318 | g_hash_table_replace(comp, "passphrase", args[1]); | |
| 1319 | ||
| 15884 | 1320 | silcpurple_chat_join(purple_conversation_get_gc(conv), comp); |
| 9272 | 1321 | |
| 1322 | g_hash_table_destroy(comp); | |
| 15884 | 1323 | return PURPLE_CMD_RET_OK; |
| 9272 | 1324 | } |
| 1325 | ||
| 15884 | 1326 | static PurpleCmdRet silcpurple_cmd_chat_list(PurpleConversation *conv, |
| 9597 | 1327 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1328 | { |
| 15884 | 1329 | PurpleConnection *gc; |
| 1330 | gc = purple_conversation_get_gc(conv); | |
| 1331 | purple_roomlist_show_with_account(purple_connection_get_account(gc)); | |
| 1332 | return PURPLE_CMD_RET_OK; | |
| 9272 | 1333 | } |
| 1334 | ||
| 15884 | 1335 | static PurpleCmdRet silcpurple_cmd_whois(PurpleConversation *conv, |
| 9597 | 1336 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1337 | { |
| 15884 | 1338 | PurpleConnection *gc; |
| 9272 | 1339 | |
| 15884 | 1340 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1341 | |
| 1342 | if (gc == NULL) | |
| 15884 | 1343 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1344 | |
| 15884 | 1345 | silcpurple_get_info(gc, args[0]); |
| 9272 | 1346 | |
| 15884 | 1347 | return PURPLE_CMD_RET_OK; |
| 9272 | 1348 | } |
| 1349 | ||
| 15884 | 1350 | static PurpleCmdRet silcpurple_cmd_msg(PurpleConversation *conv, |
| 9597 | 1351 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1352 | { |
| 1353 | int ret; | |
| 15884 | 1354 | PurpleConnection *gc; |
| 9272 | 1355 | |
| 15884 | 1356 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1357 | |
| 1358 | if (gc == NULL) | |
| 15884 | 1359 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1360 | |
| 15884 | 1361 | ret = silcpurple_send_im(gc, args[0], args[1], PURPLE_MESSAGE_SEND); |
| 9272 | 1362 | |
| 1363 | if (ret) | |
| 15884 | 1364 | return PURPLE_CMD_RET_OK; |
| 9272 | 1365 | else |
| 15884 | 1366 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1367 | } |
| 1368 | ||
| 15884 | 1369 | static PurpleCmdRet silcpurple_cmd_query(PurpleConversation *conv, |
| 9597 | 1370 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1371 | { |
| 1372 | int ret = 1; | |
| 15884 | 1373 | PurpleConversation *convo; |
| 1374 | PurpleConnection *gc; | |
| 1375 | PurpleAccount *account; | |
| 9272 | 1376 | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1377 | if (!args || !args[0]) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1378 | *error = g_strdup(_("You must specify a nick")); |
| 15884 | 1379 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1380 | } |
| 9272 | 1381 | |
| 15884 | 1382 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1383 | |
| 1384 | if (gc == NULL) | |
| 15884 | 1385 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1386 | |
| 15884 | 1387 | account = purple_connection_get_account(gc); |
| 9272 | 1388 | |
| 15884 | 1389 | convo = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, args[0]); |
| 9272 | 1390 | |
| 1391 | if (args[1]) { | |
| 15884 | 1392 | ret = silcpurple_send_im(gc, args[0], args[1], PURPLE_MESSAGE_SEND); |
| 1393 | purple_conv_im_write(PURPLE_CONV_IM(convo), purple_connection_get_display_name(gc), | |
| 1394 | args[1], PURPLE_MESSAGE_SEND, time(NULL)); | |
| 9272 | 1395 | } |
| 1396 | ||
| 1397 | if (ret) | |
| 15884 | 1398 | return PURPLE_CMD_RET_OK; |
| 9272 | 1399 | else |
| 15884 | 1400 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1401 | } |
| 1402 | ||
| 15884 | 1403 | static PurpleCmdRet silcpurple_cmd_motd(PurpleConversation *conv, |
| 9597 | 1404 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1405 | { |
| 15884 | 1406 | PurpleConnection *gc; |
| 1407 | SilcPurple sg; | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1408 | char *tmp; |
| 9272 | 1409 | |
| 15884 | 1410 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1411 | |
| 1412 | if (gc == NULL) | |
| 15884 | 1413 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1414 | |
| 1415 | sg = gc->proto_data; | |
| 1416 | ||
| 1417 | if (sg == NULL) | |
| 15884 | 1418 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1419 | |
| 1420 | if (!sg->motd) { | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1421 | *error = g_strdup(_("There is no Message of the Day associated with this connection")); |
| 15884 | 1422 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1423 | } |
| 1424 | ||
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10547
diff
changeset
|
1425 | tmp = g_markup_escape_text(sg->motd, -1); |
| 15884 | 1426 | purple_notify_formatted(gc, NULL, _("Message of the Day"), NULL, |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1427 | tmp, NULL, NULL); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1428 | g_free(tmp); |
| 9272 | 1429 | |
| 15884 | 1430 | return PURPLE_CMD_RET_OK; |
| 9272 | 1431 | } |
| 1432 | ||
| 15884 | 1433 | static PurpleCmdRet silcpurple_cmd_detach(PurpleConversation *conv, |
| 9597 | 1434 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1435 | { |
| 15884 | 1436 | PurpleConnection *gc; |
| 1437 | SilcPurple sg; | |
| 9272 | 1438 | |
| 15884 | 1439 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1440 | |
| 1441 | if (gc == NULL) | |
| 15884 | 1442 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1443 | |
| 1444 | sg = gc->proto_data; | |
| 1445 | ||
| 1446 | if (sg == NULL) | |
| 15884 | 1447 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1448 | |
| 1449 | silc_client_command_call(sg->client, sg->conn, "DETACH"); | |
| 1450 | sg->detaching = TRUE; | |
| 1451 | ||
| 15884 | 1452 | return PURPLE_CMD_RET_OK; |
| 9272 | 1453 | } |
| 1454 | ||
| 15884 | 1455 | static PurpleCmdRet silcpurple_cmd_cmode(PurpleConversation *conv, |
| 9597 | 1456 | const char *cmd, char **args, char **error, void *data) |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1457 | { |
| 15884 | 1458 | PurpleConnection *gc; |
| 1459 | SilcPurple sg; | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1460 | SilcChannelEntry channel; |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1461 | char *silccmd, *silcargs, *msg, tmp[256]; |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1462 | const char *chname; |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1463 | |
| 15884 | 1464 | gc = purple_conversation_get_gc(conv); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1465 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1466 | if (gc == NULL || !args || gc->proto_data == NULL) |
| 15884 | 1467 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1468 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1469 | sg = gc->proto_data; |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1470 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1471 | if (args[0]) |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1472 | chname = args[0]; |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1473 | else |
| 15884 | 1474 | chname = purple_conversation_get_name(conv); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1475 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1476 | if (!args[1]) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1477 | channel = silc_client_get_channel(sg->client, sg->conn, |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1478 | (char *)chname); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1479 | if (!channel) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1480 | *error = g_strdup_printf(_("channel %s not found"), chname); |
| 15884 | 1481 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1482 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1483 | if (channel->mode) { |
| 15884 | 1484 | silcpurple_get_chmode_string(channel->mode, tmp, sizeof(tmp)); |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1485 | msg = g_strdup_printf(_("channel modes for %s: %s"), chname, tmp); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1486 | } else { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1487 | msg = g_strdup_printf(_("no channel modes are set on %s"), chname); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1488 | } |
| 15884 | 1489 | purple_conv_chat_write(PURPLE_CONV_CHAT(conv), "", |
| 1490 | msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1491 | g_free(msg); |
| 15884 | 1492 | return PURPLE_CMD_RET_OK; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1493 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1494 | |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1495 | silcargs = g_strjoinv(" ", args); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1496 | silccmd = g_strconcat(cmd, " ", args ? silcargs : NULL, NULL); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1497 | g_free(silcargs); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1498 | if (!silc_client_command_call(sg->client, sg->conn, silccmd)) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1499 | g_free(silccmd); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1500 | *error = g_strdup_printf(_("Failed to set cmodes for %s"), args[0]); |
| 15884 | 1501 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1502 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1503 | g_free(silccmd); |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1504 | |
| 15884 | 1505 | return PURPLE_CMD_RET_OK; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1506 | } |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1507 | |
| 15884 | 1508 | static PurpleCmdRet silcpurple_cmd_generic(PurpleConversation *conv, |
| 9597 | 1509 | const char *cmd, char **args, char **error, void *data) |
| 9272 | 1510 | { |
| 15884 | 1511 | PurpleConnection *gc; |
| 1512 | SilcPurple sg; | |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1513 | char *silccmd, *silcargs; |
| 9272 | 1514 | |
| 15884 | 1515 | gc = purple_conversation_get_gc(conv); |
| 9272 | 1516 | |
| 1517 | if (gc == NULL) | |
| 15884 | 1518 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1519 | |
| 1520 | sg = gc->proto_data; | |
| 1521 | ||
| 1522 | if (sg == NULL) | |
| 15884 | 1523 | return PURPLE_CMD_RET_FAILED; |
| 9272 | 1524 | |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1525 | silcargs = g_strjoinv(" ", args); |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1526 | silccmd = g_strconcat(cmd, " ", args ? silcargs : NULL, NULL); |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1527 | g_free(silcargs); |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1528 | if (!silc_client_command_call(sg->client, sg->conn, silccmd)) { |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1529 | g_free(silccmd); |
|
15444
b793ef258d23
I think this changes every user-visible string that contains 'Gaim.' We probably want the UI to be able
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
1530 | *error = g_strdup_printf(_("Unknown command: %s, (may be a client bug)"), cmd); |
| 15884 | 1531 | return PURPLE_CMD_RET_FAILED; |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1532 | } |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1533 | g_free(silccmd); |
| 9272 | 1534 | |
| 15884 | 1535 | return PURPLE_CMD_RET_OK; |
| 9272 | 1536 | } |
| 1537 | ||
| 15884 | 1538 | static PurpleCmdRet silcpurple_cmd_quit(PurpleConversation *conv, |
| 9597 | 1539 | const char *cmd, char **args, char **error, void *data) |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1540 | { |
| 15884 | 1541 | PurpleConnection *gc; |
| 1542 | SilcPurple sg; | |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1543 | |
| 15884 | 1544 | gc = purple_conversation_get_gc(conv); |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1545 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1546 | if (gc == NULL) |
| 15884 | 1547 | return PURPLE_CMD_RET_FAILED; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1548 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1549 | sg = gc->proto_data; |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1550 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1551 | if (sg == NULL) |
| 15884 | 1552 | return PURPLE_CMD_RET_FAILED; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1553 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1554 | silc_client_command_call(sg->client, sg->conn, NULL, |
|
17408
24fe7521e5d8
(20:36:49) nosnilmot: we need to do something about 'Download Purple: http://pidgin.im/'
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16776
diff
changeset
|
1555 | "QUIT", (args && args[0]) ? args[0] : "Download this: " PURPLE_WEBSITE, NULL); |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1556 | |
| 15884 | 1557 | return PURPLE_CMD_RET_OK; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1558 | } |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1559 | |
| 15884 | 1560 | static PurpleCmdRet silcpurple_cmd_call(PurpleConversation *conv, |
| 9597 | 1561 | const char *cmd, char **args, char **error, void *data) |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1562 | { |
| 15884 | 1563 | PurpleConnection *gc; |
| 1564 | SilcPurple sg; | |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1565 | |
| 15884 | 1566 | gc = purple_conversation_get_gc(conv); |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1567 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1568 | if (gc == NULL) |
| 15884 | 1569 | return PURPLE_CMD_RET_FAILED; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1570 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1571 | sg = gc->proto_data; |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1572 | |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1573 | if (sg == NULL) |
| 15884 | 1574 | return PURPLE_CMD_RET_FAILED; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1575 | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1576 | if (!silc_client_command_call(sg->client, sg->conn, args[0])) { |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1577 | *error = g_strdup_printf(_("Unknown command: %s"), args[0]); |
| 15884 | 1578 | return PURPLE_CMD_RET_FAILED; |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1579 | } |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1580 | |
| 15884 | 1581 | return PURPLE_CMD_RET_OK; |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1582 | } |
|
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1583 | |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9024
diff
changeset
|
1584 | |
| 8849 | 1585 | /************************** Plugin Initialization ****************************/ |
| 1586 | ||
| 9272 | 1587 | static void |
| 15884 | 1588 | silcpurple_register_commands(void) |
| 9272 | 1589 | { |
| 15884 | 1590 | purple_cmd_register("part", "w", PURPLE_CMD_P_PRPL, |
| 1591 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | | |
| 1592 | PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, | |
| 1593 | "prpl-silc", silcpurple_cmd_chat_part, _("part [channel]: Leave the chat"), NULL); | |
| 1594 | purple_cmd_register("leave", "w", PURPLE_CMD_P_PRPL, | |
| 1595 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | | |
| 1596 | PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, | |
| 1597 | "prpl-silc", silcpurple_cmd_chat_part, _("leave [channel]: Leave the chat"), NULL); | |
| 1598 | purple_cmd_register("topic", "s", PURPLE_CMD_P_PRPL, | |
| 1599 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1600 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", | |
| 1601 | silcpurple_cmd_chat_topic, _("topic [<new topic>]: View or change the topic"), NULL); | |
| 1602 | purple_cmd_register("join", "ws", PURPLE_CMD_P_PRPL, | |
| 1603 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | | |
| 1604 | PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, | |
| 1605 | "prpl-silc", silcpurple_cmd_chat_join, | |
| 9597 | 1606 | _("join <channel> [<password>]: Join a chat on this network"), NULL); |
| 15884 | 1607 | purple_cmd_register("list", "", PURPLE_CMD_P_PRPL, |
| 1608 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1609 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", | |
| 1610 | silcpurple_cmd_chat_list, _("list: List channels on this network"), NULL); | |
| 1611 | purple_cmd_register("whois", "w", PURPLE_CMD_P_PRPL, | |
| 1612 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 9272 | 1613 | "prpl-silc", |
| 15884 | 1614 | silcpurple_cmd_whois, _("whois <nick>: View nick's information"), NULL); |
| 1615 | purple_cmd_register("msg", "ws", PURPLE_CMD_P_PRPL, | |
| 1616 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1617 | "prpl-silc", silcpurple_cmd_msg, | |
| 9597 | 1618 | _("msg <nick> <message>: Send a private message to a user"), NULL); |
| 15884 | 1619 | purple_cmd_register("query", "ws", PURPLE_CMD_P_PRPL, |
| 1620 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1621 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_query, | |
| 9597 | 1622 | _("query <nick> [<message>]: Send a private message to a user"), NULL); |
| 15884 | 1623 | purple_cmd_register("motd", "", PURPLE_CMD_P_PRPL, |
| 1624 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1625 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_motd, | |
| 9597 | 1626 | _("motd: View the server's Message Of The Day"), NULL); |
| 15884 | 1627 | purple_cmd_register("detach", "", PURPLE_CMD_P_PRPL, |
| 1628 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1629 | "prpl-silc", silcpurple_cmd_detach, | |
| 9597 | 1630 | _("detach: Detach this session"), NULL); |
| 15884 | 1631 | purple_cmd_register("quit", "s", PURPLE_CMD_P_PRPL, |
| 1632 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1633 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_quit, | |
| 9597 | 1634 | _("quit [message]: Disconnect from the server, with an optional message"), NULL); |
| 15884 | 1635 | purple_cmd_register("call", "s", PURPLE_CMD_P_PRPL, |
| 1636 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1637 | "prpl-silc", silcpurple_cmd_call, | |
| 9597 | 1638 | _("call <command>: Call any silc client command"), NULL); |
| 1639 | /* These below just get passed through for the silc client library to deal | |
| 1640 | * with */ | |
| 15884 | 1641 | purple_cmd_register("kill", "ws", PURPLE_CMD_P_PRPL, |
| 1642 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1643 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1644 | _("kill <nick> [-pubkey|<reason>]: Kill nick"), NULL); |
| 15884 | 1645 | purple_cmd_register("nick", "w", PURPLE_CMD_P_PRPL, |
| 1646 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1647 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1648 | _("nick <newnick>: Change your nickname"), NULL); |
| 15884 | 1649 | purple_cmd_register("whowas", "ww", PURPLE_CMD_P_PRPL, |
| 1650 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1651 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1652 | _("whowas <nick>: View nick's information"), NULL); |
| 15884 | 1653 | purple_cmd_register("cmode", "wws", PURPLE_CMD_P_PRPL, |
| 1654 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1655 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_cmode, | |
| 9597 | 1656 | _("cmode <channel> [+|-<modes>] [arguments]: Change or display channel modes"), NULL); |
| 15884 | 1657 | purple_cmd_register("cumode", "wws", PURPLE_CMD_P_PRPL, |
| 1658 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1659 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1660 | _("cumode <channel> +|-<modes> <nick>: Change nick's modes on channel"), NULL); |
| 15884 | 1661 | purple_cmd_register("umode", "w", PURPLE_CMD_P_PRPL, |
| 1662 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1663 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1664 | _("umode <usermodes>: Set your modes in the network"), NULL); |
| 15884 | 1665 | purple_cmd_register("oper", "s", PURPLE_CMD_P_PRPL, |
| 1666 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1667 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1668 | _("oper <nick> [-pubkey]: Get server operator privileges"), NULL); |
| 15884 | 1669 | purple_cmd_register("invite", "ws", PURPLE_CMD_P_PRPL, |
| 1670 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1671 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1672 | _("invite <channel> [-|+]<nick>: invite nick or add/remove from channel invite list"), NULL); |
| 15884 | 1673 | purple_cmd_register("kick", "wws", PURPLE_CMD_P_PRPL, |
| 1674 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1675 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1676 | _("kick <channel> <nick> [comment]: Kick client from channel"), NULL); |
| 15884 | 1677 | purple_cmd_register("info", "w", PURPLE_CMD_P_PRPL, |
| 1678 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1679 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1680 | _("info [server]: View server administrative details"), NULL); |
| 15884 | 1681 | purple_cmd_register("ban", "ww", PURPLE_CMD_P_PRPL, |
| 1682 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1683 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1684 | _("ban [<channel> +|-<nick>]: Ban client from channel"), NULL); |
| 15884 | 1685 | purple_cmd_register("getkey", "w", PURPLE_CMD_P_PRPL, |
| 1686 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1687 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1688 | _("getkey <nick|server>: Retrieve client's or server's public key"), NULL); |
| 15884 | 1689 | purple_cmd_register("stats", "", PURPLE_CMD_P_PRPL, |
| 1690 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1691 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1692 | _("stats: View server and network statistics"), NULL); |
| 15884 | 1693 | purple_cmd_register("ping", "", PURPLE_CMD_P_PRPL, |
| 1694 | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1695 | "prpl-silc", silcpurple_cmd_generic, | |
| 9597 | 1696 | _("ping: Send PING to the connected server"), NULL); |
| 15884 | 1697 | #if 0 /* Purple doesn't handle these yet */ |
| 1698 | purple_cmd_register("users", "w", PURPLE_CMD_P_PRPL, | |
| 1699 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | |
| 1700 | "prpl-silc", silcpurple_cmd_users, | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1701 | _("users <channel>: List users in channel")); |
| 15884 | 1702 | purple_cmd_register("names", "ww", PURPLE_CMD_P_PRPL, |
| 1703 | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | | |
| 1704 | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_names, | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1705 | _("names [-count|-ops|-halfops|-voices|-normal] <channel(s)>: List specific users in channel(s)")); |
|
9359
89c40efa7f7b
[gaim-migrate @ 10167]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9353
diff
changeset
|
1706 | #endif |
| 9272 | 1707 | } |
| 1708 | ||
| 15884 | 1709 | static PurpleWhiteboardPrplOps silcpurple_wb_ops = |
|
12058
6d4b6e3bd0ba
[gaim-migrate @ 14353]
Pekka Riikonen <priikone@silcnet.org>
parents:
11837
diff
changeset
|
1710 | { |
| 15884 | 1711 | silcpurple_wb_start, |
| 1712 | silcpurple_wb_end, | |
| 1713 | silcpurple_wb_get_dimensions, | |
| 1714 | silcpurple_wb_set_dimensions, | |
| 1715 | silcpurple_wb_get_brush, | |
| 1716 | silcpurple_wb_set_brush, | |
| 1717 | silcpurple_wb_send, | |
| 1718 | silcpurple_wb_clear, | |
|
16776
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1719 | |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1720 | /* padding */ |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1721 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1722 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1723 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1724 | NULL |
|
12058
6d4b6e3bd0ba
[gaim-migrate @ 14353]
Pekka Riikonen <priikone@silcnet.org>
parents:
11837
diff
changeset
|
1725 | }; |
|
6d4b6e3bd0ba
[gaim-migrate @ 14353]
Pekka Riikonen <priikone@silcnet.org>
parents:
11837
diff
changeset
|
1726 | |
| 15884 | 1727 | static PurplePluginProtocolInfo prpl_info = |
| 8849 | 1728 | { |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1729 | #ifdef HAVE_SILCMIME_H |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1730 | OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1731 | OPT_PROTO_PASSWORD_OPTIONAL | OPT_PROTO_IM_IMAGE, |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1732 | #else |
| 8849 | 1733 | OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | |
| 1734 | OPT_PROTO_PASSWORD_OPTIONAL, | |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1735 | #endif |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1736 | NULL, /* user_splits */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1737 | NULL, /* protocol_options */ |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1738 | #ifdef SILC_ATTRIBUTE_USER_ICON |
| 15884 | 1739 | {"jpeg,gif,png,bmp", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1740 | #else |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1741 | NO_BUDDY_ICONS, |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1742 | #endif |
| 15884 | 1743 | silcpurple_list_icon, /* list_icon */ |
| 15524 | 1744 | NULL, /* list_emblems */ |
| 15884 | 1745 | silcpurple_status_text, /* status_text */ |
| 1746 | silcpurple_tooltip_text, /* tooltip_text */ | |
| 1747 | silcpurple_away_states, /* away_states */ | |
| 1748 | silcpurple_blist_node_menu, /* blist_node_menu */ | |
| 1749 | silcpurple_chat_info, /* chat_info */ | |
| 1750 | silcpurple_chat_info_defaults,/* chat_info_defaults */ | |
| 1751 | silcpurple_login, /* login */ | |
| 1752 | silcpurple_close, /* close */ | |
| 1753 | silcpurple_send_im, /* send_im */ | |
| 1754 | silcpurple_set_info, /* set_info */ | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1755 | NULL, /* send_typing */ |
| 15884 | 1756 | silcpurple_get_info, /* get_info */ |
| 1757 | silcpurple_set_status, /* set_status */ | |
| 1758 | silcpurple_idle_set, /* set_idle */ | |
| 1759 | silcpurple_change_passwd, /* change_passwd */ | |
| 1760 | silcpurple_add_buddy, /* add_buddy */ | |
|
10869
86a3144baf08
[gaim-migrate @ 12556]
Mark Doliner <markdoliner@pidgin.im>
parents:
10825
diff
changeset
|
1761 | NULL, /* add_buddies */ |
| 15884 | 1762 | silcpurple_remove_buddy, /* remove_buddy */ |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1763 | NULL, /* remove_buddies */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1764 | NULL, /* add_permit */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1765 | NULL, /* add_deny */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1766 | NULL, /* rem_permit */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1767 | NULL, /* rem_deny */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1768 | NULL, /* set_permit_deny */ |
| 15884 | 1769 | silcpurple_chat_join, /* join_chat */ |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1770 | NULL, /* reject_chat */ |
| 15884 | 1771 | silcpurple_get_chat_name, /* get_chat_name */ |
| 1772 | silcpurple_chat_invite, /* chat_invite */ | |
| 1773 | silcpurple_chat_leave, /* chat_leave */ | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1774 | NULL, /* chat_whisper */ |
| 15884 | 1775 | silcpurple_chat_send, /* chat_send */ |
| 1776 | silcpurple_keepalive, /* keepalive */ | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1777 | NULL, /* register_user */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1778 | NULL, /* get_cb_info */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1779 | NULL, /* get_cb_away */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1780 | NULL, /* alias_buddy */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1781 | NULL, /* group_buddy */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1782 | NULL, /* rename_group */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1783 | NULL, /* buddy_free */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1784 | NULL, /* convo_closed */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1785 | NULL, /* normalize */ |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1786 | #ifdef SILC_ATTRIBUTE_USER_ICON |
| 15884 | 1787 | silcpurple_buddy_set_icon, /* set_buddy_icon */ |
|
12761
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1788 | #else |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1789 | NULL, |
|
f9b56ebfe562
[gaim-migrate @ 15108]
Pekka Riikonen <priikone@silcnet.org>
parents:
12658
diff
changeset
|
1790 | #endif |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1791 | NULL, /* remove_group */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1792 | NULL, /* get_cb_real_name */ |
| 15884 | 1793 | silcpurple_chat_set_topic, /* set_chat_topic */ |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1794 | NULL, /* find_blist_chat */ |
| 15884 | 1795 | silcpurple_roomlist_get_list, /* roomlist_get_list */ |
| 1796 | silcpurple_roomlist_cancel, /* roomlist_cancel */ | |
|
9488
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1797 | NULL, /* roomlist_expand_category */ |
|
9d6520fa53fd
[gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9466
diff
changeset
|
1798 | NULL, /* can_receive_file */ |
| 15884 | 1799 | silcpurple_ftp_send_file, /* send_file */ |
| 1800 | silcpurple_ftp_new_xfer, /* new_xfer */ | |
|
12645
a907ba243930
[gaim-migrate @ 14983]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12600
diff
changeset
|
1801 | NULL, /* offline_message */ |
| 15884 | 1802 | &silcpurple_wb_ops, /* whiteboard_prpl_ops */ |
|
15218
179fb04fbc87
[gaim-migrate @ 17942]
Mark Doliner <markdoliner@pidgin.im>
parents:
15081
diff
changeset
|
1803 | NULL, /* send_raw */ |
|
179fb04fbc87
[gaim-migrate @ 17942]
Mark Doliner <markdoliner@pidgin.im>
parents:
15081
diff
changeset
|
1804 | NULL, /* roomlist_room_serialize */ |
|
16776
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1805 | |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1806 | /* padding */ |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1807 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1808 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1809 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1810 | NULL |
| 8849 | 1811 | }; |
| 1812 | ||
| 15884 | 1813 | static PurplePluginInfo info = |
| 8849 | 1814 | { |
| 15884 | 1815 | PURPLE_PLUGIN_MAGIC, |
| 1816 | PURPLE_MAJOR_VERSION, | |
| 1817 | PURPLE_MINOR_VERSION, | |
| 1818 | PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
| 8849 | 1819 | NULL, /**< ui_requirement */ |
| 1820 | 0, /**< flags */ | |
| 1821 | NULL, /**< dependencies */ | |
| 15884 | 1822 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
| 8849 | 1823 | |
| 1824 | "prpl-silc", /**< id */ | |
| 1825 | "SILC", /**< name */ | |
| 1826 | "1.0", /**< version */ | |
| 1827 | /** summary */ | |
| 1828 | N_("SILC Protocol Plugin"), | |
| 1829 | /** description */ | |
| 1830 | N_("Secure Internet Live Conferencing (SILC) Protocol"), | |
| 8891 | 1831 | "Pekka Riikonen", /**< author */ |
| 1832 | "http://silcnet.org/", /**< homepage */ | |
| 8849 | 1833 | |
| 1834 | NULL, /**< load */ | |
| 1835 | NULL, /**< unload */ | |
| 1836 | NULL, /**< destroy */ | |
| 1837 | ||
| 1838 | NULL, /**< ui_info */ | |
| 1839 | &prpl_info, /**< extra_info */ | |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1840 | NULL, /**< prefs_info */ |
|
16776
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1841 | silcpurple_actions, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1842 | |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1843 | /* padding */ |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1844 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1845 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1846 | NULL, |
|
c9301dd6aa1f
Add padding to silc and bonjour to get rid of a bunch of warnings.
Mark Doliner <markdoliner@pidgin.im>
parents:
16549
diff
changeset
|
1847 | NULL |
| 8849 | 1848 | }; |
| 1849 | ||
| 1850 | static void | |
| 15884 | 1851 | init_plugin(PurplePlugin *plugin) |
| 8849 | 1852 | { |
| 15884 | 1853 | PurpleAccountOption *option; |
| 1854 | PurpleAccountUserSplit *split; | |
| 8849 | 1855 | char tmp[256]; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1856 | int i; |
| 15884 | 1857 | PurpleKeyValuePair *kvp; |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1858 | GList *list = NULL; |
| 8849 | 1859 | |
| 1860 | silc_plugin = plugin; | |
| 1861 | ||
| 15884 | 1862 | split = purple_account_user_split_new(_("Network"), "silcnet.org", '@'); |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1863 | prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1864 | |
| 8849 | 1865 | /* Account options */ |
| 15884 | 1866 | option = purple_account_option_string_new(_("Connect server"), |
| 8849 | 1867 | "server", |
| 1868 | "silc.silcnet.org"); | |
| 1869 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1870 | option = purple_account_option_int_new(_("Port"), "port", 706); |
| 8849 | 1871 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 1872 | g_snprintf(tmp, sizeof(tmp), "%s" G_DIR_SEPARATOR_S "public_key.pub", silcpurple_silcdir()); |
| 1873 | option = purple_account_option_string_new(_("Public Key file"), | |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1874 | "public-key", tmp); |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1875 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 1876 | g_snprintf(tmp, sizeof(tmp), "%s" G_DIR_SEPARATOR_S "private_key.prv", silcpurple_silcdir()); |
| 1877 | option = purple_account_option_string_new(_("Private Key file"), | |
|
10825
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1878 | "private-key", tmp); |
|
986d260851e8
[gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10802
diff
changeset
|
1879 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1880 | |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1881 | for (i = 0; silc_default_ciphers[i].name; i++) { |
| 15884 | 1882 | kvp = g_new0(PurpleKeyValuePair, 1); |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1883 | kvp->key = g_strdup(silc_default_ciphers[i].name); |
|
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1884 | kvp->value = g_strdup(silc_default_ciphers[i].name); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1885 | list = g_list_append(list, kvp); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1886 | } |
| 15884 | 1887 | option = purple_account_option_list_new(_("Cipher"), "cipher", list); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1888 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1889 | |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1890 | list = NULL; |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1891 | for (i = 0; silc_default_hmacs[i].name; i++) { |
| 15884 | 1892 | kvp = g_new0(PurpleKeyValuePair, 1); |
|
15081
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1893 | kvp->key = g_strdup(silc_default_hmacs[i].name); |
|
7e978e8dc84a
[gaim-migrate @ 17801]
Daniel Atallah <datallah@pidgin.im>
parents:
14899
diff
changeset
|
1894 | kvp->value = g_strdup(silc_default_hmacs[i].name); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1895 | list = g_list_append(list, kvp); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1896 | } |
| 15884 | 1897 | option = purple_account_option_list_new(_("HMAC"), "hmac", list); |
|
12217
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1898 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
ea610d8ab584
[gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents:
12216
diff
changeset
|
1899 | |
| 15884 | 1900 | option = purple_account_option_bool_new(_("Public key authentication"), |
| 8849 | 1901 | "pubkey-auth", FALSE); |
| 1902 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1903 | option = purple_account_option_bool_new(_("Reject watching by other users"), |
| 8849 | 1904 | "reject-watch", FALSE); |
| 1905 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1906 | option = purple_account_option_bool_new(_("Block invites"), |
| 8849 | 1907 | "block-invites", FALSE); |
| 1908 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1909 | option = purple_account_option_bool_new(_("Block IMs without Key Exchange"), |
| 8849 | 1910 | "block-ims", FALSE); |
| 1911 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1912 | option = purple_account_option_bool_new(_("Reject online status attribute requests"), |
| 8849 | 1913 | "reject-attrs", FALSE); |
| 1914 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 15884 | 1915 | option = purple_account_option_bool_new(_("Block messages to whiteboard"), |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1916 | "block-wb", FALSE); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1917 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 1918 | option = purple_account_option_bool_new(_("Automatically open whiteboard"), |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1919 | "open-wb", FALSE); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1920 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 1921 | option = purple_account_option_bool_new(_("Digitally sign and verify all messages"), |
|
12167
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1922 | "sign-verify", FALSE); |
|
f3ad3170f09d
[gaim-migrate @ 14468]
Pekka Riikonen <priikone@silcnet.org>
parents:
12149
diff
changeset
|
1923 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 8849 | 1924 | |
| 15884 | 1925 | purple_prefs_remove("/plugins/prpl/silc"); |
| 9272 | 1926 | |
| 15884 | 1927 | silcpurple_register_commands(); |
|
9353
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1928 | |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1929 | #ifdef _WIN32 |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1930 | silc_net_win32_init(); |
|
ff6546387358
[gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9308
diff
changeset
|
1931 | #endif |
| 8849 | 1932 | } |
| 1933 | ||
| 15884 | 1934 | PURPLE_INIT_PLUGIN(silc, init_plugin, info); |