Mercurial > pidgin
comparison src/session.c @ 8280:084ed9f7ac19
[gaim-migrate @ 9004]
Soem tweaks from Scott Lamb for the event loop code.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Tue, 17 Feb 2004 08:43:44 +0000 |
| parents | f24172f53650 |
| children | 56360561af5e |
comparison
equal
deleted
inserted
replaced
| 8279:319448d52b33 | 8280:084ed9f7ac19 |
|---|---|
| 44 static gboolean had_first_save = FALSE; | 44 static gboolean had_first_save = FALSE; |
| 45 gboolean session_managed = FALSE; | 45 gboolean session_managed = FALSE; |
| 46 | 46 |
| 47 /* ICE belt'n'braces stuff */ | 47 /* ICE belt'n'braces stuff */ |
| 48 | 48 |
| 49 struct ice_connection_info { | |
| 50 IceConn connection; | |
| 51 guint input_id; | |
| 52 }; | |
| 53 | |
| 49 static void ice_process_messages(gpointer data, gint fd, | 54 static void ice_process_messages(gpointer data, gint fd, |
| 50 GaimInputCondition condition) { | 55 GaimInputCondition condition) { |
| 51 IceConn connection = (IceConn)data; | 56 struct ice_connection_info *conninfo = (struct ice_connection_info*) data; |
| 52 IceProcessMessagesStatus status; | 57 IceProcessMessagesStatus status; |
| 53 | 58 |
| 54 /* please don't block... please! */ | 59 /* please don't block... please! */ |
| 55 status = IceProcessMessages(connection, NULL, NULL); | 60 status = IceProcessMessages(conninfo->connection, NULL, NULL); |
| 56 | 61 |
| 57 if (status == IceProcessMessagesIOError) { | 62 if (status == IceProcessMessagesIOError) { |
| 58 gaim_debug(GAIM_DEBUG_INFO, "Session Management", | 63 gaim_debug(GAIM_DEBUG_INFO, "Session Management", |
| 59 "ICE IO error, closing connection... "); | 64 "ICE IO error, closing connection... "); |
| 60 | 65 |
| 61 /* IO error, please disconnect */ | 66 /* IO error, please disconnect */ |
| 62 IceSetShutdownNegotiation(connection, False); | 67 IceSetShutdownNegotiation(conninfo->connection, False); |
| 63 IceCloseConnection(connection); | 68 IceCloseConnection(conninfo->connection); |
| 64 | 69 |
| 65 gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n"); | 70 gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n"); |
| 66 | 71 |
| 67 /* cancel the handler */ | 72 /* cancel the handler */ |
| 68 gaim_input_remove(IceConnectionNumber(connection)); | 73 gaim_input_remove(conninfo->input_id); |
| 69 } | 74 } |
| 70 } | 75 } |
| 71 | 76 |
| 72 static void ice_connection_watch(IceConn connection, IcePointer client_data, | 77 static void ice_connection_watch(IceConn connection, IcePointer client_data, |
| 73 Bool opening, IcePointer *watch_data) { | 78 Bool opening, IcePointer *watch_data) { |
| 79 struct ice_connection_info *conninfo = NULL; | |
| 80 | |
| 74 if (opening) { | 81 if (opening) { |
| 75 gaim_debug(GAIM_DEBUG_INFO, "Session Management", | 82 gaim_debug(GAIM_DEBUG_INFO, "Session Management", |
| 76 "Handling new ICE connection... "); | 83 "Handling new ICE connection... "); |
| 77 | 84 |
| 78 /* ensure ICE connection is not passed to child processes */ | 85 /* ensure ICE connection is not passed to child processes */ |
| 79 fcntl(IceConnectionNumber(connection), F_SETFD, FD_CLOEXEC); | 86 fcntl(IceConnectionNumber(connection), F_SETFD, FD_CLOEXEC); |
| 80 | 87 |
| 88 conninfo = g_new(struct ice_connection_info, 1); | |
| 89 conninfo->connection = connection; | |
| 90 | |
| 81 /* watch the connection */ | 91 /* watch the connection */ |
| 82 gaim_input_add(IceConnectionNumber(connection), GAIM_INPUT_READ, | 92 conninfo->input_id = gaim_input_add(IceConnectionNumber(connection), GAIM_INPUT_READ, |
| 83 ice_process_messages, connection); | 93 ice_process_messages, conninfo); |
| 94 *watch_data = conninfo; | |
| 84 } else { | 95 } else { |
| 85 gaim_debug(GAIM_DEBUG_INFO, "Session Management", | 96 gaim_debug(GAIM_DEBUG_INFO, "Session Management", |
| 86 "Handling closed ICE connection... "); | 97 "Handling closed ICE connection... "); |
| 87 | 98 |
| 88 /* stop watching it */ | 99 /* get the input ID back and stop watching it */ |
| 89 gaim_input_remove(IceConnectionNumber(connection)); | 100 conninfo = (struct ice_connection_info*) *watch_data; |
| 101 gaim_input_remove(conninfo->input_id); | |
| 102 g_free(conninfo); | |
| 90 } | 103 } |
| 91 | 104 |
| 92 gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n"); | 105 gaim_debug(GAIM_DEBUG_INFO, NULL, "done.\n"); |
| 93 } | 106 } |
| 94 | 107 |
