Wed, 28 Jan 2009 03:40:55 +0000
Use 'bos.oscar.aol.com' as the common name for the initial BOS connection.
The redirect from the login server to first BOS server doesn't include the
magic TLV with a name to use for comparison; I missed this because I cached
all those certificates before I fixed the code for the other SNAC family
servers.
| 8273 | 1 | /** |
| 15884 | 2 | * @file gtk_eventloop.c Purple Event Loop API (gtk implementation) |
|
16254
eeb2bba4dc94
Rename the Doxygen group from gtkui to pidgin.
Richard Laager <rlaager@pidgin.im>
parents:
15931
diff
changeset
|
3 | * @ingroup pidgin |
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
4 | */ |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
5 | |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
6 | /* pidgin |
| 8273 | 7 | * |
|
15931
716b5fac1895
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents:
15884
diff
changeset
|
8 | * Pidgin is the legal property of its developers, whose names are too numerous |
| 8273 | 9 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 10 | * source distribution. | |
| 11 | * | |
| 12 | * This program is free software; you can redistribute it and/or modify | |
| 13 | * it under the terms of the GNU General Public License as published by | |
| 14 | * the Free Software Foundation; either version 2 of the License, or | |
| 15 | * (at your option) any later version. | |
| 16 | * | |
| 17 | * This program is distributed in the hope that it will be useful, | |
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 20 | * GNU General Public License for more details. | |
| 21 | * | |
| 22 | * You should have received a copy of the GNU General Public License | |
| 23 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18075
diff
changeset
|
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8273 | 25 | */ |
| 26 | ||
| 27 | #include <glib.h> | |
| 28 | #include "gtkeventloop.h" | |
| 29 | #include "eventloop.h" | |
|
14793
66e32c262451
[gaim-migrate @ 17487]
Daniel Atallah <datallah@pidgin.im>
parents:
14792
diff
changeset
|
30 | #ifdef _WIN32 |
|
14792
02a5df4343f7
[gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents:
14253
diff
changeset
|
31 | #include "win32dep.h" |
|
14793
66e32c262451
[gaim-migrate @ 17487]
Daniel Atallah <datallah@pidgin.im>
parents:
14792
diff
changeset
|
32 | #endif |
| 8273 | 33 | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
34 | #define PIDGIN_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) |
|
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
35 | #define PIDGIN_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) |
| 8273 | 36 | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
37 | typedef struct _PidginIOClosure { |
| 15884 | 38 | PurpleInputFunction function; |
| 8273 | 39 | guint result; |
| 40 | gpointer data; | |
| 41 | ||
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
42 | } PidginIOClosure; |
| 8273 | 43 | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
44 | static void pidgin_io_destroy(gpointer data) |
| 8273 | 45 | { |
| 46 | g_free(data); | |
| 47 | } | |
| 48 | ||
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
49 | static gboolean pidgin_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) |
| 8273 | 50 | { |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
51 | PidginIOClosure *closure = data; |
| 15884 | 52 | PurpleInputCondition purple_cond = 0; |
| 8273 | 53 | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
54 | if (condition & PIDGIN_READ_COND) |
| 15884 | 55 | purple_cond |= PURPLE_INPUT_READ; |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
56 | if (condition & PIDGIN_WRITE_COND) |
| 15884 | 57 | purple_cond |= PURPLE_INPUT_WRITE; |
| 8273 | 58 | |
| 59 | #if 0 | |
| 15884 | 60 | purple_debug(PURPLE_DEBUG_MISC, "gtk_eventloop", |
| 8273 | 61 | "CLOSURE: callback for %d, fd is %d\n", |
| 62 | closure->result, g_io_channel_unix_get_fd(source)); | |
| 63 | #endif | |
| 64 | ||
|
11065
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
65 | #ifdef _WIN32 |
| 15884 | 66 | if(! purple_cond) { |
|
15697
78ddac185d80
winpidgin warning fixes
Daniel Atallah <datallah@pidgin.im>
parents:
15562
diff
changeset
|
67 | #ifdef DEBUG |
| 15884 | 68 | purple_debug(PURPLE_DEBUG_MISC, "gtk_eventloop", |
|
11065
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
69 | "CLOSURE received GIOCondition of 0x%x, which does not" |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
70 | " match 0x%x (READ) or 0x%x (WRITE)\n", |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
71 | condition, PIDGIN_READ_COND, PIDGIN_WRITE_COND); |
|
11065
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
72 | #endif /* DEBUG */ |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
73 | |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
74 | return TRUE; |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
75 | } |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
76 | #endif /* _WIN32 */ |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
77 | |
|
895342350443
[gaim-migrate @ 13046]
Christopher O'Brien <siege@pidgin.im>
parents:
8807
diff
changeset
|
78 | closure->function(closure->data, g_io_channel_unix_get_fd(source), |
| 15884 | 79 | purple_cond); |
| 8273 | 80 | |
| 81 | return TRUE; | |
| 82 | } | |
| 83 | ||
| 15884 | 84 | static guint pidgin_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, |
| 8273 | 85 | gpointer data) |
| 86 | { | |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
87 | PidginIOClosure *closure = g_new0(PidginIOClosure, 1); |
| 8273 | 88 | GIOChannel *channel; |
| 89 | GIOCondition cond = 0; | |
|
23119
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
90 | #ifdef _WIN32 |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
91 | static int use_glib_io_channel = -1; |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
92 | |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
93 | if (use_glib_io_channel == -1) |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
94 | use_glib_io_channel = (g_getenv("PIDGIN_GLIB_IO_CHANNEL") != NULL) ? 1 : 0; |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
95 | #endif |
| 8273 | 96 | |
| 97 | closure->function = function; | |
| 98 | closure->data = data; | |
| 99 | ||
| 15884 | 100 | if (condition & PURPLE_INPUT_READ) |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
101 | cond |= PIDGIN_READ_COND; |
| 15884 | 102 | if (condition & PURPLE_INPUT_WRITE) |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
103 | cond |= PIDGIN_WRITE_COND; |
| 8273 | 104 | |
|
14792
02a5df4343f7
[gaim-migrate @ 17486]
Daniel Atallah <datallah@pidgin.im>
parents:
14253
diff
changeset
|
105 | #ifdef _WIN32 |
|
23119
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
106 | if (use_glib_io_channel == 0) |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
107 | channel = wpurple_g_io_channel_win32_new_socket(fd); |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
108 | else |
|
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
109 | #endif |
| 8280 | 110 | channel = g_io_channel_unix_new(fd); |
|
23119
2f1afd977845
Add the ability on win32 to choose at runtime whether we use the GIOChannel
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
111 | |
| 8273 | 112 | closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
113 | pidgin_io_invoke, closure, pidgin_io_destroy); |
| 8273 | 114 | |
| 115 | #if 0 | |
| 15884 | 116 | purple_debug(PURPLE_DEBUG_MISC, "gtk_eventloop", |
| 8273 | 117 | "CLOSURE: adding input watcher %d for fd %d\n", |
| 8280 | 118 | closure->result, fd); |
| 8273 | 119 | #endif |
| 120 | ||
| 121 | g_io_channel_unref(channel); | |
| 122 | return closure->result; | |
| 123 | } | |
| 124 | ||
| 15884 | 125 | static PurpleEventLoopUiOps eventloop_ops = |
| 8273 | 126 | { |
| 127 | g_timeout_add, | |
|
15729
6932ac4e5b3d
Change out source_remove and input_remove eventloop functions to return
Mark Doliner <markdoliner@pidgin.im>
parents:
15697
diff
changeset
|
128 | g_source_remove, |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
129 | pidgin_input_add, |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15729
diff
changeset
|
130 | g_source_remove, |
|
16752
e6bcb1628c57
Patch from John 'rekkanoryo' Bailey to add the padding struct members in pidgin
Gary Kramlich <grim@reaperworld.com>
parents:
16254
diff
changeset
|
131 | NULL, /* input_get_error */ |
|
18075
1e4bb0043a98
It's GLIB_CHECK_VERSION, not GLIB_VERSION_CHECK.
Richard Laager <rlaager@pidgin.im>
parents:
18070
diff
changeset
|
132 | #if GLIB_CHECK_VERSION(2,14,0) |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
133 | g_timeout_add_seconds, |
|
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
134 | #else |
|
16752
e6bcb1628c57
Patch from John 'rekkanoryo' Bailey to add the padding struct members in pidgin
Gary Kramlich <grim@reaperworld.com>
parents:
16254
diff
changeset
|
135 | NULL, |
|
18070
79c7fe0d8e4b
Wire everything up and document it.
Richard Laager <rlaager@pidgin.im>
parents:
18068
diff
changeset
|
136 | #endif |
|
16752
e6bcb1628c57
Patch from John 'rekkanoryo' Bailey to add the padding struct members in pidgin
Gary Kramlich <grim@reaperworld.com>
parents:
16254
diff
changeset
|
137 | NULL, |
|
e6bcb1628c57
Patch from John 'rekkanoryo' Bailey to add the padding struct members in pidgin
Gary Kramlich <grim@reaperworld.com>
parents:
16254
diff
changeset
|
138 | NULL, |
|
e6bcb1628c57
Patch from John 'rekkanoryo' Bailey to add the padding struct members in pidgin
Gary Kramlich <grim@reaperworld.com>
parents:
16254
diff
changeset
|
139 | NULL |
| 8273 | 140 | }; |
| 141 | ||
| 15884 | 142 | PurpleEventLoopUiOps * |
|
15562
8c8249fe5e3c
gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
143 | pidgin_eventloop_get_ui_ops(void) |
| 8273 | 144 | { |
| 145 | return &eventloop_ops; | |
| 146 | } |