Mercurial > pidgin
annotate src/protocols/irc/irc.c @ 10738:55af3fa46329
[gaim-migrate @ 12340]
Lots of changes here. A lot of it stems from chaning
gaim_account_connect() so that it DOES NOT have the GaimStatus
parameter. It will attempt to use the GaimStatus of your
account from the last time it was connected (which doesn't
work quite right yet).
My goal here was to save and load each account's GaimStatuses
to accounts.xml, so if you were "away" when you signed off then
you'll be "away" when you sign back on. Not quite there yet.
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Sat, 26 Mar 2005 20:08:43 +0000 |
| parents | c4cb90065e1d |
| children | 94cc67130789 |
| rev | line source |
|---|---|
| 6333 | 1 /** |
| 2 * @file irc.c | |
|
6459
b52870734c21
[gaim-migrate @ 6968]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
3 * |
| 6333 | 4 * gaim |
| 2086 | 5 * |
| 8351 | 6 * Copyright (C) 2003, Robbert Haarman <gaim@inglorion.net> |
| 6333 | 7 * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu> |
| 8 * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com> | |
| 2086 | 9 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> |
|
6459
b52870734c21
[gaim-migrate @ 6968]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
10 * |
| 2086 | 11 * This program is free software; you can redistribute it and/or modify |
| 12 * it under the terms of the GNU General Public License as published by | |
| 13 * the Free Software Foundation; either version 2 of the License, or | |
| 14 * (at your option) any later version. | |
| 15 * | |
| 16 * This program is distributed in the hope that it will be useful, | |
| 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 * GNU General Public License for more details. | |
| 20 * | |
| 21 * You should have received a copy of the GNU General Public License | |
| 22 * along with this program; if not, write to the Free Software | |
| 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 */ | |
| 6333 | 25 |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5791
diff
changeset
|
26 #include "internal.h" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5791
diff
changeset
|
27 |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5791
diff
changeset
|
28 #include "accountopt.h" |
| 9030 | 29 #include "blist.h" |
| 6333 | 30 #include "conversation.h" |
| 9030 | 31 #include "debug.h" |
| 7148 | 32 #include "notify.h" |
| 9030 | 33 #include "prpl.h" |
| 34 #include "plugin.h" | |
| 6350 | 35 #include "util.h" |
| 9943 | 36 #include "version.h" |
| 9030 | 37 |
| 6333 | 38 #include "irc.h" |
| 4422 | 39 |
| 6333 | 40 static void irc_buddy_append(char *name, struct irc_buddy *ib, GString *string); |
| 2086 | 41 |
| 6695 | 42 static const char *irc_blist_icon(GaimAccount *a, GaimBuddy *b); |
| 9953 | 43 static void irc_blist_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne); |
| 9951 | 44 static GList *irc_status_types(GaimAccount *account); |
| 9015 | 45 static GList *irc_actions(GaimPlugin *plugin, gpointer context); |
| 6333 | 46 /* static GList *irc_chat_info(GaimConnection *gc); */ |
| 10401 | 47 static void irc_login(GaimAccount *account, GaimStatus *status); |
| 10365 | 48 static void irc_login_cb_ssl(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond); |
| 6333 | 49 static void irc_login_cb(gpointer data, gint source, GaimInputCondition cond); |
| 10365 | 50 static void irc_ssl_connect_failure(GaimSslConnection *gsc, GaimSslErrorType error, gpointer data); |
| 6333 | 51 static void irc_close(GaimConnection *gc); |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
52 static int irc_im_send(GaimConnection *gc, const char *who, const char *what, GaimConvImFlags flags); |
| 6333 | 53 static int irc_chat_send(GaimConnection *gc, int id, const char *what); |
| 54 static void irc_chat_join (GaimConnection *gc, GHashTable *data); | |
| 55 static void irc_input_cb(gpointer data, gint source, GaimInputCondition cond); | |
| 10365 | 56 static void irc_input_cb_ssl(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond); |
| 3751 | 57 |
| 7711 | 58 static guint irc_nick_hash(const char *nick); |
| 59 static gboolean irc_nick_equal(const char *nick1, const char *nick2); | |
| 60 static void irc_buddy_free(struct irc_buddy *ib); | |
| 61 | |
| 62 static GaimPlugin *_irc_plugin = NULL; | |
| 63 | |
| 64 static const char *status_chars = "@+%&"; | |
| 65 | |
| 9015 | 66 static void irc_view_motd(GaimPluginAction *action) |
| 7148 | 67 { |
| 9015 | 68 GaimConnection *gc = (GaimConnection *) action->context; |
| 7148 | 69 struct irc_conn *irc; |
| 70 char *title; | |
| 71 | |
| 72 if (gc == NULL || gc->proto_data == NULL) { | |
| 73 gaim_debug(GAIM_DEBUG_ERROR, "irc", "got MOTD request for NULL gc\n"); | |
| 74 return; | |
| 75 } | |
| 76 irc = gc->proto_data; | |
| 77 if (irc->motd == NULL) { | |
| 78 gaim_notify_error(gc, _("Error displaying MOTD"), _("No MOTD available"), | |
| 79 _("There is no MOTD associated with this connection.")); | |
| 80 return; | |
| 81 } | |
| 82 title = g_strdup_printf(_("MOTD for %s"), irc->server); | |
| 83 gaim_notify_formatted(gc, title, title, NULL, irc->motd->str, NULL, NULL); | |
| 84 } | |
| 85 | |
| 6333 | 86 int irc_send(struct irc_conn *irc, const char *buf) |
| 3751 | 87 { |
| 9440 | 88 int ret; |
| 89 | |
| 10365 | 90 if (irc->gsc) { |
| 91 ret = gaim_ssl_write(irc->gsc, buf, strlen(buf)); | |
| 92 } else { | |
| 93 if (irc->fd < 0) | |
| 94 return -1; | |
| 95 ret = write(irc->fd, buf, strlen(buf)); | |
| 96 } | |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
97 |
| 10365 | 98 /* gaim_debug(GAIM_DEBUG_MISC, "irc", "sent%s: %s", |
| 99 irc->gsc ? " (ssl)" : "", buf); */ | |
| 100 if (ret < 0) { | |
| 9440 | 101 gaim_connection_error(gaim_account_get_connection(irc->account), |
| 102 _("Server has disconnected")); | |
| 10365 | 103 } |
| 9440 | 104 |
| 105 return ret; | |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
106 } |
|
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
107 |
| 6333 | 108 /* XXX I don't like messing directly with these buddies */ |
| 109 gboolean irc_blist_timeout(struct irc_conn *irc) | |
| 2086 | 110 { |
| 6333 | 111 GString *string = g_string_sized_new(512); |
| 112 char *list, *buf; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
113 |
| 6333 | 114 g_hash_table_foreach(irc->buddies, (GHFunc)irc_buddy_append, (gpointer)string); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
115 |
| 6333 | 116 list = g_string_free(string, FALSE); |
| 117 if (!list || !strlen(list)) { | |
| 118 g_free(list); | |
|
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
119 return TRUE; |
| 2086 | 120 } |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
121 |
| 8038 | 122 buf = irc_format(irc, "vn", "ISON", list); |
| 6333 | 123 g_free(list); |
| 124 irc_send(irc, buf); | |
| 125 g_free(buf); | |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
126 |
|
2131
acc11216ec5d
[gaim-migrate @ 2141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
127 return TRUE; |
| 2086 | 128 } |
| 129 | |
| 6333 | 130 static void irc_buddy_append(char *name, struct irc_buddy *ib, GString *string) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
131 { |
| 6333 | 132 ib->flag = FALSE; |
| 133 g_string_append_printf(string, "%s ", name); | |
| 3511 | 134 } |
| 135 | |
| 9553 | 136 static void irc_ison_one(struct irc_conn *irc, struct irc_buddy *ib) |
| 137 { | |
| 138 char *buf; | |
| 139 | |
| 140 ib->flag = FALSE; | |
| 141 buf = irc_format(irc, "vn", "ISON", ib->name); | |
| 142 irc_send(irc, buf); | |
| 143 g_free(buf); | |
| 144 } | |
| 145 | |
| 146 | |
| 6695 | 147 static const char *irc_blist_icon(GaimAccount *a, GaimBuddy *b) |
| 3029 | 148 { |
| 6333 | 149 return "irc"; |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
150 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
151 |
| 9953 | 152 static void irc_blist_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne) |
| 3751 | 153 { |
| 10244 | 154 GaimPresence *presence = gaim_buddy_get_presence(b); |
| 155 | |
| 156 if (gaim_presence_is_online(presence) == FALSE) { | |
| 6333 | 157 *se = "offline"; |
| 10244 | 158 } |
| 2086 | 159 } |
| 160 | |
| 9944 | 161 static GList *irc_status_types(GaimAccount *account) |
| 2086 | 162 { |
| 9944 | 163 GaimStatusType *type; |
| 164 GList *types = NULL; | |
| 165 | |
| 166 type = gaim_status_type_new(GAIM_STATUS_OFFLINE, "offline", | |
| 167 _("Offline"), FALSE); | |
| 168 types = g_list_append(types, type); | |
| 169 | |
| 170 type = gaim_status_type_new(GAIM_STATUS_ONLINE, "online", | |
| 171 _("Online"), FALSE); | |
| 172 types = g_list_append(types, type); | |
| 173 | |
| 174 type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, "available", | |
| 175 _("Available"), TRUE); | |
| 176 types = g_list_append(types, type); | |
| 177 | |
| 178 type = gaim_status_type_new_with_attrs( | |
| 179 GAIM_STATUS_AWAY, "away", _("Away"), TRUE, TRUE, FALSE, | |
| 10009 | 180 "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); |
| 9944 | 181 types = g_list_append(types, type); |
| 182 | |
| 183 return types; | |
| 3452 | 184 } |
| 185 | |
| 9015 | 186 static GList *irc_actions(GaimPlugin *plugin, gpointer context) |
| 7148 | 187 { |
| 188 GList *list = NULL; | |
| 9015 | 189 GaimPluginAction *act = NULL; |
| 7148 | 190 |
| 9015 | 191 act = gaim_plugin_action_new(_("View MOTD"), irc_view_motd); |
| 192 list = g_list_append(list, act); | |
| 7148 | 193 |
| 194 return list; | |
| 195 } | |
| 196 | |
| 6333 | 197 static GList *irc_chat_join_info(GaimConnection *gc) |
| 2086 | 198 { |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
199 GList *m = NULL; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
200 struct proto_chat_entry *pce; |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
201 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
202 pce = g_new0(struct proto_chat_entry, 1); |
| 7841 | 203 pce->label = _("_Channel:"); |
| 5234 | 204 pce->identifier = "channel"; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
205 m = g_list_append(m, pce); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
206 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
207 pce = g_new0(struct proto_chat_entry, 1); |
| 7841 | 208 pce->label = _("_Password:"); |
| 5234 | 209 pce->identifier = "password"; |
| 6499 | 210 pce->secret = TRUE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
211 m = g_list_append(m, pce); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
212 |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
213 return m; |
| 2086 | 214 } |
| 215 | |
| 9754 | 216 GHashTable *irc_chat_info_defaults(GaimConnection *gc, const char *chat_name) |
| 217 { | |
| 218 GHashTable *defaults; | |
| 219 | |
| 220 defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); | |
| 221 | |
| 222 if (chat_name != NULL) | |
| 223 g_hash_table_insert(defaults, "channel", g_strdup(chat_name)); | |
| 224 | |
| 225 return defaults; | |
| 226 } | |
| 227 | |
| 10401 | 228 static void irc_login(GaimAccount *account, GaimStatus *status) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
229 { |
| 6333 | 230 GaimConnection *gc; |
| 231 struct irc_conn *irc; | |
| 10494 | 232 char **userparts; |
| 6333 | 233 const char *username = gaim_account_get_username(account); |
| 234 int err; | |
| 235 | |
| 236 gc = gaim_account_get_connection(account); | |
| 8677 | 237 gc->flags |= GAIM_CONNECTION_NO_NEWLINES; |
| 6333 | 238 |
| 6752 | 239 if (strpbrk(username, " \t\v\r\n") != NULL) { |
| 240 gaim_connection_error(gc, _("IRC nicks may not contain whitespace")); | |
| 241 return; | |
| 242 } | |
| 243 | |
| 6333 | 244 gc->proto_data = irc = g_new0(struct irc_conn, 1); |
| 245 irc->account = account; | |
| 246 | |
| 247 userparts = g_strsplit(username, "@", 2); | |
| 248 gaim_connection_set_display_name(gc, userparts[0]); | |
| 249 irc->server = g_strdup(userparts[1]); | |
| 250 g_strfreev(userparts); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
251 |
| 10159 | 252 irc->buddies = g_hash_table_new_full((GHashFunc)irc_nick_hash, (GEqualFunc)irc_nick_equal, |
| 6333 | 253 NULL, (GDestroyNotify)irc_buddy_free); |
| 254 irc->cmds = g_hash_table_new(g_str_hash, g_str_equal); | |
| 255 irc_cmd_table_build(irc); | |
| 256 irc->msgs = g_hash_table_new(g_str_hash, g_str_equal); | |
| 257 irc_msg_table_build(irc); | |
| 258 | |
| 10494 | 259 gaim_connection_update_progress(gc, _("Connecting"), 1, 2); |
| 6333 | 260 |
| 10365 | 261 if (gaim_account_get_bool(account, "ssl", FALSE)) { |
| 262 if (gaim_ssl_is_supported()) { | |
| 263 irc->gsc = gaim_ssl_connect(account, irc->server, | |
| 264 gaim_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT), | |
| 265 irc_login_cb_ssl, irc_ssl_connect_failure, gc); | |
| 266 } else { | |
| 267 gaim_connection_error(gc, _("SSL support unavailable")); | |
| 268 } | |
| 269 } | |
| 270 | |
| 271 if (!irc->gsc) { | |
| 272 | |
| 273 err = gaim_proxy_connect(account, irc->server, | |
| 6333 | 274 gaim_account_get_int(account, "port", IRC_DEFAULT_PORT), |
| 275 irc_login_cb, gc); | |
| 276 | |
| 10555 | 277 if (err || !gaim_account_get_connection(account)) { |
| 10365 | 278 gaim_connection_error(gc, _("Couldn't create socket")); |
| 279 return; | |
| 280 } | |
| 281 } | |
| 282 } | |
| 283 | |
| 284 static gboolean do_login(GaimConnection *gc) { | |
| 285 char *buf; | |
| 286 char hostname[256]; | |
| 287 const char *username, *realname; | |
| 288 struct irc_conn *irc = gc->proto_data; | |
| 10555 | 289 const char *pass = gaim_account_get_password(gc->account); |
| 10365 | 290 |
| 10555 | 291 if (pass && *pass) { |
| 292 buf = irc_format(irc, "vv", "PASS", pass); | |
| 10365 | 293 if (irc_send(irc, buf) < 0) { |
| 294 gaim_connection_error(gc, "Error sending password"); | |
| 295 return FALSE; | |
| 296 } | |
| 297 g_free(buf); | |
| 298 } | |
| 299 | |
| 300 gethostname(hostname, sizeof(hostname)); | |
| 301 hostname[sizeof(hostname) - 1] = '\0'; | |
| 302 username = gaim_account_get_string(irc->account, "username", ""); | |
| 303 realname = gaim_account_get_string(irc->account, "realname", ""); | |
| 304 buf = irc_format(irc, "vvvv:", "USER", strlen(username) ? username : g_get_user_name(), hostname, irc->server, | |
| 305 strlen(realname) ? realname : IRC_DEFAULT_ALIAS); | |
| 306 if (irc_send(irc, buf) < 0) { | |
| 307 gaim_connection_error(gc, "Error registering with server"); | |
| 308 return FALSE; | |
| 309 } | |
| 310 g_free(buf); | |
| 311 buf = irc_format(irc, "vn", "NICK", gaim_connection_get_display_name(gc)); | |
| 312 if (irc_send(irc, buf) < 0) { | |
| 313 gaim_connection_error(gc, "Error sending nickname"); | |
| 314 return FALSE; | |
| 315 } | |
| 316 g_free(buf); | |
| 317 | |
| 318 return TRUE; | |
| 319 } | |
| 320 | |
| 321 static void irc_login_cb_ssl(gpointer data, GaimSslConnection *gsc, | |
| 322 GaimInputCondition cond) | |
| 323 { | |
| 324 GaimConnection *gc = data; | |
| 325 struct irc_conn *irc = gc->proto_data; | |
| 326 | |
| 327 if(!g_list_find(gaim_connections_get_all(), gc)) { | |
| 328 gaim_ssl_close(gsc); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
329 return; |
| 6333 | 330 } |
| 10365 | 331 |
| 332 irc->gsc = gsc; | |
| 333 | |
| 334 if (do_login(gc)) { | |
| 335 gaim_ssl_input_add(gsc, irc_input_cb_ssl, gc); | |
| 336 } | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
337 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
338 |
| 6333 | 339 static void irc_login_cb(gpointer data, gint source, GaimInputCondition cond) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
340 { |
| 6333 | 341 GaimConnection *gc = data; |
| 342 struct irc_conn *irc = gc->proto_data; | |
| 343 GList *connections = gaim_connections_get_all(); | |
| 344 | |
| 8778 | 345 if (source < 0) { |
| 346 gaim_connection_error(gc, _("Couldn't connect to host")); | |
| 6333 | 347 return; |
| 8778 | 348 } |
| 6333 | 349 |
| 350 if (!g_list_find(connections, gc)) { | |
| 351 close(source); | |
| 352 return; | |
| 353 } | |
| 354 | |
| 355 irc->fd = source; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
356 |
| 10365 | 357 if (do_login(gc)) { |
| 358 gc->inpa = gaim_input_add(irc->fd, GAIM_INPUT_READ, irc_input_cb, gc); | |
| 359 } | |
| 360 } | |
| 361 | |
| 362 static void | |
| 363 irc_ssl_connect_failure(GaimSslConnection *gsc, GaimSslErrorType error, | |
| 364 gpointer data) | |
| 365 { | |
| 366 GaimConnection *gc = data; | |
| 367 struct irc_conn *irc = gc->proto_data; | |
| 368 | |
| 369 switch(error) { | |
| 370 case GAIM_SSL_CONNECT_FAILED: | |
| 371 gaim_connection_error(gc, _("Connection Failed")); | |
| 372 break; | |
| 373 case GAIM_SSL_HANDSHAKE_FAILED: | |
| 374 gaim_connection_error(gc, _("SSL Handshake Failed")); | |
| 375 break; | |
| 6333 | 376 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
377 |
| 10365 | 378 irc->gsc = NULL; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
379 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
380 |
| 6333 | 381 static void irc_close(GaimConnection *gc) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
382 { |
| 6333 | 383 struct irc_conn *irc = gc->proto_data; |
| 384 | |
| 6752 | 385 if (irc == NULL) |
| 386 return; | |
| 387 | |
| 6333 | 388 irc_cmd_quit(irc, "quit", NULL, NULL); |
| 389 | |
| 390 if (gc->inpa) | |
| 9441 | 391 gaim_input_remove(gc->inpa); |
| 6333 | 392 |
| 393 g_free(irc->inbuf); | |
| 10365 | 394 if (irc->gsc) { |
| 395 gaim_ssl_close(irc->gsc); | |
| 396 } else if (irc->fd > 0) { | |
| 397 close(irc->fd); | |
| 398 } | |
| 6333 | 399 if (irc->timer) |
|
8287
ef881489396e
[gaim-migrate @ 9011]
Christian Hammond <chipx86@chipx86.com>
parents:
8170
diff
changeset
|
400 gaim_timeout_remove(irc->timer); |
| 6333 | 401 g_hash_table_destroy(irc->cmds); |
| 402 g_hash_table_destroy(irc->msgs); | |
| 10504 | 403 g_hash_table_destroy(irc->buddies); |
| 6333 | 404 if (irc->motd) |
| 405 g_string_free(irc->motd, TRUE); | |
| 406 g_free(irc->server); | |
| 407 g_free(irc); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
408 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
409 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
410 static int irc_im_send(GaimConnection *gc, const char *who, const char *what, GaimConvImFlags flags) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
411 { |
| 6333 | 412 struct irc_conn *irc = gc->proto_data; |
| 413 const char *args[2]; | |
| 414 | |
| 7711 | 415 if (strchr(status_chars, *who) != NULL) |
| 6333 | 416 args[0] = who + 1; |
| 417 else | |
| 418 args[0] = who; | |
| 419 args[1] = what; | |
| 9442 | 420 |
| 6333 | 421 irc_cmd_privmsg(irc, "msg", NULL, args); |
| 422 return 1; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
423 } |
| 2086 | 424 |
| 6333 | 425 static void irc_get_info(GaimConnection *gc, const char *who) |
| 2086 | 426 { |
| 6333 | 427 struct irc_conn *irc = gc->proto_data; |
|
10618
9eb3b224face
[gaim-migrate @ 12083]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10555
diff
changeset
|
428 const char *args[2]; |
| 6333 | 429 args[0] = who; |
| 10624 | 430 args[1] = NULL; |
| 6333 | 431 irc_cmd_whois(irc, "whois", NULL, args); |
| 432 } | |
| 433 | |
| 9944 | 434 static void irc_set_status(GaimAccount *account, GaimStatus *status) |
| 6333 | 435 { |
| 9944 | 436 GaimConnection *gc = gaim_account_get_connection(account); |
|
10724
811f12c8a5e4
[gaim-migrate @ 12324]
Luke Schierer <lschiere@pidgin.im>
parents:
10646
diff
changeset
|
437 struct irc_conn *irc = NULL; |
| 6333 | 438 const char *args[1]; |
| 9944 | 439 const char *status_id = gaim_status_get_id(status); |
| 2086 | 440 |
| 10646 | 441 if (gc) |
| 442 irc = gc->proto_data; | |
| 443 | |
| 10504 | 444 if (!gaim_status_is_active(status)) |
| 445 return; | |
| 446 | |
| 447 args[0] = NULL; | |
| 448 | |
| 10646 | 449 if (strcmp(status_id, "offline") && !gc) { |
| 10738 | 450 gaim_account_connect(account); |
| 10646 | 451 } else if (!strcmp(status_id, "away")) { |
| 9944 | 452 args[0] = gaim_status_get_attr_string(status, "message"); |
| 10646 | 453 irc_cmd_away(irc, "away", NULL, args); |
| 454 } | |
| 4916 | 455 } |
| 456 | |
| 9285 | 457 static void irc_add_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) |
| 3029 | 458 { |
| 6333 | 459 struct irc_conn *irc = (struct irc_conn *)gc->proto_data; |
| 460 struct irc_buddy *ib = g_new0(struct irc_buddy, 1); | |
| 9285 | 461 ib->name = g_strdup(buddy->name); |
| 6333 | 462 g_hash_table_insert(irc->buddies, ib->name, ib); |
| 9238 | 463 |
| 9553 | 464 /* if the timer isn't set, this is during signon, so we don't want to flood |
| 465 * ourself off with ISON's, so we don't, but after that we want to know when | |
| 466 * someone's online asap */ | |
| 467 if (irc->timer) | |
| 468 irc_ison_one(irc, ib); | |
| 3029 | 469 } |
| 3622 | 470 |
| 9285 | 471 static void irc_remove_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) |
| 6333 | 472 { |
| 473 struct irc_conn *irc = (struct irc_conn *)gc->proto_data; | |
| 9285 | 474 g_hash_table_remove(irc->buddies, buddy->name); |
| 3616 | 475 } |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
476 |
| 10365 | 477 static void read_input(struct irc_conn *irc, int len) |
| 6333 | 478 { |
| 479 char *cur, *end; | |
| 6369 | 480 |
| 6333 | 481 irc->inbufused += len; |
| 482 irc->inbuf[irc->inbufused] = '\0'; | |
| 3616 | 483 |
| 8156 | 484 cur = irc->inbuf; |
| 485 while (cur < irc->inbuf + irc->inbufused && | |
| 486 ((end = strstr(cur, "\r\n")) || (end = strstr(cur, "\n")))) { | |
| 487 int step = (*end == '\r' ? 2 : 1); | |
| 6333 | 488 *end = '\0'; |
| 489 irc_parse_msg(irc, cur); | |
| 8156 | 490 cur = end + step; |
| 6333 | 491 } |
| 492 if (cur != irc->inbuf + irc->inbufused) { /* leftover */ | |
| 493 irc->inbufused -= (cur - irc->inbuf); | |
| 494 memmove(irc->inbuf, cur, irc->inbufused); | |
| 495 } else { | |
| 496 irc->inbufused = 0; | |
| 497 } | |
| 3616 | 498 } |
| 499 | |
| 10365 | 500 static void irc_input_cb_ssl(gpointer data, GaimSslConnection *gsc, |
| 501 GaimInputCondition cond) | |
| 502 { | |
| 503 | |
| 504 GaimConnection *gc = data; | |
| 505 struct irc_conn *irc = gc->proto_data; | |
| 506 int len; | |
| 507 | |
| 508 if(!g_list_find(gaim_connections_get_all(), gc)) { | |
| 509 gaim_ssl_close(gsc); | |
| 510 return; | |
| 511 } | |
| 512 | |
| 513 if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { | |
| 514 irc->inbuflen += IRC_INITIAL_BUFSIZE; | |
| 515 irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); | |
| 516 } | |
| 517 | |
| 518 if ((len = gaim_ssl_read(gsc, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1)) < 0) { | |
| 519 gaim_connection_error(gc, _("Read error")); | |
| 520 return; | |
| 521 } else if (len == 0) { | |
| 522 gaim_connection_error(gc, _("Server has disconnected")); | |
| 523 return; | |
| 524 } | |
| 525 | |
| 526 read_input(irc, len); | |
| 527 } | |
| 528 | |
| 529 static void irc_input_cb(gpointer data, gint source, GaimInputCondition cond) | |
| 530 { | |
| 531 GaimConnection *gc = data; | |
| 532 struct irc_conn *irc = gc->proto_data; | |
| 533 int len; | |
| 534 | |
| 535 if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { | |
| 536 irc->inbuflen += IRC_INITIAL_BUFSIZE; | |
| 537 irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); | |
| 538 } | |
| 539 | |
| 540 if ((len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1)) < 0) { | |
| 541 gaim_connection_error(gc, _("Read error")); | |
| 542 return; | |
| 543 } else if (len == 0) { | |
| 544 gaim_connection_error(gc, _("Server has disconnected")); | |
| 545 return; | |
| 546 } | |
| 547 | |
| 548 read_input(irc, len); | |
| 549 } | |
| 550 | |
| 6333 | 551 static void irc_chat_join (GaimConnection *gc, GHashTable *data) |
| 552 { | |
| 553 struct irc_conn *irc = gc->proto_data; | |
| 554 const char *args[2]; | |
| 3616 | 555 |
| 6333 | 556 args[0] = g_hash_table_lookup(data, "channel"); |
| 557 args[1] = g_hash_table_lookup(data, "password"); | |
| 558 irc_cmd_join(irc, "join", NULL, args); | |
| 3622 | 559 } |
| 560 | |
| 9917 | 561 static char *irc_get_chat_name(GHashTable *data) { |
| 562 return g_strdup(g_hash_table_lookup(data, "channel")); | |
| 563 } | |
| 564 | |
| 6333 | 565 static void irc_chat_invite(GaimConnection *gc, int id, const char *message, const char *name) |
| 3751 | 566 { |
| 6333 | 567 struct irc_conn *irc = gc->proto_data; |
| 568 GaimConversation *convo = gaim_find_chat(gc, id); | |
| 569 const char *args[2]; | |
| 3751 | 570 |
| 6333 | 571 if (!convo) { |
| 572 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got chat invite request for bogus chat\n"); | |
| 573 return; | |
| 574 } | |
| 575 args[0] = name; | |
| 576 args[1] = gaim_conversation_get_name(convo); | |
| 577 irc_cmd_invite(irc, "invite", gaim_conversation_get_name(convo), args); | |
| 3707 | 578 } |
| 579 | |
| 6333 | 580 |
| 581 static void irc_chat_leave (GaimConnection *gc, int id) | |
| 3707 | 582 { |
| 6333 | 583 struct irc_conn *irc = gc->proto_data; |
| 584 GaimConversation *convo = gaim_find_chat(gc, id); | |
| 585 const char *args[2]; | |
| 5298 | 586 |
| 6333 | 587 if (!convo) |
| 588 return; | |
| 3735 | 589 |
| 6333 | 590 args[0] = gaim_conversation_get_name(convo); |
| 591 args[1] = NULL; | |
| 592 irc_cmd_part(irc, "part", gaim_conversation_get_name(convo), args); | |
| 593 serv_got_chat_left(gc, id); | |
| 3735 | 594 } |
| 595 | |
| 6333 | 596 static int irc_chat_send(GaimConnection *gc, int id, const char *what) |
| 3735 | 597 { |
| 6333 | 598 struct irc_conn *irc = gc->proto_data; |
| 599 GaimConversation *convo = gaim_find_chat(gc, id); | |
| 600 const char *args[2]; | |
| 8163 | 601 char *tmp; |
| 6333 | 602 |
| 603 if (!convo) { | |
| 604 gaim_debug(GAIM_DEBUG_ERROR, "irc", "chat send on nonexistent chat\n"); | |
| 605 return -EINVAL; | |
| 606 } | |
| 9130 | 607 #if 0 |
| 6333 | 608 if (*what == '/') { |
| 609 return irc_parse_cmd(irc, convo->name, what + 1); | |
| 610 } | |
| 9130 | 611 #endif |
| 6333 | 612 args[0] = convo->name; |
| 613 args[1] = what; | |
| 614 | |
| 615 irc_cmd_privmsg(irc, "msg", NULL, args); | |
| 8163 | 616 |
|
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10724
diff
changeset
|
617 tmp = g_markup_escape_text(what, -1); |
| 8163 | 618 serv_got_chat_in(gc, id, gaim_connection_get_display_name(gc), 0, tmp, time(NULL)); |
| 619 g_free(tmp); | |
| 6333 | 620 return 0; |
| 3707 | 621 } |
| 622 | |
| 6333 | 623 static guint irc_nick_hash(const char *nick) |
| 624 { | |
| 625 char *lc; | |
| 626 guint bucket; | |
|
6270
1bf6fd117797
[gaim-migrate @ 6767]
Christian Hammond <chipx86@chipx86.com>
parents:
6240
diff
changeset
|
627 |
| 6333 | 628 lc = g_utf8_strdown(nick, -1); |
| 629 bucket = g_str_hash(lc); | |
| 630 g_free(lc); | |
|
6270
1bf6fd117797
[gaim-migrate @ 6767]
Christian Hammond <chipx86@chipx86.com>
parents:
6240
diff
changeset
|
631 |
| 6333 | 632 return bucket; |
| 3029 | 633 } |
| 634 | |
| 6333 | 635 static gboolean irc_nick_equal(const char *nick1, const char *nick2) |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
636 { |
| 6333 | 637 return (gaim_utf8_strcasecmp(nick1, nick2) == 0); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
638 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
639 |
| 6333 | 640 static void irc_buddy_free(struct irc_buddy *ib) |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
641 { |
| 6333 | 642 g_free(ib->name); |
| 643 g_free(ib); | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
644 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
645 |
| 9154 | 646 static void irc_chat_set_topic(GaimConnection *gc, int id, const char *topic) |
| 647 { | |
| 648 char *buf; | |
| 649 const char *name = NULL; | |
| 650 struct irc_conn *irc; | |
| 651 | |
| 652 irc = gc->proto_data; | |
| 653 name = gaim_conversation_get_name(gaim_find_chat(gc, id)); | |
| 654 | |
| 655 if (name == NULL) | |
| 656 return; | |
| 657 | |
| 658 buf = irc_format(irc, "vt:", "TOPIC", name, topic); | |
| 659 irc_send(irc, buf); | |
| 660 g_free(buf); | |
| 661 } | |
| 662 | |
| 8114 | 663 static GaimRoomlist *irc_roomlist_get_list(GaimConnection *gc) |
| 664 { | |
| 665 struct irc_conn *irc; | |
| 666 GList *fields = NULL; | |
| 667 GaimRoomlistField *f; | |
| 8352 | 668 char *buf; |
| 8114 | 669 |
| 670 irc = gc->proto_data; | |
| 671 | |
| 672 if (irc->roomlist) | |
| 673 gaim_roomlist_unref(irc->roomlist); | |
| 674 | |
| 675 irc->roomlist = gaim_roomlist_new(gaim_connection_get_account(gc)); | |
| 676 | |
| 677 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", "channel", TRUE); | |
| 678 fields = g_list_append(fields, f); | |
| 679 | |
| 680 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_INT, _("Users"), "users", FALSE); | |
| 681 fields = g_list_append(fields, f); | |
| 682 | |
| 683 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Topic"), "topic", FALSE); | |
| 684 fields = g_list_append(fields, f); | |
| 685 | |
| 686 gaim_roomlist_set_fields(irc->roomlist, fields); | |
| 687 | |
| 8352 | 688 buf = irc_format(irc, "v", "LIST"); |
| 689 irc_send(irc, buf); | |
| 690 g_free(buf); | |
| 8114 | 691 |
| 692 return irc->roomlist; | |
| 693 } | |
| 694 | |
| 695 static void irc_roomlist_cancel(GaimRoomlist *list) | |
| 696 { | |
| 697 GaimConnection *gc = gaim_account_get_connection(list->account); | |
| 698 struct irc_conn *irc; | |
| 699 | |
| 700 if (gc == NULL) | |
| 701 return; | |
| 702 | |
| 703 irc = gc->proto_data; | |
| 704 | |
| 705 gaim_roomlist_set_in_progress(list, FALSE); | |
| 706 | |
| 707 if (irc->roomlist == list) { | |
| 708 irc->roomlist = NULL; | |
| 709 gaim_roomlist_unref(list); | |
| 710 } | |
| 711 } | |
| 712 | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
713 static GaimPluginProtocolInfo prpl_info = |
| 2086 | 714 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
715 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL, |
| 9475 | 716 NULL, /* user_splits */ |
| 717 NULL, /* protocol_options */ | |
| 9951 | 718 NO_BUDDY_ICONS, /* icon_spec */ |
| 719 irc_blist_icon, /* list_icon */ | |
| 720 irc_blist_emblems, /* list_emblems */ | |
| 9475 | 721 NULL, /* status_text */ |
| 722 NULL, /* tooltip_text */ | |
| 9951 | 723 irc_status_types, /* away_states */ |
| 9475 | 724 NULL, /* blist_node_menu */ |
| 9951 | 725 irc_chat_join_info, /* chat_info */ |
| 9754 | 726 irc_chat_info_defaults, /* chat_info_defaults */ |
| 9951 | 727 irc_login, /* login */ |
| 728 irc_close, /* close */ | |
| 729 irc_im_send, /* send_im */ | |
| 9475 | 730 NULL, /* set_info */ |
| 731 NULL, /* send_typing */ | |
| 9951 | 732 irc_get_info, /* get_info */ |
| 733 irc_set_status, /* set_status */ | |
| 9475 | 734 NULL, /* set_idle */ |
| 735 NULL, /* change_passwd */ | |
| 9951 | 736 irc_add_buddy, /* add_buddy */ |
| 9475 | 737 NULL, /* add_buddies */ |
| 9951 | 738 irc_remove_buddy, /* remove_buddy */ |
| 9475 | 739 NULL, /* remove_buddies */ |
| 9741 | 740 NULL, /* add_permit */ |
| 741 NULL, /* add_deny */ | |
| 742 NULL, /* rem_permit */ | |
| 743 NULL, /* rem_deny */ | |
| 744 NULL, /* set_permit_deny */ | |
| 9475 | 745 NULL, /* warn */ |
| 9951 | 746 irc_chat_join, /* join_chat */ |
| 9475 | 747 NULL, /* reject_chat */ |
| 9951 | 748 irc_get_chat_name, /* get_chat_name */ |
| 749 irc_chat_invite, /* chat_invite */ | |
| 750 irc_chat_leave, /* chat_leave */ | |
| 9475 | 751 NULL, /* chat_whisper */ |
| 9951 | 752 irc_chat_send, /* chat_send */ |
| 9475 | 753 NULL, /* keepalive */ |
| 754 NULL, /* register_user */ | |
| 755 NULL, /* get_cb_info */ | |
| 756 NULL, /* get_cb_away */ | |
| 757 NULL, /* alias_buddy */ | |
| 758 NULL, /* group_buddy */ | |
| 759 NULL, /* rename_group */ | |
| 760 NULL, /* buddy_free */ | |
| 761 NULL, /* convo_closed */ | |
| 762 NULL, /* normalize */ | |
| 763 NULL, /* set_buddy_icon */ | |
| 764 NULL, /* remove_group */ | |
| 765 NULL, /* get_cb_real_name */ | |
| 9951 | 766 irc_chat_set_topic, /* set_chat_topic */ |
| 9475 | 767 NULL, /* find_blist_chat */ |
| 768 irc_roomlist_get_list, /* roomlist_get_list */ | |
| 769 irc_roomlist_cancel, /* roomlist_cancel */ | |
| 770 NULL, /* roomlist_expand_category */ | |
| 771 NULL, /* can_receive_file */ | |
| 772 irc_dccsend_send_file /* send_file */ | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
773 }; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
774 |
| 8114 | 775 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
776 static GaimPluginInfo info = |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
777 { |
| 9943 | 778 GAIM_PLUGIN_MAGIC, |
| 779 GAIM_MAJOR_VERSION, | |
| 780 GAIM_MINOR_VERSION, | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
781 GAIM_PLUGIN_PROTOCOL, /**< type */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
782 NULL, /**< ui_requirement */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
783 0, /**< flags */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
784 NULL, /**< dependencies */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
785 GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
786 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
787 "prpl-irc", /**< id */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
788 "IRC", /**< name */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
789 VERSION, /**< version */ |
| 6333 | 790 N_("IRC Protocol Plugin"), /** summary */ |
| 791 N_("The IRC Protocol Plugin that Sucks Less"), /** description */ | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
792 NULL, /**< author */ |
|
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6369
diff
changeset
|
793 GAIM_WEBSITE, /**< homepage */ |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
794 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
795 NULL, /**< load */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
796 NULL, /**< unload */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
797 NULL, /**< destroy */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
798 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
799 NULL, /**< ui_info */ |
| 8993 | 800 &prpl_info, /**< extra_info */ |
| 801 NULL, | |
| 9015 | 802 irc_actions |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
803 }; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
804 |
| 6333 | 805 static void _init_plugin(GaimPlugin *plugin) |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
806 { |
|
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
807 GaimAccountUserSplit *split; |
|
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
808 GaimAccountOption *option; |
|
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
809 |
| 6333 | 810 split = gaim_account_user_split_new(_("Server"), IRC_DEFAULT_SERVER, '@'); |
|
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
811 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
|
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
812 |
|
6459
b52870734c21
[gaim-migrate @ 6968]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
813 option = gaim_account_option_int_new(_("Port"), "port", IRC_DEFAULT_PORT); |
| 6333 | 814 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5618
diff
changeset
|
815 |
| 10258 | 816 option = gaim_account_option_string_new(_("Encodings"), "encoding", IRC_DEFAULT_CHARSET); |
| 6333 | 817 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
818 |
| 7323 | 819 option = gaim_account_option_string_new(_("Username"), "username", ""); |
| 820 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 821 | |
| 10002 | 822 option = gaim_account_option_string_new(_("Real name"), "realname", ""); |
| 823 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 824 | |
| 10365 | 825 option = gaim_account_option_bool_new(_("Use SSL"), "ssl", FALSE); |
| 826 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); | |
| 827 | |
| 6333 | 828 _irc_plugin = plugin; |
| 9130 | 829 |
| 830 irc_register_commands(); | |
| 2086 | 831 } |
| 832 | |
| 6333 | 833 GAIM_INIT_PLUGIN(irc, _init_plugin, info); |
