3 * Purple is the legal property of its developers, whose names are too numerous
4 * to list here. Please refer to the COPYRIGHT file distributed with this
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
22 #ifndef PURPLE_CONNECTION_H
23 #define PURPLE_CONNECTION_H
26 * @section_id: libpurple-connection
27 * @short_description: <filename>connection.h</filename>
28 * @title: Connection API
29 * @see_also: <link linkend="chapter-signals-connection">Connection signals</link>
34 #define PURPLE_TYPE_CONNECTION purple_connection_get_type()
36 typedef struct _PurpleConnection PurpleConnection
;
38 #define PURPLE_TYPE_CONNECTION_UI_OPS (purple_connection_ui_ops_get_type())
40 typedef struct _PurpleConnectionUiOps PurpleConnectionUiOps
;
42 #define PURPLE_TYPE_CONNECTION_ERROR_INFO (purple_connection_error_info_get_type())
44 typedef struct _PurpleConnectionErrorInfo PurpleConnectionErrorInfo
;
47 * PurpleConnectionFlags:
48 * @PURPLE_CONNECTION_FLAG_HTML: Connection sends/receives in 'HTML'
49 * @PURPLE_CONNECTION_FLAG_NO_BGCOLOR: Connection does not send/receive
51 * @PURPLE_CONNECTION_FLAG_AUTO_RESP: Send auto responses when away
52 * @PURPLE_CONNECTION_FLAG_FORMATTING_WBFO: The text buffer must be formatted
54 * @PURPLE_CONNECTION_FLAG_NO_NEWLINES: No new lines are allowed in outgoing
56 * @PURPLE_CONNECTION_FLAG_NO_FONTSIZE: Connection does not send/receive font
58 * @PURPLE_CONNECTION_FLAG_NO_URLDESC: Connection does not support descriptions
60 * @PURPLE_CONNECTION_FLAG_NO_IMAGES: Connection does not support sending of
62 * @PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY: Connection supports sending
63 * and receiving custom smileys
64 * @PURPLE_CONNECTION_FLAG_SUPPORT_MOODS: Connection supports setting moods
65 * @PURPLE_CONNECTION_FLAG_SUPPORT_MOOD_MESSAGES: Connection supports setting
68 * Flags to change behavior of the client for a given connection.
70 typedef enum /*< flags >*/
72 PURPLE_CONNECTION_FLAG_HTML
= 0x0001,
73 PURPLE_CONNECTION_FLAG_NO_BGCOLOR
= 0x0002,
74 PURPLE_CONNECTION_FLAG_AUTO_RESP
= 0x0004,
75 PURPLE_CONNECTION_FLAG_FORMATTING_WBFO
= 0x0008,
76 PURPLE_CONNECTION_FLAG_NO_NEWLINES
= 0x0010,
77 PURPLE_CONNECTION_FLAG_NO_FONTSIZE
= 0x0020,
78 PURPLE_CONNECTION_FLAG_NO_URLDESC
= 0x0040,
79 PURPLE_CONNECTION_FLAG_NO_IMAGES
= 0x0080,
80 PURPLE_CONNECTION_FLAG_ALLOW_CUSTOM_SMILEY
= 0x0100,
81 PURPLE_CONNECTION_FLAG_SUPPORT_MOODS
= 0x0200,
82 PURPLE_CONNECTION_FLAG_SUPPORT_MOOD_MESSAGES
= 0x0400
83 } PurpleConnectionFlags
;
86 * PurpleConnectionState:
87 * @PURPLE_CONNECTION_DISCONNECTED: Disconnected.
88 * @PURPLE_CONNECTION_CONNECTED: Connected.
89 * @PURPLE_CONNECTION_CONNECTING: Connecting.
93 PURPLE_CONNECTION_DISCONNECTED
= 0,
94 PURPLE_CONNECTION_CONNECTED
,
95 PURPLE_CONNECTION_CONNECTING
96 } PurpleConnectionState
;
98 #define PURPLE_CONNECTION_ERROR purple_connection_error_quark()
101 * purple_connection_error_quark:
103 * Error domain for Purple connection errors. Errors in this domain will be
104 * from the #PurpleConnectionError enum.
106 GQuark
purple_connection_error_quark(void);
109 * PurpleConnectionError:
110 * @PURPLE_CONNECTION_ERROR_NETWORK_ERROR: There was an error sending or
111 * receiving on the network socket, or there was some protocol error
112 * (such as the server sending malformed data).
113 * @PURPLE_CONNECTION_ERROR_INVALID_USERNAME: The username supplied was not
115 * @PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED: The username, password or
116 * some other credential was incorrect. Use
117 * #PURPLE_CONNECTION_ERROR_INVALID_USERNAME instead if the username
118 * is known to be invalid.
119 * @PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE: libpurple doesn't speak
120 * any of the authentication methods the server offered.
121 * @PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT: libpurple was built without SSL
122 * support, and the connection needs SSL.
123 * @PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR: There was an error negotiating
124 * SSL on this connection, or the server does not support encryption
125 * but an account option was set to require it.
126 * @PURPLE_CONNECTION_ERROR_NAME_IN_USE: Someone is already connected to the
127 * server using the name you are trying to connect with.
128 * @PURPLE_CONNECTION_ERROR_INVALID_SETTINGS: The username/server/other
129 * preference for the account isn't valid. For instance, on IRC the
130 * username cannot contain white space. This reason should not be used
131 * for incorrect passwords etc: use
132 * #PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED for that.
133 * @PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED: The server did not provide a
135 * @PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED: The server's SSL certificate could
137 * @PURPLE_CONNECTION_ERROR_CERT_EXPIRED: The server's SSL certificate has
139 * @PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED: The server's SSL certificate is
141 * @PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH: The server's SSL
142 * certificate did not match its hostname.
143 * @PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH: The server's SSL
144 * certificate does not have the expected fingerprint.
145 * @PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED: The server's SSL certificate is
147 * @PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR: There was some other error
148 * validating the server's SSL certificate.
149 * @PURPLE_CONNECTION_ERROR_OTHER_ERROR: Some other error occurred which fits
150 * into none of the other categories.
152 * Possible errors that can cause a connection to be closed.
156 PURPLE_CONNECTION_ERROR_NETWORK_ERROR
= 0,
157 PURPLE_CONNECTION_ERROR_INVALID_USERNAME
= 1,
158 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED
= 2,
159 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE
= 3,
160 PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT
= 4,
161 PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR
= 5,
162 PURPLE_CONNECTION_ERROR_NAME_IN_USE
= 6,
164 /* TODO This reason really shouldn't be necessary. Usernames and
165 * other account preferences should be validated when the
166 * account is created. */
167 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS
= 7,
169 PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED
= 8,
170 PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED
= 9,
171 PURPLE_CONNECTION_ERROR_CERT_EXPIRED
= 10,
172 PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED
= 11,
173 PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH
= 12,
174 PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH
= 13,
175 PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED
= 14,
176 PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR
= 15,
178 /* purple_connection_error() in connection.c uses the fact that
179 * this is the last member of the enum when sanity-checking; if other
180 * reasons are added after it, the check must be updated.
182 PURPLE_CONNECTION_ERROR_OTHER_ERROR
= 16
183 } PurpleConnectionError
;
186 * PurpleConnectionErrorInfo:
187 * @type: The type of error.
188 * @description: A localised, human-readable description of the error.
190 * Holds the type of an error along with its description.
192 struct _PurpleConnectionErrorInfo
194 PurpleConnectionError type
;
201 #include "protocol.h"
206 * PurpleConnectionUiOps:
207 * @connect_progress: When an account is connecting, this operation is called to
208 * notify the UI of what is happening, as well as which @step
209 * out of @step_count has been reached (which might be
210 * displayed as a progress bar).
211 * <sbr/>See purple_connection_update_progress().
212 * @connected: Called when a connection is established (just before the
213 * <link linkend="connections-signed-on"><literal>"signed-on"</literal></link>
215 * @disconnected: Called when a connection is ended (between the
216 * <link linkend="connections-signing-off"><literal>"signing-off"</literal></link>
217 * and <link linkend="connections-signed-off"><literal>"signed-off"</literal></link>
219 * @notice: Used to display connection-specific notices. (Pidgin's Gtk user
220 * interface implements this as a no-op; purple_connection_notice(),
221 * which uses this operation, is not used by any of the protocols
222 * shipped with libpurple.)
223 * @network_connected: Called when libpurple discovers that the computer's
224 * network connection is active. On Linux, this uses
225 * Network Manager if available; on Windows, it uses
226 * Win32's network change notification infrastructure.
227 * @network_disconnected: Called when libpurple discovers that the computer's
228 * network connection has gone away.
229 * @report_disconnect: Called when an error causes a connection to be
230 * disconnected. Called before @disconnected.
231 * <sbr/>See purple_connection_error().
232 * <sbr/>@reason: why the connection ended, if known, or
233 * #PURPLE_CONNECTION_ERROR_OTHER_ERROR, if not.
234 * <sbr/>@text: a localized message describing the
235 * disconnection in more detail to the user.
237 * Connection UI operations. Used to notify the user of changes to
238 * connections, such as being disconnected, and to respond to the
239 * underlying network connection appearing and disappearing. UIs should
240 * call #purple_connections_set_ui_ops() with an instance of this struct.
242 * See <link linkend="chapter-ui-ops">List of <literal>UiOps</literal> Structures</link>
244 struct _PurpleConnectionUiOps
246 void (*connect_progress
)(PurpleConnection
*gc
,
251 void (*connected
)(PurpleConnection
*gc
);
252 void (*disconnected
)(PurpleConnection
*gc
);
254 void (*notice
)(PurpleConnection
*gc
, const char *text
);
256 void (*network_connected
)(void);
257 void (*network_disconnected
)(void);
259 void (*report_disconnect
)(PurpleConnection
*gc
,
260 PurpleConnectionError reason
,
264 void (*_purple_reserved1
)(void);
265 void (*_purple_reserved2
)(void);
266 void (*_purple_reserved3
)(void);
267 void (*_purple_reserved4
)(void);
272 /**************************************************************************/
274 /**************************************************************************/
277 * purple_connection_get_type:
279 * Returns: The #GType for the Connection object.
281 G_DECLARE_FINAL_TYPE(PurpleConnection
, purple_connection
, PURPLE
, CONNECTION
, GObject
)
284 * purple_connection_error_info_get_type:
286 * Returns: The #GType for the #PurpleConnectionErrorInfo boxed structure.
288 GType
purple_connection_error_info_get_type(void);
291 * purple_connection_set_state:
292 * @gc: The connection.
293 * @state: The connection state.
295 * Sets the connection state. Protocols should call this and pass in
296 * the state #PURPLE_CONNECTION_CONNECTED when the account is completely
297 * signed on. What does it mean to be completely signed on? If
298 * the core can call protocol's set_status, and it successfully changes
299 * your status, then the account is online.
301 void purple_connection_set_state(PurpleConnection
*gc
, PurpleConnectionState state
);
304 * purple_connection_set_flags:
305 * @gc: The connection.
308 * Sets the connection flags.
310 void purple_connection_set_flags(PurpleConnection
*gc
, PurpleConnectionFlags flags
);
313 * purple_connection_set_display_name:
314 * @gc: The connection.
315 * @name: The displayed name.
317 * Sets the connection's displayed name.
319 void purple_connection_set_display_name(PurpleConnection
*gc
, const char *name
);
322 * purple_connection_set_protocol_data:
323 * @connection: The PurpleConnection.
324 * @proto_data: The protocol data to set for the connection.
326 * Sets the protocol data for a connection.
328 void purple_connection_set_protocol_data(PurpleConnection
*connection
, void *proto_data
);
331 * purple_connection_get_state:
332 * @gc: The connection.
334 * Returns the connection state.
336 * Returns: The connection state.
338 PurpleConnectionState
purple_connection_get_state(PurpleConnection
*gc
);
341 * purple_connection_get_flags:
342 * @gc: The connection.
344 * Returns the connection flags.
346 * Returns: The connection flags.
348 PurpleConnectionFlags
purple_connection_get_flags(PurpleConnection
*gc
);
351 * PURPLE_CONNECTION_IS_CONNECTED:
353 * Returns TRUE if the account is connected, otherwise returns FALSE.
355 * Returns: TRUE if the account is connected, otherwise returns FALSE.
357 #define PURPLE_CONNECTION_IS_CONNECTED(gc) \
358 (purple_connection_get_state(gc) == PURPLE_CONNECTION_CONNECTED)
361 * purple_connection_is_disconnecting:
362 * @param gc The connection.
364 * Checks, if connection is in disconnecting state.
366 * Returns: %TRUE, if the account is disconnecting.
369 purple_connection_is_disconnecting(PurpleConnection
*gc
);
372 * purple_connection_get_account:
373 * @gc: The connection.
375 * Returns the connection's account.
377 * Returns: (transfer none): The connection's account.
379 PurpleAccount
*purple_connection_get_account(PurpleConnection
*gc
);
382 * purple_connection_get_protocol:
383 * @gc: The connection.
385 * Returns the protocol managing a connection.
387 * Returns: (transfer none): The protocol.
389 PurpleProtocol
*purple_connection_get_protocol(PurpleConnection
*gc
);
392 * purple_connection_get_password:
393 * @gc: The connection.
395 * Returns the connection's password.
397 * Returns: The connection's password.
399 const char *purple_connection_get_password(PurpleConnection
*gc
);
402 * purple_connection_get_active_chats:
403 * @gc: The connection.
405 * Returns a list of active chat conversations on a connection.
407 * Returns: (element-type PurpleChatConversation) (transfer none): The active
408 * chats on the connection.
410 GSList
*purple_connection_get_active_chats(PurpleConnection
*gc
);
413 * purple_connection_get_display_name:
414 * @gc: The connection.
416 * Returns the connection's displayed name.
418 * Returns: The connection's displayed name.
420 const char *purple_connection_get_display_name(PurpleConnection
*gc
);
423 * purple_connection_get_protocol_data:
424 * @gc: The PurpleConnection.
426 * Gets the protocol data from a connection.
428 * Returns: The protocol data for the connection.
430 void *purple_connection_get_protocol_data(PurpleConnection
*gc
);
433 * purple_connection_update_progress:
434 * @gc: The connection.
435 * @text: Information on the current step.
436 * @step: The current step.
437 * @count: The total number of steps.
439 * Updates the connection progress.
441 void purple_connection_update_progress(PurpleConnection
*gc
, const char *text
,
442 size_t step
, size_t count
);
445 * purple_connection_notice:
446 * @gc: The connection.
447 * @text: The notice text.
449 * Displays a connection-specific notice.
451 void purple_connection_notice(PurpleConnection
*gc
, const char *text
);
454 * purple_connection_error:
455 * @gc: the connection which is closing.
456 * @reason: why the connection is closing.
457 * @description: a localized description of the error (not %NULL ).
459 * Closes a connection with an error and a human-readable description of the
463 purple_connection_error(PurpleConnection
*gc
,
464 PurpleConnectionError reason
,
465 const char *description
);
468 * purple_connection_get_error_info:
469 * @gc: The connection.
471 * Returns the #PurpleConnectionErrorInfo instance of a connection if an
474 * Returns: The #PurpleConnectionErrorInfo instance of the connection if an
475 * error exists, %NULL otherwise.
477 PurpleConnectionErrorInfo
*
478 purple_connection_get_error_info(PurpleConnection
*gc
);
481 * purple_connection_ssl_error:
483 * Closes a connection due to an SSL error; this is basically a shortcut to
484 * turning the #PurpleSslErrorType into a #PurpleConnectionError and a
485 * human-readable string and then calling purple_connection_error().
488 purple_connection_ssl_error (PurpleConnection
*gc
,
489 PurpleSslErrorType ssl_error
);
492 * purple_connection_g_error
493 * @gc: Connection the error is associated with
494 * @error: Error information
496 * Closes a connection similar to purple_connection_error(), but
497 * takes a GError which is then converted to purple error codes.
499 * This function ignores G_IO_ERROR_CANCELLED, returning without
500 * closing the connection. This can be used as a shortcut when
501 * cancelling connections, as this is commonly done when shutting
502 * down a connection. If G_IO_ERROR_CANCELLED needs to be caught,
503 * do so with g_error_matches() prior to calling this function.
506 purple_connection_g_error(PurpleConnection
*pc
,
507 const GError
*error
);
510 * purple_connection_take_error
511 * @gc: Connection the error is associated with
512 * @error: (transfer full): Error information
514 * Closes a connection similar to purple_connection_error(), but
515 * takes a GError which is then converted to purple error codes.
517 * This function is equivalent to purple_connection_g_error(),
518 * except that it takes ownership of the GError.
521 purple_connection_take_error(PurpleConnection
*pc
,
525 * purple_connection_error_is_fatal:
527 * Reports whether a disconnection reason is fatal (in which case the account
528 * should probably not be automatically reconnected) or transient (so
529 * auto-reconnection is a good idea).
530 * For instance, #PURPLE_CONNECTION_ERROR_NETWORK_ERROR is a temporary error,
531 * which might be caused by losing the network connection, so <literal>
532 * purple_connection_error_is_fatal (PURPLE_CONNECTION_ERROR_NETWORK_ERROR)</literal>
533 * is %FALSE. On the other hand,
534 * #PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED probably indicates a
535 * misconfiguration of the account which needs the user to go fix it up, so
536 * <literal> purple_connection_error_is_fatal
537 * (PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED)</literal> is %TRUE.
539 * Returns: %TRUE if the account should not be automatically reconnected, and
543 purple_connection_error_is_fatal (PurpleConnectionError reason
);
546 * purple_connection_update_last_received:
547 * @gc: The connection.
549 * Indicate that a packet was received on the connection.
550 * Set by the protocol to avoid sending unneeded keepalives.
552 void purple_connection_update_last_received(PurpleConnection
*gc
);
554 /**************************************************************************/
555 /* Connections API */
556 /**************************************************************************/
559 * purple_connections_disconnect_all:
561 * Disconnects from all connections.
563 void purple_connections_disconnect_all(void);
566 * purple_connections_get_all:
568 * Returns a list of all active connections. This does not
569 * include connections that are in the process of connecting.
571 * Returns: (element-type PurpleConnection) (transfer none): A list of all
572 * active connections.
574 GList
*purple_connections_get_all(void);
577 * purple_connections_get_connecting:
579 * Returns a list of all connections in the process of connecting.
581 * Returns: (element-type PurpleConnection) (transfer none): A list of
582 * connecting connections.
584 GList
*purple_connections_get_connecting(void);
586 /**************************************************************************/
587 /* UI Registration Functions */
588 /**************************************************************************/
591 * purple_connection_ui_ops_get_type:
593 * Returns: The #GType for the #PurpleConnectionUiOps boxed structure.
595 GType
purple_connection_ui_ops_get_type(void);
598 * purple_connections_set_ui_ops:
599 * @ops: The UI operations structure.
601 * Sets the UI operations structure to be used for connections.
603 void purple_connections_set_ui_ops(PurpleConnectionUiOps
*ops
);
606 * purple_connections_get_ui_ops:
608 * Returns the UI operations structure used for connections.
610 * Returns: The UI operations structure in use.
612 PurpleConnectionUiOps
*purple_connections_get_ui_ops(void);
614 /**************************************************************************/
615 /* Connections Subsystem */
616 /**************************************************************************/
619 * purple_connections_init:
621 * Initializes the connections subsystem.
623 void purple_connections_init(void);
626 * purple_connections_uninit:
628 * Uninitializes the connections subsystem.
630 void purple_connections_uninit(void);
633 * purple_connections_get_handle:
635 * Returns the handle to the connections subsystem.
637 * Returns: The connections subsystem handle.
639 void *purple_connections_get_handle(void);
644 #endif /* PURPLE_CONNECTION_H */