Merged adium-1.5.5 into adium-1.6 again.
Binary file Frameworks/libotr.framework/Versions/3.2.1/libotr has changed
--- a/Frameworks/libpurple.framework/Headers Fri Feb 22 01:20:08 2013 +0100
+++ b/Frameworks/libpurple.framework/Headers Fri Feb 22 01:22:17 2013 +0100
@@ -1,1 +1,1 @@
-Versions/2.10.7reafc92ac5f87/Headers
\ No newline at end of file
+Versions/2.10.7rc8e809dffa1d/Headers \ No newline at end of file
--- a/Frameworks/libpurple.framework/Resources Fri Feb 22 01:20:08 2013 +0100
+++ b/Frameworks/libpurple.framework/Resources Fri Feb 22 01:22:17 2013 +0100
@@ -1,1 +1,1 @@
-Versions/2.10.7reafc92ac5f87/Resources
\ No newline at end of file
+Versions/2.10.7rc8e809dffa1d/Resources \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/account.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1194 @@
+ * @file account.h Account API + * @see @ref account-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_ACCOUNT_H_ +#define _PURPLE_ACCOUNT_H_ +#include <glib-object.h> +/** @copydoc _PurpleAccountUiOps */ +typedef struct _PurpleAccountUiOps PurpleAccountUiOps; +/** @copydoc _PurpleAccount */ +typedef struct _PurpleAccount PurpleAccount; +typedef gboolean (*PurpleFilterAccountFunc)(PurpleAccount *account); +typedef void (*PurpleAccountRequestAuthorizationCb)(void *); +typedef void (*PurpleAccountRegistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data); +typedef void (*PurpleAccountUnregistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data); +typedef void (*PurpleSetPublicAliasSuccessCallback)(PurpleAccount *account, const char *new_alias); +typedef void (*PurpleSetPublicAliasFailureCallback)(PurpleAccount *account, const char *error); +typedef void (*PurpleGetPublicAliasSuccessCallback)(PurpleAccount *account, const char *alias); +typedef void (*PurpleGetPublicAliasFailureCallback)(PurpleAccount *account, const char *error); + * Account request types. + PURPLE_ACCOUNT_REQUEST_AUTHORIZATION = 0 /* Account authorization request */ +} PurpleAccountRequestType; + * Account request response types + PURPLE_ACCOUNT_RESPONSE_IGNORE = -2, + PURPLE_ACCOUNT_RESPONSE_DENY = -1, + PURPLE_ACCOUNT_RESPONSE_PASS = 0, + PURPLE_ACCOUNT_RESPONSE_ACCEPT = 1 +} PurpleAccountRequestResponse; +/** Account UI operations, used to notify the user of status changes and when + * buddies add this account to their buddy lists. +struct _PurpleAccountUiOps + /** A buddy who is already on this account's buddy list added this account + void (*notify_added)(PurpleAccount *account, + const char *remote_user, + /** This account's status changed. */ + void (*status_changed)(PurpleAccount *account, + /** Someone we don't have on our list added us; prompt to add them. */ + void (*request_add)(PurpleAccount *account, + const char *remote_user, + /** Prompt for authorization when someone adds this account to their buddy + * list. To authorize them to see this account's presence, call \a + * authorize_cb (\a user_data); otherwise call \a deny_cb (\a user_data); + * @return a UI-specific handle, as passed to #close_account_request. + void *(*request_authorize)(PurpleAccount *account, + const char *remote_user, + PurpleAccountRequestAuthorizationCb authorize_cb, + PurpleAccountRequestAuthorizationCb deny_cb, + /** Close a pending request for authorization. \a ui_handle is a handle + * as returned by #request_authorize. + void (*close_account_request)(void *ui_handle); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/** Structure representing an account. + char *username; /**< The username. */ + char *alias; /**< How you appear to yourself. */ + char *password; /**< The account password. */ + char *user_info; /**< User information. */ + char *buddy_icon_path; /**< The buddy icon's non-cached path. */ + gboolean remember_pass; /**< Remember the password. */ + char *protocol_id; /**< The ID of the protocol. */ + PurpleConnection *gc; /**< The connection handle. */ + gboolean disconnecting; /**< The account is currently disconnecting */ + GHashTable *settings; /**< Protocol-specific settings. */ + GHashTable *ui_settings; /**< UI-specific settings. */ + PurpleProxyInfo *proxy_info; /**< Proxy information. This will be set */ + /* to NULL when the account inherits */ + /* proxy settings from global prefs. */ + * TODO: Supplementing the next two linked lists with hash tables + * should help performance a lot when these lists are long. This + * matters quite a bit for protocols like MSN, where all your + * buddies are added to your permit list. Currently we have to + * iterate through the entire list if we want to check if someone + * is permitted or denied. We should do this for 3.0.0. + * Or maybe use a GTree. + GSList *permit; /**< Permit list. */ + GSList *deny; /**< Deny list. */ + PurplePrivacyType perm_deny; /**< The permit/deny setting. */ + GList *status_types; /**< Status types. */ + PurplePresence *presence; /**< Presence. */ + PurpleLog *system_log; /**< The system log */ + void *ui_data; /**< The UI can put data here. */ + PurpleAccountRegistrationCb registration_cb; + void *registration_cb_user_data; + gpointer priv; /**< Pointer to opaque private data. */ +/**************************************************************************/ +/** @name Account API */ +/**************************************************************************/ + * Creates a new account. + * @param username The username. + * @param protocol_id The protocol ID. + * @return The new account. +PurpleAccount *purple_account_new(const char *username, const char *protocol_id); + * @param account The account to destroy. +void purple_account_destroy(PurpleAccount *account); + * Connects to an account. + * @param account The account to connect to. +void purple_account_connect(PurpleAccount *account); + * Sets the callback for successful registration. + * @param account The account for which this callback should be used + * @param cb The callback + * @param user_data The user data passed to the callback +void purple_account_set_register_callback(PurpleAccount *account, PurpleAccountRegistrationCb cb, void *user_data); + * Registers an account. + * @param account The account to register. +void purple_account_register(PurpleAccount *account); + * Unregisters an account (deleting it from the server). + * @param account The account to unregister. + * @param cb Optional callback to be called when unregistration is complete + * @param user_data user data to pass to the callback +void purple_account_unregister(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data); + * Disconnects from an account. + * @param account The account to disconnect from. +void purple_account_disconnect(PurpleAccount *account); + * Notifies the user that the account was added to a remote user's + * This will present a dialog informing the user that he was added to the + * remote user's buddy list. + * @param account The account that was added. + * @param remote_user The name of the user that added this account. + * @param id The optional ID of the local account. Rarely used. + * @param alias The optional alias of the user. + * @param message The optional message sent from the user adding you. +void purple_account_notify_added(PurpleAccount *account, const char *remote_user, + const char *id, const char *alias, + * Notifies the user that the account was addded to a remote user's buddy + * list and asks ther user if they want to add the remote user to their buddy + * This will present a dialog informing the local user that the remote user + * added them to the remote user's buddy list and will ask if they want to add + * the remote user to the buddy list. + * @param account The account that was added. + * @param remote_user The name of the user that added this account. + * @param id The optional ID of the local account. Rarely used. + * @param alias The optional alias of the user. + * @param message The optional message sent from the user adding you. +void purple_account_request_add(PurpleAccount *account, const char *remote_user, + const char *id, const char *alias, + * Notifies the user that a remote user has wants to add the local user + * to his or her buddy list and requires authorization to do so. + * This will present a dialog informing the user of this and ask if the + * user authorizes or denies the remote user from adding him. + * @param account The account that was added + * @param remote_user The name of the user that added this account. + * @param id The optional ID of the local account. Rarely used. + * @param alias The optional alias of the remote user. + * @param message The optional message sent by the user wanting to add you. + * @param on_list Is the remote user already on the buddy list? + * @param auth_cb The callback called when the local user accepts + * @param deny_cb The callback called when the local user rejects + * @param user_data Data to be passed back to the above callbacks + * @return A UI-specific handle. +void *purple_account_request_authorization(PurpleAccount *account, const char *remote_user, + const char *id, const char *alias, const char *message, gboolean on_list, + PurpleAccountRequestAuthorizationCb auth_cb, PurpleAccountRequestAuthorizationCb deny_cb, void *user_data); + * Close account requests registered for the given PurpleAccount + * @param account The account for which requests should be closed +void purple_account_request_close_with_account(PurpleAccount *account); + * Close the account request for the given ui handle + * @param ui_handle The ui specific handle for which requests should be closed +void purple_account_request_close(void *ui_handle); + * Requests a password from the user for the account. Does not set the + * account password on success; do that in ok_cb if desired. + * @param account The account to request the password for. + * @param ok_cb The callback for the OK button. + * @param cancel_cb The callback for the cancel button. + * @param user_data User data to be passed into callbacks. +void purple_account_request_password(PurpleAccount *account, GCallback ok_cb, + GCallback cancel_cb, void *user_data); + * Requests information from the user to change the account's password. + * @param account The account to change the password on. +void purple_account_request_change_password(PurpleAccount *account); + * Requests information from the user to change the account's + * @param account The account to change the user information on. +void purple_account_request_change_user_info(PurpleAccount *account); + * Sets the account's username. + * @param account The account. + * @param username The username. +void purple_account_set_username(PurpleAccount *account, const char *username); + * Sets the account's password. + * @param account The account. + * @param password The password. +void purple_account_set_password(PurpleAccount *account, const char *password); + * Sets the account's alias. + * @param account The account. + * @param alias The alias. +void purple_account_set_alias(PurpleAccount *account, const char *alias); + * Sets the account's user information + * @param account The account. + * @param user_info The user information. +void purple_account_set_user_info(PurpleAccount *account, const char *user_info); + * Sets the account's buddy icon path. + * @param account The account. + * @param path The buddy icon non-cached path. +void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path); + * Sets the account's protocol ID. + * @param account The account. + * @param protocol_id The protocol ID. +void purple_account_set_protocol_id(PurpleAccount *account, + const char *protocol_id); + * Sets the account's connection. + * @param account The account. + * @param gc The connection. +void purple_account_set_connection(PurpleAccount *account, PurpleConnection *gc); + * Sets whether or not this account should save its password. + * @param account The account. + * @param value @c TRUE if it should remember the password. +void purple_account_set_remember_password(PurpleAccount *account, gboolean value); + * Sets whether or not this account should check for mail. + * @param account The account. + * @param value @c TRUE if it should check for mail. +void purple_account_set_check_mail(PurpleAccount *account, gboolean value); + * Sets whether or not this account is enabled for the specified + * @param account The account. + * @param value @c TRUE if it is enabled. +void purple_account_set_enabled(PurpleAccount *account, const char *ui, + * Sets the account's proxy information. + * @param account The account. + * @param info The proxy information. +void purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info); + * Sets the account's privacy type. + * @param account The account. + * @param privacy_type The privacy type. +void purple_account_set_privacy_type(PurpleAccount *account, PurplePrivacyType privacy_type); + * Sets the account's status types. + * @param account The account. + * @param status_types The list of status types. +void purple_account_set_status_types(PurpleAccount *account, GList *status_types); + * Variadic version of purple_account_set_status_list(); the variadic list + * replaces @a attrs, and should be <tt>NULL</tt>-terminated. + * @copydoc purple_account_set_status_list() +void purple_account_set_status(PurpleAccount *account, const char *status_id, + gboolean active, ...) G_GNUC_NULL_TERMINATED; + * Activates or deactivates a status. All changes to the statuses of + * an account go through this function or purple_account_set_status(). + * You can only deactivate an exclusive status by activating another exclusive + * status. So, if @a status_id is an exclusive status and @a active is @c + * FALSE, this function does nothing. + * @param account The account. + * @param status_id The ID of the status. + * @param active Whether @a status_id is to be activated (<tt>TRUE</tt>) or + * deactivated (<tt>FALSE</tt>). + * @param attrs A list of <tt>const char *</tt> attribute names followed by + * <tt>const char *</tt> attribute values for the status. + * (For example, one pair might be <tt>"message"</tt> followed + * by <tt>"hello, talk to me!"</tt>.) +void purple_account_set_status_list(PurpleAccount *account, + const char *status_id, gboolean active, GList *attrs); + * Set a server-side (public) alias for this account. The account + * must already be connected. + * Currently, the public alias is not stored locally, although this + * may change in a later version. + * @param account The account + * @param alias The new public alias for this account or NULL + * to unset the alias/nickname (or return it to + * a protocol-specific "default", like the username) + * @param success_cb A callback which will be called if the alias + * is successfully set on the server (or NULL). + * @param failure_cb A callback which will be called if the alias + * is not successfully set on the server (or NULL). +void purple_account_set_public_alias(PurpleAccount *account, + const char *alias, PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); + * Fetch the server-side (public) alias for this account. The account + * must already be connected. + * @param account The account + * @param success_cb A callback which will be called with the alias + * @param failure_cb A callback which will be called if the prpl is + * unable to retrieve the server-side alias. +void purple_account_get_public_alias(PurpleAccount *account, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb); + * Return whether silence suppression is used during voice call. + * @param account The account. + * @return @c TRUE if suppression is used, or @c FALSE if not. +gboolean purple_account_get_silence_suppression(const PurpleAccount *account); + * Sets whether silence suppression is used during voice call. + * @param account The account. + * @param value @c TRUE if suppression should be used. +void purple_account_set_silence_suppression(PurpleAccount *account, + * Clears all protocol-specific settings on an account. + * @param account The account. +void purple_account_clear_settings(PurpleAccount *account); + * Removes an account-specific setting by name. + * @param account The account. + * @param setting The setting to remove. +void purple_account_remove_setting(PurpleAccount *account, const char *setting); + * Sets a protocol-specific integer setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_int(PurpleAccount *account, const char *name, int value); + * Sets a protocol-specific string setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_string(PurpleAccount *account, const char *name, + * Sets a protocol-specific boolean setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_bool(PurpleAccount *account, const char *name, + * Sets a UI-specific integer setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_ui_int(PurpleAccount *account, const char *ui, + const char *name, int value); + * Sets a UI-specific string setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_ui_string(PurpleAccount *account, const char *ui, + const char *name, const char *value); + * Sets a UI-specific boolean setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param value The setting's value. +void purple_account_set_ui_bool(PurpleAccount *account, const char *ui, + const char *name, gboolean value); + * Returns whether or not the account is connected. + * @param account The account. + * @return @c TRUE if connected, or @c FALSE otherwise. +gboolean purple_account_is_connected(const PurpleAccount *account); + * Returns whether or not the account is connecting. + * @param account The account. + * @return @c TRUE if connecting, or @c FALSE otherwise. +gboolean purple_account_is_connecting(const PurpleAccount *account); + * Returns whether or not the account is disconnected. + * @param account The account. + * @return @c TRUE if disconnected, or @c FALSE otherwise. +gboolean purple_account_is_disconnected(const PurpleAccount *account); + * Returns the account's username. + * @param account The account. + * @return The username. +const char *purple_account_get_username(const PurpleAccount *account); + * Returns the account's password. + * @param account The account. + * @return The password. +const char *purple_account_get_password(const PurpleAccount *account); + * Returns the account's alias. + * @param account The account. +const char *purple_account_get_alias(const PurpleAccount *account); + * Returns the account's user information. + * @param account The account. + * @return The user information. +const char *purple_account_get_user_info(const PurpleAccount *account); + * Gets the account's buddy icon path. + * @param account The account. + * @return The buddy icon's non-cached path. +const char *purple_account_get_buddy_icon_path(const PurpleAccount *account); + * Returns the account's protocol ID. + * @param account The account. + * @return The protocol ID. +const char *purple_account_get_protocol_id(const PurpleAccount *account); + * Returns the account's protocol name. + * @param account The account. + * @return The protocol name. +const char *purple_account_get_protocol_name(const PurpleAccount *account); + * Returns the account's connection. + * @param account The account. + * @return The connection. +PurpleConnection *purple_account_get_connection(const PurpleAccount *account); + * Returns a name for this account appropriate for display to the user. In + * order of preference: the account's alias; the contact or buddy alias (if + * the account exists on its own buddy list); the connection's display name; + * the account's username. + * @param account The account. + * @return The name to display. +const gchar *purple_account_get_name_for_display(const PurpleAccount *account); + * Returns whether or not this account should save its password. + * @param account The account. + * @return @c TRUE if it should remember the password. +gboolean purple_account_get_remember_password(const PurpleAccount *account); + * Returns whether or not this account should check for mail. + * @param account The account. + * @return @c TRUE if it should check for mail. +gboolean purple_account_get_check_mail(const PurpleAccount *account); + * Returns whether or not this account is enabled for the + * @param account The account. + * @return @c TRUE if it enabled on this UI. +gboolean purple_account_get_enabled(const PurpleAccount *account, + * Returns the account's proxy information. + * @param account The account. + * @return The proxy information. +PurpleProxyInfo *purple_account_get_proxy_info(const PurpleAccount *account); + * Returns the account's privacy type. + * @param account The account. + * @return The privacy type. +PurplePrivacyType purple_account_get_privacy_type(const PurpleAccount *account); + * Returns the active status for this account. This looks through + * the PurplePresence associated with this account and returns the + * PurpleStatus that has its active flag set to "TRUE." There can be + * only one active PurpleStatus in a PurplePresence. + * @param account The account. + * @return The active status. +PurpleStatus *purple_account_get_active_status(const PurpleAccount *account); + * Returns the account status with the specified ID. + * Note that this works differently than purple_buddy_get_status() in that + * it will only return NULL if the status was not registered. + * @param account The account. + * @param status_id The status ID. + * @return The status, or NULL if it was never registered. +PurpleStatus *purple_account_get_status(const PurpleAccount *account, + const char *status_id); + * Returns the account status type with the specified ID. + * @param account The account. + * @param id The ID of the status type to find. + * @return The status type if found, or NULL. +PurpleStatusType *purple_account_get_status_type(const PurpleAccount *account, + * Returns the account status type with the specified primitive. + * Note: It is possible for an account to have more than one + * PurpleStatusType with the same primitive. In this case, the + * first PurpleStatusType is returned. + * @param account The account. + * @param primitive The type of the status type to find. + * @return The status if found, or NULL. +PurpleStatusType *purple_account_get_status_type_with_primitive( + const PurpleAccount *account, + PurpleStatusPrimitive primitive); + * Returns the account's presence. + * @param account The account. + * @return The account's presence. +PurplePresence *purple_account_get_presence(const PurpleAccount *account); + * Returns whether or not an account status is active. + * @param account The account. + * @param status_id The status ID. + * @return TRUE if active, or FALSE if not. +gboolean purple_account_is_status_active(const PurpleAccount *account, + const char *status_id); + * Returns the account's status types. + * @param account The account. + * @constreturn The account's status types. +GList *purple_account_get_status_types(const PurpleAccount *account); + * Returns a protocol-specific integer setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param default_value The default value. +int purple_account_get_int(const PurpleAccount *account, const char *name, + * Returns a protocol-specific string setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param default_value The default value. +const char *purple_account_get_string(const PurpleAccount *account, + const char *default_value); + * Returns a protocol-specific boolean setting for an account. + * @param account The account. + * @param name The name of the setting. + * @param default_value The default value. +gboolean purple_account_get_bool(const PurpleAccount *account, const char *name, + gboolean default_value); + * Returns a UI-specific integer setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param default_value The default value. +int purple_account_get_ui_int(const PurpleAccount *account, const char *ui, + const char *name, int default_value); + * Returns a UI-specific string setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param default_value The default value. +const char *purple_account_get_ui_string(const PurpleAccount *account, + const char *ui, const char *name, + const char *default_value); + * Returns a UI-specific boolean setting for an account. + * @param account The account. + * @param ui The UI name. + * @param name The name of the setting. + * @param default_value The default value. +gboolean purple_account_get_ui_bool(const PurpleAccount *account, const char *ui, + const char *name, gboolean default_value); + * Returns the system log for an account. + * @param account The account. + * @param create Should it be created if it doesn't exist? + * @note Callers should almost always pass @c FALSE for @a create. + * Passing @c TRUE could result in an existing log being reopened, + * if the log has already been closed, which not all loggers deal +PurpleLog *purple_account_get_log(PurpleAccount *account, gboolean create); + * Frees the system log of an account + * @param account The account. +void purple_account_destroy_log(PurpleAccount *account); + * Adds a buddy to the server-side buddy list for the specified account. + * @param account The account. + * @param buddy The buddy to add. + * @deprecated Use purple_account_add_buddy_with_invite and \c NULL message. +void purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy); + * Adds a buddy to the server-side buddy list for the specified account. + * @param account The account. + * @param buddy The buddy to add. + * @param message The invite message. This may be ignored by a prpl. +void purple_account_add_buddy_with_invite(PurpleAccount *account, PurpleBuddy *buddy, const char *message); + * Adds a list of buddies to the server-side buddy list. + * @param account The account. + * @param buddies The list of PurpleBlistNodes representing the buddies to add. + * @deprecated Use purple_account_add_buddies_with_invite and \c NULL message. +void purple_account_add_buddies(PurpleAccount *account, GList *buddies); + * Adds a list of buddies to the server-side buddy list. + * @param account The account. + * @param buddies The list of PurpleBlistNodes representing the buddies to add. + * @param message The invite message. This may be ignored by a prpl. +void purple_account_add_buddies_with_invite(PurpleAccount *account, GList *buddies, const char *message); + * Removes a buddy from the server-side buddy list. + * @param account The account. + * @param buddy The buddy to remove. + * @param group The group to remove the buddy from. +void purple_account_remove_buddy(PurpleAccount *account, PurpleBuddy *buddy, + * Removes a list of buddies from the server-side buddy list. + * @note The lists buddies and groups are parallel lists. Be sure that node n of + * groups matches node n of buddies. + * @param account The account. + * @param buddies The list of buddies to remove. + * @param groups The list of groups to remove buddies from. Each node of this + * list should match the corresponding node of buddies. +void purple_account_remove_buddies(PurpleAccount *account, GList *buddies, + * Removes a group from the server-side buddy list. + * @param account The account. + * @param group The group to remove. +void purple_account_remove_group(PurpleAccount *account, PurpleGroup *group); + * Changes the password on the specified account. + * @param account The account. + * @param orig_pw The old password. + * @param new_pw The new password. +void purple_account_change_password(PurpleAccount *account, const char *orig_pw, + * Whether the account supports sending offline messages to buddy. + * @param account The account + * @param buddy The buddy +gboolean purple_account_supports_offline_message(PurpleAccount *account, PurpleBuddy *buddy); + * Get the error that caused the account to be disconnected, or @c NULL if the + * account is happily connected or disconnected without an error. + * @param account The account whose error should be retrieved. + * @constreturn The type of error and a human-readable description of the + * current error, or @c NULL if there is no current error. This + * pointer is guaranteed to remain valid until the @ref + * account-error-changed signal is emitted for @a account. +const PurpleConnectionErrorInfo *purple_account_get_current_error(PurpleAccount *account); + * Clear an account's current error state, resetting it to @c NULL. + * @param account The account whose error state should be cleared. +void purple_account_clear_current_error(PurpleAccount *account); +/**************************************************************************/ +/** @name Accounts API */ +/**************************************************************************/ + * Adds an account to the list of accounts. + * @param account The account. +void purple_accounts_add(PurpleAccount *account); + * Removes an account from the list of accounts. + * @param account The account. +void purple_accounts_remove(PurpleAccount *account); + * This will remove any buddies from the buddy list that belong to this + * account, buddy pounces that belong to this account, and will also + * @param account The account. +void purple_accounts_delete(PurpleAccount *account); + * @param account The account to reorder. + * @param new_index The new index for the account. +void purple_accounts_reorder(PurpleAccount *account, gint new_index); + * Returns a list of all accounts. + * @constreturn A list of all accounts. +GList *purple_accounts_get_all(void); + * Returns a list of all enabled accounts + * @return A list of all enabled accounts. The list is owned + * by the caller, and must be g_list_free()d to avoid +GList *purple_accounts_get_all_active(void); + * Finds an account with the specified name and protocol id. + * @param name The account username. + * @param protocol The account protocol ID. + * @return The account, if found, or @c FALSE otherwise. +PurpleAccount *purple_accounts_find(const char *name, const char *protocol); + * This is called by the core after all subsystems and what + * not have been initialized. It sets all enabled accounts + * to their startup status by signing them on, setting them + * You probably shouldn't call this unless you really know +void purple_accounts_restore_current_statuses(void); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used for accounts. + * @param ops The UI operations structure. +void purple_accounts_set_ui_ops(PurpleAccountUiOps *ops); + * Returns the UI operations structure used for accounts. + * @return The UI operations structure in use. +PurpleAccountUiOps *purple_accounts_get_ui_ops(void); +/**************************************************************************/ +/** @name Accounts Subsystem */ +/**************************************************************************/ + * Returns the accounts subsystem handle. + * @return The accounts subsystem handle. +void *purple_accounts_get_handle(void); + * Initializes the accounts subsystem. +void purple_accounts_init(void); + * Uninitializes the accounts subsystem. +void purple_accounts_uninit(void); +#endif /* _PURPLE_ACCOUNT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/accountopt.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,395 @@
+ * @file accountopt.h Account Options API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_ACCOUNTOPT_H_ +#define _PURPLE_ACCOUNTOPT_H_ + * An option for an account. + * This is set by protocol plugins, and appears in the account settings + PurplePrefType type; /**< The type of value. */ + char *text; /**< The text that will appear to the user. */ + char *pref_name; /**< The name of the associated preference. */ + gboolean boolean; /**< The default boolean value. */ + int integer; /**< The default integer value. */ + char *string; /**< The default string value. */ + GList *list; /**< The default list value. */ + gboolean masked; /**< Whether the value entered should be + * obscured from view (for passwords and + * This is used by some protocols to separate the fields of the username + * into more human-readable components. + char *text; /**< The text that will appear to the user. */ + char *default_value; /**< The default value. */ + char field_sep; /**< The field separator. */ + gboolean reverse; /**< TRUE if the separator should be found + starting a the end of the string, FALSE +} PurpleAccountUserSplit; +/**************************************************************************/ +/** @name Account Option API */ +/**************************************************************************/ + * Creates a new account option. If you know what @a type will be in advance, + * consider using purple_account_option_bool_new(), + * purple_account_option_int_new(), purple_account_option_string_new() or + * purple_account_option_list_new() (as appropriate) instead. + * @param type The type of option. + * @param text The text of the option. + * @param pref_name The account preference name for the option. + * @return The account option. +PurpleAccountOption *purple_account_option_new(PurplePrefType type, + const char *text, const char *pref_name); + * Creates a new boolean account option. + * @param text The text of the option. + * @param pref_name The account preference name for the option. + * @param default_value The default value. + * @return The account option. +PurpleAccountOption *purple_account_option_bool_new(const char *text, + const char *pref_name, gboolean default_value); + * Creates a new integer account option. + * @param text The text of the option. + * @param pref_name The account preference name for the option. + * @param default_value The default value. + * @return The account option. +PurpleAccountOption *purple_account_option_int_new(const char *text, + const char *pref_name, int default_value); + * Creates a new string account option. + * @param text The text of the option. + * @param pref_name The account preference name for the option. + * @param default_value The default value. + * @return The account option. +PurpleAccountOption *purple_account_option_string_new(const char *text, + const char *pref_name, const char *default_value); + * Creates a new list account option. + * The list passed will be owned by the account option, and the + * strings inside will be freed automatically. + * The list is a list of #PurpleKeyValuePair items. The key is the label that + * should be displayed to the user, and the <tt>(const char *)</tt> value is + * the internal ID that should be passed to purple_account_set_string() to + * @param text The text of the option. + * @param pref_name The account preference name for the option. + * @param list The key, value list. + * @return The account option. +PurpleAccountOption *purple_account_option_list_new(const char *text, + const char *pref_name, GList *list); + * Destroys an account option. + * @param option The option to destroy. +void purple_account_option_destroy(PurpleAccountOption *option); + * Sets the default boolean value for an account option. + * @param option The account option. + * @param value The default boolean value. +void purple_account_option_set_default_bool(PurpleAccountOption *option, + * Sets the default integer value for an account option. + * @param option The account option. + * @param value The default integer value. +void purple_account_option_set_default_int(PurpleAccountOption *option, + * Sets the default string value for an account option. + * @param option The account option. + * @param value The default string value. +void purple_account_option_set_default_string(PurpleAccountOption *option, + * Sets the masking for an account option. Setting this to %TRUE acts + * as a hint to the UI that the option's value should be obscured from + * view, like a password. + * @param option The account option. + * @param masked The masking. +purple_account_option_set_masked(PurpleAccountOption *option, gboolean masked); + * Sets the list values for an account option. + * The list passed will be owned by the account option, and the + * strings inside will be freed automatically. + * The list is in key, value pairs. The key is the ID stored and used + * internally, and the value is the label displayed. + * @param option The account option. + * @param values The default list value. +void purple_account_option_set_list(PurpleAccountOption *option, GList *values); + * Adds an item to a list account option. + * @param option The account option. + * @param value The value. +void purple_account_option_add_list_item(PurpleAccountOption *option, + const char *key, const char *value); + * Returns the specified account option's type. + * @param option The account option. + * @return The account option's type. +PurplePrefType purple_account_option_get_type(const PurpleAccountOption *option); + * Returns the text for an account option. + * @param option The account option. + * @return The account option's text. +const char *purple_account_option_get_text(const PurpleAccountOption *option); + * Returns the name of an account option. This corresponds to the @c pref_name + * parameter supplied to purple_account_option_new() or one of the + * type-specific constructors. + * @param option The account option. + * @return The option's name. +const char *purple_account_option_get_setting(const PurpleAccountOption *option); + * Returns the default boolean value for an account option. + * @param option The account option. + * @return The default boolean value. +gboolean purple_account_option_get_default_bool(const PurpleAccountOption *option); + * Returns the default integer value for an account option. + * @param option The account option. + * @return The default integer value. +int purple_account_option_get_default_int(const PurpleAccountOption *option); + * Returns the default string value for an account option. + * @param option The account option. + * @return The default string value. +const char *purple_account_option_get_default_string( + const PurpleAccountOption *option); + * Returns the default string value for a list account option. + * @param option The account option. + * @return The default list string value. +const char *purple_account_option_get_default_list_value( + const PurpleAccountOption *option); + * Returns whether an option's value should be masked from view, like a + * password. If so, the UI might display each character of the option + * as a '*' (for example). + * @param option The account option. + * @return %TRUE if the option's value should be obscured. +purple_account_option_get_masked(const PurpleAccountOption *option); + * Returns the list values for an account option. + * @param option The account option. + * @constreturn A list of #PurpleKeyValuePair, mapping the human-readable + * description of the value to the <tt>(const char *)</tt> that + * should be passed to purple_account_set_string() to set the +GList *purple_account_option_get_list(const PurpleAccountOption *option); +/**************************************************************************/ +/** @name Account User Split API */ +/**************************************************************************/ + * Creates a new account username split. + * @param text The text of the option. + * @param default_value The default value. + * @param sep The field separator. + * @return The new user split. +PurpleAccountUserSplit *purple_account_user_split_new(const char *text, + const char *default_value, + * Destroys an account username split. + * @param split The split to destroy. +void purple_account_user_split_destroy(PurpleAccountUserSplit *split); + * Returns the text for an account username split. + * @param split The account username split. + * @return The account username split's text. +const char *purple_account_user_split_get_text(const PurpleAccountUserSplit *split); + * Returns the default string value for an account split. + * @param split The account username split. + * @return The default string. +const char *purple_account_user_split_get_default_value( + const PurpleAccountUserSplit *split); + * Returns the field separator for an account split. + * @param split The account username split. + * @return The field separator. +char purple_account_user_split_get_separator(const PurpleAccountUserSplit *split); + * Returns the 'reverse' value for an account split. + * @param split The account username split. + * @return The 'reverse' value. +gboolean purple_account_user_split_get_reverse(const PurpleAccountUserSplit *split); + * Sets the 'reverse' value for an account split. + * @param split The account username split. + * @param reverse The 'reverse' value +void purple_account_user_split_set_reverse(PurpleAccountUserSplit *split, gboolean reverse); +#endif /* _PURPLE_ACCOUNTOPT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/auth.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,67 @@
+ * @file auth.h Authentication routines + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_AUTH_H_ +#define PURPLE_JABBER_AUTH_H_ +typedef struct _JabberSaslMech JabberSaslMech; + JABBER_SASL_STATE_FAIL = -1, /* Abort, Retry, Fail? */ + JABBER_SASL_STATE_OK = 0, /* Hooray! */ + JABBER_SASL_STATE_CONTINUE = 1 /* More authentication required */ +struct _JabberSaslMech { + gint8 priority; /* Higher priority will be tried before lower priority */ + JabberSaslState (*start)(JabberStream *js, xmlnode *mechanisms, xmlnode **reply, char **msg); + JabberSaslState (*handle_challenge)(JabberStream *js, xmlnode *packet, xmlnode **reply, char **msg); + JabberSaslState (*handle_success)(JabberStream *js, xmlnode *packet, char **msg); + JabberSaslState (*handle_failure)(JabberStream *js, xmlnode *packet, xmlnode **reply, char **msg); + void (*dispose)(JabberStream *js); +void jabber_auth_start(JabberStream *js, xmlnode *packet); +void jabber_auth_start_old(JabberStream *js); +void jabber_auth_handle_challenge(JabberStream *js, xmlnode *packet); +void jabber_auth_handle_success(JabberStream *js, xmlnode *packet); +void jabber_auth_handle_failure(JabberStream *js, xmlnode *packet); +JabberSaslMech *jabber_auth_get_plain_mech(void); +JabberSaslMech *jabber_auth_get_digest_md5_mech(void); +JabberSaslMech **jabber_auth_get_scram_mechs(gint *count); +JabberSaslMech *jabber_auth_get_cyrus_mech(void); +void jabber_auth_add_mech(JabberSaslMech *); +void jabber_auth_remove_mech(JabberSaslMech *); +void jabber_auth_init(void); +void jabber_auth_uninit(void); +#endif /* PURPLE_JABBER_AUTH_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/blist.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1278 @@
+ * @file blist.h Buddy List API + * @see @ref blist-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_BLIST_H_ +#define _PURPLE_BLIST_H_ +/* I can't believe I let ChipX86 inspire me to write good code. -Sean */ +/** @copydoc _PurpleBuddyList */ +typedef struct _PurpleBuddyList PurpleBuddyList; +/** @copydoc _PurpleBlistUiOps */ +typedef struct _PurpleBlistUiOps PurpleBlistUiOps; +/** @copydoc _PurpleBlistNode */ +typedef struct _PurpleBlistNode PurpleBlistNode; +/** @copydoc _PurpleChat */ +typedef struct _PurpleChat PurpleChat; +/** @copydoc _PurpleGroup */ +typedef struct _PurpleGroup PurpleGroup; +/** @copydoc _PurpleContact */ +typedef struct _PurpleContact PurpleContact; +/** @copydoc _PurpleBuddy */ +typedef struct _PurpleBuddy PurpleBuddy; +/**************************************************************************/ +/**************************************************************************/ + PURPLE_BLIST_GROUP_NODE, + PURPLE_BLIST_CONTACT_NODE, + PURPLE_BLIST_BUDDY_NODE, + PURPLE_BLIST_CHAT_NODE, + PURPLE_BLIST_OTHER_NODE +#define PURPLE_BLIST_NODE_IS_CHAT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CHAT_NODE) +#define PURPLE_BLIST_NODE_IS_BUDDY(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_BUDDY_NODE) +#define PURPLE_BLIST_NODE_IS_CONTACT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CONTACT_NODE) +#define PURPLE_BLIST_NODE_IS_GROUP(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_GROUP_NODE) +#define PURPLE_BUDDY_IS_ONLINE(b) \ + ((b) != NULL && purple_account_is_connected(purple_buddy_get_account(b)) && \ + purple_presence_is_online(purple_buddy_get_presence(b))) + PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 << 0 /**< node should not be saved with the buddy list */ +#define PURPLE_BLIST_NODE(obj) ((PurpleBlistNode *)(obj)) +#define PURPLE_BLIST_NODE_HAS_FLAG(b, f) (purple_blist_node_get_flags((PurpleBlistNode*)(b)) & (f)) +#define PURPLE_BLIST_NODE_SHOULD_SAVE(b) (! PURPLE_BLIST_NODE_HAS_FLAG(b, PURPLE_BLIST_NODE_FLAG_NO_SAVE)) +#define PURPLE_BLIST_NODE_NAME(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CHAT_NODE ? purple_chat_get_name((PurpleChat*)n) : \ + purple_blist_node_get_type(n) == PURPLE_BLIST_BUDDY_NODE ? purple_buddy_get_name((PurpleBuddy*)n) : NULL) +#define PURPLE_GROUP(obj) ((PurpleGroup *)(obj)) +#define PURPLE_CONTACT(obj) ((PurpleContact *)(obj)) +#define PURPLE_BUDDY(obj) ((PurpleBuddy *)(obj)) +#define PURPLE_CHAT(obj) ((PurpleChat *)(obj)) +/**************************************************************************/ +/**************************************************************************/ +#if !(defined PURPLE_HIDE_STRUCTS) || (defined _PURPLE_BLIST_C_) + * A Buddy list node. This can represent a group, a buddy, or anything else. + * This is a base class for PurpleBuddy, PurpleContact, PurpleGroup, and for + * anything else that wants to put itself in the buddy list. */ +struct _PurpleBlistNode { + PurpleBlistNodeType type; /**< The type of node this is */ + PurpleBlistNode *prev; /**< The sibling before this buddy. */ + PurpleBlistNode *next; /**< The sibling after this buddy. */ + PurpleBlistNode *parent; /**< The parent of this node */ + PurpleBlistNode *child; /**< The child of this node */ + GHashTable *settings; /**< per-node settings */ + void *ui_data; /**< The UI can put data here. */ + PurpleBlistNodeFlags flags; /**< The buddy flags */ + * A buddy. This contains everything Purple will ever need to know about someone on the buddy list. Everything. + PurpleBlistNode node; /**< The node that this buddy inherits from */ + char *name; /**< The name of the buddy. */ + char *alias; /**< The user-set alias of the buddy */ + char *server_alias; /**< The server-specified alias of the buddy. (i.e. MSN "Friendly Names") */ + void *proto_data; /**< This allows the prpl to associate whatever data it wants with a buddy */ + PurpleBuddyIcon *icon; /**< The buddy icon. */ + PurpleAccount *account; /**< the account this buddy belongs to */ + PurplePresence *presence; + PurpleMediaCaps media_caps; /**< The media capabilities of the buddy. */ + * A contact. This contains everything Purple will ever need to know about a contact. + PurpleBlistNode node; /**< The node that this contact inherits from. */ + char *alias; /**< The user-set alias of the contact */ + int totalsize; /**< The number of buddies in this contact */ + int currentsize; /**< The number of buddies in this contact corresponding to online accounts */ + int online; /**< The number of buddies in this contact who are currently online */ + PurpleBuddy *priority; /**< The "top" buddy for this contact */ + gboolean priority_valid; /**< Is priority valid? */ + * A group. This contains everything Purple will ever need to know about a group. + PurpleBlistNode node; /**< The node that this group inherits from */ + char *name; /**< The name of this group. */ + int totalsize; /**< The number of chats and contacts in this group */ + int currentsize; /**< The number of chats and contacts in this group corresponding to online accounts */ + int online; /**< The number of chats and contacts in this group who are currently online */ + * A chat. This contains everything Purple needs to put a chat room in the + PurpleBlistNode node; /**< The node that this chat inherits from */ + char *alias; /**< The display name of this chat. */ + GHashTable *components; /**< the stuff the protocol needs to know to join the chat */ + PurpleAccount *account; /**< The account this chat is attached to */ +struct _PurpleBuddyList { + PurpleBlistNode *root; /**< The first node in the buddy list */ + GHashTable *buddies; /**< Every buddy in this list */ + void *ui_data; /**< UI-specific data. */ +#endif /* PURPLE_HIDE_STRUCTS && PURPLE_BLIST_STRUCTS */ + * Buddy list UI operations. + * Any UI representing a buddy list must assign a filled-out PurpleBlistUiOps + * structure to the buddy list core. +struct _PurpleBlistUiOps + void (*new_list)(PurpleBuddyList *list); /**< Sets UI-specific data on a buddy list. */ + void (*new_node)(PurpleBlistNode *node); /**< Sets UI-specific data on a node. */ + void (*show)(PurpleBuddyList *list); /**< The core will call this when it's finished doing its core stuff */ + void (*update)(PurpleBuddyList *list, + PurpleBlistNode *node); /**< This will update a node in the buddy list. */ + void (*remove)(PurpleBuddyList *list, + PurpleBlistNode *node); /**< This removes a node from the list */ + void (*destroy)(PurpleBuddyList *list); /**< When the list is destroyed, this is called to destroy the UI. */ + void (*set_visible)(PurpleBuddyList *list, + gboolean show); /**< Hides or unhides the buddy list */ + void (*request_add_buddy)(PurpleAccount *account, const char *username, + const char *group, const char *alias); + void (*request_add_chat)(PurpleAccount *account, PurpleGroup *group, + const char *alias, const char *name); + void (*request_add_group)(void); + * This is called when a node has been modified and should be saved. + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * @param node The node which has been modified. + void (*save_node)(PurpleBlistNode *node); + * Called when a node is about to be removed from the buddy list. + * The UI op should update the relevant data structures to remove this + * node (for example, removing a buddy from the group this node is in). + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * @param node The node which has been modified. + void (*remove_node)(PurpleBlistNode *node); + * Called to save all the data for an account. If the UI sets this, + * the callback must save the privacy and buddy list data for an account. + * If the account is NULL, save the data for all accounts. + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * @param account The account whose data to save. If NULL, save all data + void (*save_account)(PurpleAccount *account); + void (*_purple_reserved1)(void); +/**************************************************************************/ +/** @name Buddy List API */ +/**************************************************************************/ + * Creates a new buddy list + * @return The new buddy list. + * @deprecated In 3.0.0, this will be handled by purple_blist_init() +PurpleBuddyList *purple_blist_new(void); + * Sets the main buddy list. + * @param blist The buddy list you want to use. + * @deprecated In 3.0.0, this will be handled by purple_blist_init() +void purple_set_blist(PurpleBuddyList *blist); + * Returns the main buddy list. + * @return The main buddy list. +PurpleBuddyList *purple_get_blist(void); + * Returns the root node of the main buddy list. + * @return The root node. +PurpleBlistNode *purple_blist_get_root(void); + * Returns a list of every buddy in the list. Use of this function is + * discouraged if you do not actually need every buddy in the list. Use + * purple_find_buddies instead. + * @return A list of every buddy in the list. Caller is responsible for + * @see purple_find_buddies +GSList *purple_blist_get_buddies(void); + * Returns the UI data for the list. + * @return The UI data for the list. +gpointer purple_blist_get_ui_data(void); + * Sets the UI data for the list. + * @param ui_data The UI data for the list. +void purple_blist_set_ui_data(gpointer ui_data); + * Returns the next node of a given node. This function is to be used to iterate + * over the tree returned by purple_get_blist. + * @param offline Whether to include nodes for offline accounts + * @return The next node + * @see purple_blist_node_get_parent + * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev +PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline); + * Returns the parent node of a given node. + * @return The parent node. + * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev + * @see purple_blist_node_next +PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node); + * Returns the the first child node of a given node. + * @return The child node. + * @see purple_blist_node_get_parent + * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev + * @see purple_blist_node_next +PurpleBlistNode *purple_blist_node_get_first_child(PurpleBlistNode *node); + * Returns the sibling node of a given node. + * @return The sibling node. + * @see purple_blist_node_get_parent + * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_prev + * @see purple_blist_node_next +PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node); + * Returns the previous sibling node of a given node. + * @return The sibling node. + * @see purple_blist_node_get_parent + * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_next +PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node); + * Returns the UI data of a given node. + * @param node The node. +gpointer purple_blist_node_get_ui_data(const PurpleBlistNode *node); + * Sets the UI data of a given node. + * @param node The node. + * @param ui_data The UI data. +void purple_blist_node_set_ui_data(PurpleBlistNode *node, gpointer ui_data); + * Shows the buddy list, creating a new one if necessary. +void purple_blist_show(void); + * Destroys the buddy list window. + * @deprecated The UI is responsible for cleaning up the + * PurpleBuddyList->ui_data. purple_blist_uninit() will free the + * PurpleBuddyList* itself. +void purple_blist_destroy(void); + * Hides or unhides the buddy list. + * @param show Whether or not to show the buddy list +void purple_blist_set_visible(gboolean show); + * Updates a buddy's status. + * This should only be called from within Purple. + * @param buddy The buddy whose status has changed. + * @param old_status The status from which we are changing. +void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status); + * Updates a node's custom icon. + * @param node The PurpleBlistNode whose custom icon has changed. +void purple_blist_update_node_icon(PurpleBlistNode *node); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_BLIST_C_) + * Updates a buddy's icon. + * @param buddy The buddy whose buddy icon has changed + * @deprecated Use purple_blist_update_node_icon() instead. +void purple_blist_update_buddy_icon(PurpleBuddy *buddy); + * Renames a buddy in the buddy list. + * @param buddy The buddy whose name will be changed. + * @param name The new name of the buddy. +void purple_blist_rename_buddy(PurpleBuddy *buddy, const char *name); + * Aliases a contact in the buddy list. + * @param contact The contact whose alias will be changed. + * @param alias The contact's alias. +void purple_blist_alias_contact(PurpleContact *contact, const char *alias); + * Aliases a buddy in the buddy list. + * @param buddy The buddy whose alias will be changed. + * @param alias The buddy's alias. +void purple_blist_alias_buddy(PurpleBuddy *buddy, const char *alias); + * Sets the server-sent alias of a buddy in the buddy list. + * PRPLs should call serv_got_alias() instead of this. + * @param buddy The buddy whose alias will be changed. + * @param alias The buddy's "official" alias. +void purple_blist_server_alias_buddy(PurpleBuddy *buddy, const char *alias); + * Aliases a chat in the buddy list. + * @param chat The chat whose alias will be changed. + * @param alias The chat's new alias. +void purple_blist_alias_chat(PurpleChat *chat, const char *alias); + * @param group The group to rename + * @param name The new name +void purple_blist_rename_group(PurpleGroup *group, const char *name); + * Creates a new chat for the buddy list + * @param account The account this chat will get added to + * @param alias The alias of the new chat + * @param components The info the prpl needs to join the chat. The + * hash function should be g_str_hash() and the + * equal function should be g_str_equal(). + * @return A newly allocated chat +PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components); + * @param chat The chat to destroy +void purple_chat_destroy(PurpleChat *chat); + * Adds a new chat to the buddy list. + * The chat will be inserted right after node or appended to the end + * of group if node is NULL. If both are NULL, the buddy will be added to + * @param chat The new chat who gets added + * @param group The group to add the new chat to. + * @param node The insertion point +void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node); + * This function only creates the PurpleBuddy. Use purple_blist_add_buddy + * to add the buddy to the list and purple_account_add_buddy to sync up + * @param account The account this buddy will get added to + * @param name The name of the new buddy + * @param alias The alias of the new buddy (or NULL if unaliased) + * @return A newly allocated buddy + * @see purple_account_add_buddy + * @see purple_blist_add_buddy +PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *name, const char *alias); + * @param buddy The buddy to destroy +void purple_buddy_destroy(PurpleBuddy *buddy); + * This should only be called from within Purple. You probably want to + * call purple_buddy_icon_set_data(). + * @param buddy The buddy. + * @param icon The buddy icon. + * @see purple_buddy_icon_set_data() +void purple_buddy_set_icon(PurpleBuddy *buddy, PurpleBuddyIcon *icon); + * Returns a buddy's account. + * @param buddy The buddy. +PurpleAccount *purple_buddy_get_account(const PurpleBuddy *buddy); + * Returns a buddy's name + * @param buddy The buddy. +const char *purple_buddy_get_name(const PurpleBuddy *buddy); + * Returns a buddy's icon. + * @param buddy The buddy. + * @return The buddy icon. +PurpleBuddyIcon *purple_buddy_get_icon(const PurpleBuddy *buddy); + * Returns a buddy's protocol-specific data. + * This should only be called from the associated prpl. + * @param buddy The buddy. + * @return The protocol data. + * @see purple_buddy_set_protocol_data() +gpointer purple_buddy_get_protocol_data(const PurpleBuddy *buddy); + * Sets a buddy's protocol-specific data. + * This should only be called from the associated prpl. + * @param buddy The buddy. + * @param data The data. + * @see purple_buddy_get_protocol_data() +void purple_buddy_set_protocol_data(PurpleBuddy *buddy, gpointer data); + * Returns a buddy's contact. + * @param buddy The buddy. + * @return The buddy's contact. +PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy); + * Returns a buddy's presence. + * @param buddy The buddy. + * @return The buddy's presence. +PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy); + * Gets the media caps from a buddy. + * @param buddy The buddy. + * @return The media caps. +PurpleMediaCaps purple_buddy_get_media_caps(const PurpleBuddy *buddy); + * Sets the media caps for a buddy. + * @param buddy The PurpleBuddy. + * @param media_caps The PurpleMediaCaps. +void purple_buddy_set_media_caps(PurpleBuddy *buddy, PurpleMediaCaps media_caps); + * Adds a new buddy to the buddy list. + * The buddy will be inserted right after node or prepended to the + * group if node is NULL. If both are NULL, the buddy will be added to + * @param buddy The new buddy who gets added + * @param contact The optional contact to place the buddy in. + * @param group The group to add the new buddy to. + * @param node The insertion point. Pass in NULL to add the node as + * the first child in the given group. +void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node); + * You can't have more than one group with the same name. Sorry. If you pass + * this the name of a group that already exists, it will return that group. + * @param name The name of the new group + * @return A new group struct +PurpleGroup *purple_group_new(const char *name); + * @param group The group to destroy +void purple_group_destroy(PurpleGroup *group); + * Adds a new group to the buddy list. + * The new group will be inserted after insert or prepended to the list if + * @param group The group + * @param node The insertion point +void purple_blist_add_group(PurpleGroup *group, PurpleBlistNode *node); + * Creates a new contact + * @return A new contact struct +PurpleContact *purple_contact_new(void); + * @param contact The contact to destroy +void purple_contact_destroy(PurpleContact *contact); + * Gets the PurpleGroup from a PurpleContact + * @param contact The contact +PurpleGroup *purple_contact_get_group(const PurpleContact *contact); + * Adds a new contact to the buddy list. + * The new contact will be inserted after insert or prepended to the list if + * @param contact The contact + * @param group The group to add the contact to + * @param node The insertion point +void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node); + * All of the buddies from source will be moved to target + * @param source The contact to merge + * @param node The place to merge to (a buddy or contact) +void purple_blist_merge_contact(PurpleContact *source, PurpleBlistNode *node); + * Returns the highest priority buddy for a given contact. + * @param contact The contact + * @return The highest priority buddy +PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_BLIST_C_) + * Sets the alias for a contact. + * @param contact The contact + * @param alias The alias to set, or NULL to unset + * @deprecated Use purple_blist_alias_contact() instead. +void purple_contact_set_alias(PurpleContact *contact, const char *alias); + * Gets the alias for a contact. + * @param contact The contact + * @return The alias, or NULL if it is not set. +const char *purple_contact_get_alias(PurpleContact *contact); + * Determines whether an account owns any buddies in a given contact + * @param contact The contact to search through. + * @param account The account. + * @return TRUE if there are any buddies from account in the contact, or FALSE otherwise. +gboolean purple_contact_on_account(PurpleContact *contact, PurpleAccount *account); + * Invalidates the priority buddy so that the next call to + * purple_contact_get_priority_buddy recomputes it. + * @param contact The contact +void purple_contact_invalidate_priority_buddy(PurpleContact *contact); + * Removes a buddy from the buddy list and frees the memory allocated to it. + * This doesn't actually try to remove the buddy from the server list. + * @param buddy The buddy to be removed + * @see purple_account_remove_buddy +void purple_blist_remove_buddy(PurpleBuddy *buddy); + * Removes a contact, and any buddies it contains, and frees the memory + * allocated to it. This calls purple_blist_remove_buddy and therefore + * doesn't remove the buddies from the server list. + * @param contact The contact to be removed + * @see purple_blist_remove_buddy +void purple_blist_remove_contact(PurpleContact *contact); + * Removes a chat from the buddy list and frees the memory allocated to it. + * @param chat The chat to be removed +void purple_blist_remove_chat(PurpleChat *chat); + * Removes a group from the buddy list and frees the memory allocated to it and to + * @param group The group to be removed +void purple_blist_remove_group(PurpleGroup *group); + * Returns the alias of a buddy. + * @param buddy The buddy whose name will be returned. + * @return The alias (if set), server alias (if set), +const char *purple_buddy_get_alias_only(PurpleBuddy *buddy); + * Gets the server alias for a buddy. + * @param buddy The buddy whose name will be returned + * @return The server alias, or NULL if it is not set. +const char *purple_buddy_get_server_alias(PurpleBuddy *buddy); + * Returns the correct name to display for a buddy, taking the contact alias + * into account. In order of precedence: the buddy's alias; the buddy's + * contact alias; the buddy's server alias; the buddy's user name. + * @param buddy The buddy whose name will be returned + * @return The appropriate name or alias, or NULL. +const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_BLIST_C_) + * Returns the correct alias for this user, ignoring server aliases. Used + * when a user-recognizable name is required. In order: buddy's alias; buddy's + * contact alias; buddy's user name. + * @param buddy The buddy whose alias will be returned. + * @return The appropriate name or alias. + * @deprecated Try purple_buddy_get_alias(), if server aliases are okay. +const char *purple_buddy_get_local_alias(PurpleBuddy *buddy); + * Returns the correct name to display for a buddy. In order of precedence: + * the buddy's alias; the buddy's server alias; the buddy's contact alias; + * the buddy's user name. + * @param buddy The buddy whose name will be returned. + * @return The appropriate name or alias, or NULL +const char *purple_buddy_get_alias(PurpleBuddy *buddy); + * Returns the local alias for the buddy, or @c NULL if none exists. + * @param buddy The buddy + * @return The local alias for the buddy +const char *purple_buddy_get_local_buddy_alias(PurpleBuddy *buddy); + * Returns the correct name to display for a blist chat. + * @param chat The chat whose name will be returned. + * @return The alias (if set), or first component value. +const char *purple_chat_get_name(PurpleChat *chat); + * Finds the buddy struct given a name and an account + * @param account The account this buddy belongs to + * @param name The buddy's name + * @return The buddy or NULL if the buddy does not exist +PurpleBuddy *purple_find_buddy(PurpleAccount *account, const char *name); + * Finds the buddy struct given a name, an account, and a group + * @param account The account this buddy belongs to + * @param name The buddy's name + * @param group The group to look in + * @return The buddy or NULL if the buddy does not exist in the group +PurpleBuddy *purple_find_buddy_in_group(PurpleAccount *account, const char *name, + * Finds all PurpleBuddy structs given a name and an account + * @param account The account this buddy belongs to + * @param name The buddy's name (or NULL to return all buddies for the account) + * @return A GSList of buddies (which must be freed), or NULL if the buddy doesn't exist +GSList *purple_find_buddies(PurpleAccount *account, const char *name); + * Finds a group by name + * @param name The group's name + * @return The group or NULL if the group does not exist +PurpleGroup *purple_find_group(const char *name); + * Finds a chat by name. + * @param account The chat's account. + * @param name The chat's name. + * @return The chat, or @c NULL if the chat does not exist. +PurpleChat *purple_blist_find_chat(PurpleAccount *account, const char *name); + * Returns the group of which the chat is a member. + * @param chat The chat. + * @return The parent group, or @c NULL if the chat is not in a group. +PurpleGroup *purple_chat_get_group(PurpleChat *chat); + * Returns the account the chat belongs to. + * @param chat The chat. + * @return The account the chat belongs to. +PurpleAccount *purple_chat_get_account(PurpleChat *chat); + * Get a hashtable containing information about a chat. + * @param chat The chat. + * @constreturn The hashtable. +GHashTable *purple_chat_get_components(PurpleChat *chat); + * Returns the group of which the buddy is a member. + * @param buddy The buddy + * @return The group or NULL if the buddy is not in a group +PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy); + * Returns a list of accounts that have buddies in this group + * @return A GSList of accounts (which must be freed), or NULL if the group +GSList *purple_group_get_accounts(PurpleGroup *g); + * Determines whether an account owns any buddies in a given group + * @param g The group to search through. + * @param account The account. + * @return TRUE if there are any buddies in the group, or FALSE otherwise. +gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account); + * Returns the name of a group. + * @param group The group. + * @return The name of the group. +const char *purple_group_get_name(PurpleGroup *group); + * Called when an account connects. Tells the UI to update all the + * @param account The account +void purple_blist_add_account(PurpleAccount *account); + * Called when an account disconnects. Sets the presence of all the buddies to 0 + * and tells the UI to update them. + * @param account The account +void purple_blist_remove_account(PurpleAccount *account); + * Determines the total size of a group + * @param group The group + * @param offline Count buddies in offline accounts + * @return The number of buddies in the group +int purple_blist_get_group_size(PurpleGroup *group, gboolean offline); + * Determines the number of online buddies in a group + * @param group The group + * @return The number of online buddies in the group, or 0 if the group is NULL +int purple_blist_get_group_online_count(PurpleGroup *group); +/****************************************************************************************/ +/** @name Buddy list file management API */ +/****************************************************************************************/ + * Loads the buddy list from ~/.purple/blist.xml. +void purple_blist_load(void); + * Schedule a save of the blist.xml file. This is used by the privacy + * API whenever the privacy settings are changed. If you make a change + * to blist.xml using one of the functions in the buddy list API, then + * the buddy list is saved automatically, so you should not need to +void purple_blist_schedule_save(void); + * Requests from the user information needed to add a buddy to the + * @param account The account the buddy is added to. + * @param username The username of the buddy. + * @param group The name of the group to place the buddy in. + * @param alias The optional alias for the buddy. +void purple_blist_request_add_buddy(PurpleAccount *account, const char *username, + const char *group, const char *alias); + * Requests from the user information needed to add a chat to the + * @param account The account the buddy is added to. + * @param group The optional group to add the chat to. + * @param alias The optional alias for the chat. + * @param name The required chat name. +void purple_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, + const char *alias, const char *name); + * Requests from the user information needed to add a group to the +void purple_blist_request_add_group(void); + * Associates a boolean with a node in the buddy list + * @param node The node to associate the data with + * @param key The identifier for the data + * @param value The value to set +void purple_blist_node_set_bool(PurpleBlistNode *node, const char *key, gboolean value); + * Retrieves a named boolean setting from a node in the buddy list + * @param node The node to retrieve the data from + * @param key The identifier of the data + * @return The value, or FALSE if there is no setting +gboolean purple_blist_node_get_bool(PurpleBlistNode *node, const char *key); + * Associates an integer with a node in the buddy list + * @param node The node to associate the data with + * @param key The identifier for the data + * @param value The value to set +void purple_blist_node_set_int(PurpleBlistNode *node, const char *key, int value); + * Retrieves a named integer setting from a node in the buddy list + * @param node The node to retrieve the data from + * @param key The identifier of the data + * @return The value, or 0 if there is no setting +int purple_blist_node_get_int(PurpleBlistNode *node, const char *key); + * Associates a string with a node in the buddy list + * @param node The node to associate the data with + * @param key The identifier for the data + * @param value The value to set +void purple_blist_node_set_string(PurpleBlistNode *node, const char *key, + * Retrieves a named string setting from a node in the buddy list + * @param node The node to retrieve the data from + * @param key The identifier of the data + * @return The value, or NULL if there is no setting +const char *purple_blist_node_get_string(PurpleBlistNode *node, const char *key); + * Removes a named setting from a blist node + * @param node The node from which to remove the setting + * @param key The name of the setting +void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key); + * Set the flags for the given node. Setting a node's flags will overwrite + * the old flags, so if you want to save them, you must first call + * purple_blist_node_get_flags and modify that appropriately. + * @param node The node on which to set the flags. + * @param flags The flags to set. This is a bitmask. +void purple_blist_node_set_flags(PurpleBlistNode *node, PurpleBlistNodeFlags flags); + * Get the current flags on a given node. + * @param node The node from which to get the flags. + * @return The flags on the node. This is a bitmask. +PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode *node); + * Get the type of a given node. + * @param node The node. + * @return The type of the node. +PurpleBlistNodeType purple_blist_node_get_type(PurpleBlistNode *node); + * Retrieves the extended menu items for a buddy list node. + * @param n The blist node for which to obtain the extended menu items. + * @return A list of PurpleMenuAction items, as harvested by the + * blist-node-extended-menu signal. +GList *purple_blist_node_get_extended_menu(PurpleBlistNode *n); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used for the buddy list. + * @param ops The ops struct. +void purple_blist_set_ui_ops(PurpleBlistUiOps *ops); + * Returns the UI operations structure to be used for the buddy list. + * @return The UI operations structure. +PurpleBlistUiOps *purple_blist_get_ui_ops(void); +/**************************************************************************/ +/** @name Buddy List Subsystem */ +/**************************************************************************/ + * Returns the handle for the buddy list subsystem. + * @return The buddy list subsystem handle. +void *purple_blist_get_handle(void); + * Initializes the buddy list subsystem. +void purple_blist_init(void); + * Uninitializes the buddy list subsystem. +void purple_blist_uninit(void); +#endif /* _PURPLE_BLIST_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/bosh.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,43 @@
+ * @file bosh.h Bidirectional-streams over Synchronous HTTP (BOSH) (XEP-0124 and XEP-0206) + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_BOSH_H_ +#define PURPLE_JABBER_BOSH_H_ +typedef struct _PurpleBOSHConnection PurpleBOSHConnection; +void jabber_bosh_init(void); +void jabber_bosh_uninit(void); +PurpleBOSHConnection* jabber_bosh_connection_init(JabberStream *js, const char *url); +void jabber_bosh_connection_destroy(PurpleBOSHConnection *conn); +gboolean jabber_bosh_connection_is_ssl(PurpleBOSHConnection *conn); +void jabber_bosh_connection_send_keepalive(PurpleBOSHConnection *conn); +void jabber_bosh_connection_connect(PurpleBOSHConnection *conn); +void jabber_bosh_connection_close(PurpleBOSHConnection *conn); +void jabber_bosh_connection_send_raw(PurpleBOSHConnection *conn, const char *data); +#endif /* PURPLE_JABBER_BOSH_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/buddy.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,125 @@
+ * @file buddy.h Buddy handlers + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_BUDDY_H_ +#define PURPLE_JABBER_BUDDY_H_ +typedef struct _JabberBuddy JabberBuddy; + * A sorted list of resources in priority descending order. + * This means that the first resource in the list is the + * "most available" (see resource_compare_cb in buddy.c for + * details). Don't play with this yourself, let + * jabber_buddy_track_resource and jabber_buddy_remove_resource do it. + JABBER_INVISIBLE_NONE = 0, + JABBER_INVISIBLE_SERVER = 1 << 1, + JABBER_INVIS_BUDDY = 1 << 2 + JABBER_SUB_PENDING = 1 << 1, + JABBER_SUB_TO = 1 << 2, + JABBER_SUB_FROM = 1 << 3, + JABBER_SUB_BOTH = (JABBER_SUB_TO | JABBER_SUB_FROM), + JABBER_SUB_REMOVE = 1 << 4 +typedef struct _JabberAdHocCommands { +typedef struct _JabberBuddyResource { + JabberBuddyState state; + JabberCapabilities capabilities; + JABBER_CHAT_STATES_UNKNOWN, + JABBER_CHAT_STATES_UNSUPPORTED, + JABBER_CHAT_STATES_SUPPORTED + /* tz_off == PURPLE_NO_TZ_OFF when unset */ + JabberCapsClientInfo *info; + gboolean commands_fetched; +void jabber_buddy_free(JabberBuddy *jb); +JabberBuddy *jabber_buddy_find(JabberStream *js, const char *name, +JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb, +JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource, + int priority, JabberBuddyState state, const char *status); +void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource); +void jabber_buddy_get_info(PurpleConnection *gc, const char *who); +GList *jabber_blist_node_menu(PurpleBlistNode *node); +void jabber_set_info(PurpleConnection *gc, const char *info); +void jabber_setup_set_info(PurplePluginAction *action); +void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); +void jabber_user_search(JabberStream *js, const char *directory); +void jabber_user_search_begin(PurplePluginAction *); +void jabber_buddy_remove_all_pending_buddy_info_requests(JabberStream *js); +void jabber_vcard_fetch_mine(JabberStream *js); +gboolean jabber_resource_know_capabilities(const JabberBuddyResource *jbr); +gboolean jabber_resource_has_capability(const JabberBuddyResource *jbr, +gboolean jabber_buddy_has_capability(const JabberBuddy *jb, const gchar *cap); +jabber_resource_get_identity_category_type(const JabberBuddyResource *jbr, + const gchar *category); +#endif /* PURPLE_JABBER_BUDDY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/buddyicon.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,441 @@
+ * @file buddyicon.h Buddy Icon API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_BUDDYICON_H_ +#define _PURPLE_BUDDYICON_H_ +/** An opaque structure representing a buddy icon for a particular user on a + * particular #PurpleAccount. Instances are reference-counted; use + * purple_buddy_icon_ref() and purple_buddy_icon_unref() to take and release +typedef struct _PurpleBuddyIcon PurpleBuddyIcon; +/**************************************************************************/ +/** @name Buddy Icon API */ +/**************************************************************************/ + * Creates a new buddy icon structure and populates it. + * If the buddy icon already exists, you'll get a reference to that structure, + * which will have been updated with the data supplied. + * @param account The account the user is on. + * @param username The username the icon belongs to. + * @param icon_data The buddy icon data. + * @param icon_len The buddy icon length. + * @param checksum A protocol checksum from the prpl or @c NULL. + * @return The buddy icon structure, with a reference for the caller. +PurpleBuddyIcon *purple_buddy_icon_new(PurpleAccount *account, const char *username, + void *icon_data, size_t icon_len, + * Increments the reference count on a buddy icon. + * @param icon The buddy icon. +PurpleBuddyIcon *purple_buddy_icon_ref(PurpleBuddyIcon *icon); + * Decrements the reference count on a buddy icon. + * If the reference count reaches 0, the icon will be destroyed. + * @param icon The buddy icon. + * @return @a icon, or @c NULL if the reference count reached 0. +PurpleBuddyIcon *purple_buddy_icon_unref(PurpleBuddyIcon *icon); + * Updates every instance of this icon. + * @param icon The buddy icon. +void purple_buddy_icon_update(PurpleBuddyIcon *icon); + * Sets the buddy icon's data. + * @param icon The buddy icon. + * @param data The buddy icon data, which the buddy icon code + * takes ownership of and will free. + * @param len The length of the data in @a data. + * @param checksum A protocol checksum from the prpl or @c NULL. +purple_buddy_icon_set_data(PurpleBuddyIcon *icon, guchar *data, + size_t len, const char *checksum); + * Returns the buddy icon's account. + * @param icon The buddy icon. +PurpleAccount *purple_buddy_icon_get_account(const PurpleBuddyIcon *icon); + * Returns the buddy icon's username. + * @param icon The buddy icon. + * @return The username. +const char *purple_buddy_icon_get_username(const PurpleBuddyIcon *icon); + * Returns the buddy icon's checksum. + * This function is really only for prpl use. + * @param icon The buddy icon. + * @return The checksum. +const char *purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon); + * Returns the buddy icon's data. + * @param icon The buddy icon. + * @param len If not @c NULL, the length of the icon data returned will be + * set in the location pointed to by this. + * @return A pointer to the icon data. +gconstpointer purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len); + * Returns an extension corresponding to the buddy icon's file type. + * @param icon The buddy icon. + * @return The icon's extension, "icon" if unknown, or @c NULL if + * the image data has disappeared. +const char *purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon); + * Returns a full path to an icon. + * If the icon has data and the file exists in the cache, this will return + * a full path to the cache file. + * In general, it is not appropriate to be poking in the icon cache + * directly. If you find yourself wanting to use this function, think + * very long and hard about it, and then don't. + * @param icon The buddy icon + * @return A full path to the file, or @c NULL under various conditions. +char *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon); +/**************************************************************************/ +/** @name Buddy Icon Subsystem API */ +/**************************************************************************/ + * Sets a buddy icon for a user. + * @param account The account the user is on. + * @param username The username of the user. + * @param icon_data The buddy icon data, which the buddy icon code + * takes ownership of and will free. + * @param icon_len The length of the icon data. + * @param checksum A protocol checksum from the prpl or @c NULL. +purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, + void *icon_data, size_t icon_len, + * Returns the checksum for the buddy icon of a specified buddy. + * This avoids loading the icon image data from the cache if it's + * not already loaded for some other reason. + * @param buddy The buddy + * @return The checksum. +purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy); + * Returns the buddy icon information for a user. + * @param account The account the user is on. + * @param username The username of the user. + * @return The icon (with a reference for the caller) if found, or @c NULL if +purple_buddy_icons_find(PurpleAccount *account, const char *username); + * Returns the buddy icon image for an account. + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref() for it to be freed. + * This function deals with loading the icon from the cache, if + * needed, so it should be called in any case where you want the + * @param account The account + * @return The account's buddy icon image. +purple_buddy_icons_find_account_icon(PurpleAccount *account); + * Sets a buddy icon for an account. + * This function will deal with saving a record of the icon, + * caching the data, etc. + * @param account The account for which to set a custom icon. + * @param icon_data The image data of the icon, which the + * buddy icon code will free. + * @param icon_len The length of the data in @a icon_data. + * @return The icon that was set. The caller does NOT own + * a reference to this, and must call purple_imgstore_ref() +purple_buddy_icons_set_account_icon(PurpleAccount *account, + guchar *icon_data, size_t icon_len); + * Returns the timestamp of when the icon was set. + * This is intended for use in protocols that require a timestamp for + * buddy icon update reasons. + * @param account The account + * @return The time the icon was set, or 0 if an error occurred. +purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account); + * Returns a boolean indicating if a given blist node has a custom buddy icon. + * @param node The blist node. + * @return A boolean indicating if @a node has a custom buddy icon. +purple_buddy_icons_node_has_custom_icon(PurpleBlistNode *node); + * Returns the custom buddy icon image for a blist node. + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref() for it to be freed. + * This function deals with loading the icon from the cache, if + * needed, so it should be called in any case where you want the + * @param node The node. + * @return The custom buddy icon. +purple_buddy_icons_node_find_custom_icon(PurpleBlistNode *node); + * Sets a custom buddy icon for a blist node. + * This function will deal with saving a record of the icon, caching the data, + * @param node The blist node for which to set a custom icon. + * @param icon_data The image data of the icon, which the buddy icon code will + * free. Use NULL to unset the icon. + * @param icon_len The length of the data in @a icon_data. + * @return The icon that was set. The caller does NOT own a reference to this, + * and must call purple_imgstore_ref() if it wants one. +purple_buddy_icons_node_set_custom_icon(PurpleBlistNode *node, + guchar *icon_data, size_t icon_len); + * Sets a custom buddy icon for a blist node. + * Convenience wrapper around purple_buddy_icons_node_set_custom_icon. + * @see purple_buddy_icons_node_set_custom_icon() + * @param node The blist node for which to set a custom icon. + * @param filename The path to the icon to set for the blist node. Use NULL + * to unset the custom icon. + * @return The icon that was set. The caller does NOT own a reference to this, + * and must call purple_imgstore_ref() if it wants one. +purple_buddy_icons_node_set_custom_icon_from_file(PurpleBlistNode *node, + const gchar *filename); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_BUDDYICON_C_) + * PurpleContact version of purple_buddy_icons_node_has_custom_icon. + * @copydoc purple_buddy_icons_node_has_custom_icon() + * @deprecated Use purple_buddy_icons_node_has_custom_icon instead. +purple_buddy_icons_has_custom_icon(PurpleContact *contact); + * PurpleContact version of purple_buddy_icons_node_find_custom_icon. + * @copydoc purple_buddy_icons_node_find_custom_icon() + * @deprecated Use purple_buddy_icons_node_find_custom_icon instead. +purple_buddy_icons_find_custom_icon(PurpleContact *contact); + * PurpleContact version of purple_buddy_icons_node_set_custom_icon. + * @copydoc purple_buddy_icons_node_set_custom_icon() + * @deprecated Use purple_buddy_icons_node_set_custom_icon instead. +purple_buddy_icons_set_custom_icon(PurpleContact *contact, + guchar *icon_data, size_t icon_len); + * Sets whether or not buddy icon caching is enabled. + * @param caching TRUE of buddy icon caching should be enabled, or +void purple_buddy_icons_set_caching(gboolean caching); + * Returns whether or not buddy icon caching should be enabled. + * The default is TRUE, unless otherwise specified by + * purple_buddy_icons_set_caching(). + * @return TRUE if buddy icon caching is enabled, or FALSE otherwise. +gboolean purple_buddy_icons_is_caching(void); + * Sets the directory used to store buddy icon cache files. + * @param cache_dir The directory to store buddy icon cache files to. +void purple_buddy_icons_set_cache_dir(const char *cache_dir); + * Returns the directory used to store buddy icon cache files. + * The default directory is PURPLEDIR/icons, unless otherwise specified + * by purple_buddy_icons_set_cache_dir(). + * @return The directory to store buddy icon cache files to. +const char *purple_buddy_icons_get_cache_dir(void); + * Returns the buddy icon subsystem handle. + * @return The subsystem handle. +void *purple_buddy_icons_get_handle(void); + * Initializes the buddy icon subsystem. +void purple_buddy_icons_init(void); + * Uninitializes the buddy icon subsystem. +void purple_buddy_icons_uninit(void); +/**************************************************************************/ +/** @name Buddy Icon Helper API */ +/**************************************************************************/ + * Gets display size for a buddy icon +void purple_buddy_icon_get_scale_size(PurpleBuddyIconSpec *spec, int *width, int *height); +#endif /* _PURPLE_BUDDYICON_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/buddylist.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,57 @@
+ * Copyright (C) 2005 Bartosz Oler <bartosz@bzimage.us> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_GG_BUDDYLIST_H +#define _PURPLE_GG_BUDDYLIST_H +ggp_buddylist_send(PurpleConnection *gc); + * Load buddylist from server into the roster. + * @param gc PurpleConnection + * @param buddylist Pointer to the buddylist that will be loaded. +/* void ggp_buddylist_load(PurpleConnection *gc, char *buddylist) {{{ */ +ggp_buddylist_load(PurpleConnection *gc, char *buddylist); + * Get all the buddies in the current account. + * @param account Current account. + * @return List of buddies. +ggp_buddylist_dump(PurpleAccount *account); +#endif /* _PURPLE_GG_BUDDYLIST_H */ +/* vim: set ts=8 sts=0 sw=8 noet: */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/caps.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,129 @@
+ * purple - Jabber Protocol Plugin + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_CAPS_H_ +#define PURPLE_JABBER_CAPS_H_ +typedef struct _JabberCapsClientInfo JabberCapsClientInfo; +/* Implementation of XEP-0115 - Entity Capabilities */ +typedef struct _JabberCapsNodeExts JabberCapsNodeExts; +typedef struct _JabberCapsTuple { +struct _JabberCapsClientInfo { + GList *identities; /* JabberIdentity */ + GList *features; /* char * */ + GList *forms; /* xmlnode * */ + JabberCapsNodeExts *exts; + const JabberCapsTuple tuple; + * This stores a set of exts "known" for a specific node (which indicates + * a specific client -- for reference, Pidgin, Finch, Meebo, et al share one + * node.) In XEP-0115 v1.3, exts are used for features that may or may not be + * present at a given time (PEP things, buzz might be disabled, etc). + * This structure is shared among all JabberCapsClientInfo instances matching + * a specific node (if the capstable key->hash == NULL, which indicates that + * the ClientInfo is using v1.3 caps as opposed to v1.5 caps). + * It's only exposed so that jabber_resource_has_capability can use it. + * Everyone else, STAY AWAY! +struct _JabberCapsNodeExts { + GHashTable *exts; /* char *ext_name -> GList *features */ +typedef void (*jabber_caps_get_info_cb)(JabberCapsClientInfo *info, GList *exts, gpointer user_data); +void jabber_caps_init(void); +void jabber_caps_uninit(void); + * Check whether all of the exts in a char* array are known to the given info. +gboolean jabber_caps_exts_known(const JabberCapsClientInfo *info, char **exts); + * Main entity capabilites function to get the capabilities of a contact. + * The callback will be called synchronously if we already have the + * capabilities for the specified (node,ver,hash) (and, if exts are specified, + * if we know what each means) + * @param exts A g_strsplit'd (NULL-terminated) array of strings. This + * function is responsible for freeing it. +void jabber_caps_get_info(JabberStream *js, const char *who, const char *node, + const char *ver, const char *hash, + char **exts, jabber_caps_get_info_cb cb, + * Takes a JabberCapsClientInfo pointer and returns the caps hash according to + * XEP-0115 Version 1.5. + * @param info A JabberCapsClientInfo pointer. + * @param hash Hash cipher to be used. Either sha-1 or md5. + * @return The base64 encoded SHA-1 hash; must be freed by caller +gchar *jabber_caps_calculate_hash(JabberCapsClientInfo *info, const char *hash); + * Calculate SHA1 hash for own featureset. +void jabber_caps_calculate_own_hash(JabberStream *js); +/** Get the current caps hash. +const gchar* jabber_caps_get_own_hash(JabberStream *js); + * Broadcast a new calculated hash using a <presence> stanza. +void jabber_caps_broadcast_change(void); + * Parse the <query/> element from an IQ stanza into a JabberCapsClientInfo + * @param query The 'query' element from an IQ reply stanza. + * @returns A JabberCapsClientInfo struct, or NULL on error +JabberCapsClientInfo *jabber_caps_parse_client_info(xmlnode *query); +#endif /* PURPLE_JABBER_CAPS_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/certificate.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,843 @@
+ * @file certificate.h Public-Key Certificate API + * @see @ref certificate-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_CERTIFICATE_H +#define _PURPLE_CERTIFICATE_H +#endif /* __cplusplus */ + PURPLE_CERTIFICATE_INVALID = 0, + PURPLE_CERTIFICATE_VALID = 1 +} PurpleCertificateVerificationStatus; +typedef struct _PurpleCertificate PurpleCertificate; +typedef struct _PurpleCertificatePool PurpleCertificatePool; +typedef struct _PurpleCertificateScheme PurpleCertificateScheme; +typedef struct _PurpleCertificateVerifier PurpleCertificateVerifier; +typedef struct _PurpleCertificateVerificationRequest PurpleCertificateVerificationRequest; + * Callback function for the results of a verification check + * @param st Status code + * @param userdata User-defined data +typedef void (*PurpleCertificateVerifiedCallback) + (PurpleCertificateVerificationStatus st, +/** A certificate instance + * An opaque data structure representing a single certificate under some +struct _PurpleCertificate + /** Scheme this certificate is under */ + PurpleCertificateScheme * scheme; + /** Opaque pointer to internal data */ + * Database for retrieval or storage of Certificates + * More or less a hash table; all lookups and writes are controlled by a string +struct _PurpleCertificatePool + /** Scheme this Pool operates for */ + /** Internal name to refer to the pool by */ + /** User-friendly name for this type + * ex: N_("SSL Servers") + * When this is displayed anywhere, it should be i18ned + * ex: _(pool->fullname) + /** Internal pool data */ + * Set up the Pool's internal state + * Upon calling purple_certificate_register_pool() , this function will + * be called. May be NULL. + * @return TRUE if the initialization succeeded, otherwise FALSE + gboolean (* init)(void); + * Uninit the Pool's internal state + * Will be called by purple_certificate_unregister_pool() . May be NULL + /** Check for presence of a certificate in the pool using unique ID */ + gboolean (* cert_in_pool)(const gchar *id); + /** Retrieve a PurpleCertificate from the pool */ + PurpleCertificate * (* get_cert)(const gchar *id); + /** Add a certificate to the pool. Must overwrite any other + * certificates sharing the same ID in the pool. + * @return TRUE if the operation succeeded, otherwise FALSE + gboolean (* put_cert)(const gchar *id, PurpleCertificate *crt); + /** Delete a certificate from the pool */ + gboolean (* delete_cert)(const gchar *id); + /** Returns a list of IDs stored in the pool */ + GList * (* get_idlist)(void); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + * A CertificateScheme must implement all of the fields in the structure, + * and register it using purple_certificate_register_scheme() + * There may be only ONE CertificateScheme provided for each certificate + * type, as specified by the "name" field. +struct _PurpleCertificateScheme + /** Name of the certificate type + * ex: "x509", "pgp", etc. + * This must be globally unique - you may not register more than one + * CertificateScheme of the same name at a time. + /** User-friendly name for this type + * ex: N_("X.509 Certificates") + * When this is displayed anywhere, it should be i18ned + * ex: _(scheme->fullname) + /** Imports a certificate from a file + * @param filename File to import the certificate from + * @return Pointer to the newly allocated Certificate struct + PurpleCertificate * (* import_certificate)(const gchar * filename); + * Exports a certificate to a file + * @param filename File to export the certificate to + * @param crt Certificate to export + * @return TRUE if the export succeeded, otherwise FALSE + * @see purple_certificate_export() + gboolean (* export_certificate)(const gchar *filename, PurpleCertificate *crt); + * Duplicates a certificate + * Certificates are generally assumed to be read-only, so feel free to + * do any sort of reference-counting magic you want here. If this ever + * changes, please remember to change the magic accordingly. + * @return Reference to the new copy + PurpleCertificate * (* copy_certificate)(PurpleCertificate *crt); + /** Destroys and frees a Certificate structure + * Destroys a Certificate's internal data structures and calls + * @param crt Certificate instance to be destroyed. It WILL NOT be + * destroyed if it is not of the correct + * CertificateScheme. Can be NULL + void (* destroy_certificate)(PurpleCertificate * crt); + /** Find whether "crt" has a valid signature from issuer "issuer" + * @see purple_certificate_signed_by() */ + gboolean (*signed_by)(PurpleCertificate *crt, PurpleCertificate *issuer); + * Retrieves the certificate public key fingerprint using SHA1 + * @param crt Certificate instance + * @return Binary representation of SHA1 hash - must be freed using + GByteArray * (* get_fingerprint_sha1)(PurpleCertificate *crt); + * Retrieves a unique certificate identifier + * @param crt Certificate instance + * @return Newly allocated string that can be used to uniquely + * identify the certificate. + gchar * (* get_unique_id)(PurpleCertificate *crt); + * Retrieves a unique identifier for the certificate's issuer + * @param crt Certificate instance + * @return Newly allocated string that can be used to uniquely + * identify the issuer's certificate. + gchar * (* get_issuer_unique_id)(PurpleCertificate *crt); + * Gets the certificate subject's name + * For X.509, this is the "Common Name" field, as we're only using it + * for hostname verification at the moment + * @see purple_certificate_get_subject_name() + * @param crt Certificate instance + * @return Newly allocated string with the certificate subject. + gchar * (* get_subject_name)(PurpleCertificate *crt); + * Check the subject name against that on the certificate + * @see purple_certificate_check_subject_name() + * @return TRUE if it is a match, else FALSE + gboolean (* check_subject_name)(PurpleCertificate *crt, const gchar *name); + /** Retrieve the certificate activation/expiration times */ + gboolean (* get_times)(PurpleCertificate *crt, time_t *activation, time_t *expiration); + /** Imports certificates from a file + * @param filename File to import the certificates from + * @return GSList of pointers to the newly allocated Certificate structs + GSList * (* import_certificates)(const gchar * filename); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); +/** A set of operations used to provide logic for verifying a Certificate's + * A Verifier provider must fill out these fields, then register it using + * purple_certificate_register_verifier() + * The (scheme_name, name) value must be unique for each Verifier - you may not + * register more than one Verifier of the same name for each Scheme +struct _PurpleCertificateVerifier + /** Name of the scheme this Verifier operates on + * The scheme will be looked up by name when a Request is generated + /** Name of the Verifier - case insensitive */ + * Start the verification process + * To be called from purple_certificate_verify once it has + * constructed the request. This will use the information in the + * given VerificationRequest to check the certificate and callback + * the requester with the verification results. + * @param vrq Request to process + void (* start_verification)(PurpleCertificateVerificationRequest *vrq); + * Destroy a completed Request under this Verifier + * The function pointed to here is only responsible for cleaning up + * whatever PurpleCertificateVerificationRequest::data points to. + * It should not call free(vrq) + * @param vrq Request to destroy + void (* destroy_request)(PurpleCertificateVerificationRequest *vrq); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/** Structure for a single certificate request + * Useful for keeping track of the state of a verification that involves +struct _PurpleCertificateVerificationRequest + /** Reference to the verification logic used */ + PurpleCertificateVerifier *verifier; + /** Reference to the scheme used. + * This is looked up from the Verifier when the Request is generated + PurpleCertificateScheme *scheme; + * Name to check that the certificate is issued to + * For X.509 certificates, this is the Common Name + /** List of certificates in the chain to be verified (such as that returned by purple_ssl_get_peer_certificates ) + * This is most relevant for X.509 certificates used in SSL sessions. + * The list order should be: certificate, issuer, issuer's issuer, etc. + /** Internal data used by the Verifier code */ + /** Function to call with the verification result */ + PurpleCertificateVerifiedCallback cb; + /** Data to pass to the post-verification callback */ +/*****************************************************************************/ +/** @name Certificate Verification Functions */ +/*****************************************************************************/ + * Constructs a verification request and passed control to the specified Verifier + * It is possible that the callback will be called immediately upon calling + * this function. Plan accordingly. + * @param verifier Verification logic to use. + * @see purple_certificate_find_verifier() + * @param subject_name Name that should match the first certificate in the + * chain for the certificate to be valid. Will be strdup'd + * into the Request struct + * @param cert_chain Certificate chain to check. If there is more than one + * certificate in the chain (X.509), the peer's + * certificate comes first, then the issuer/signer's + * certificate, etc. The whole list is duplicated into the + * @param cb Callback function to be called with whether the + * certificate was approved or not. + * @param cb_data User-defined data for the above. +purple_certificate_verify (PurpleCertificateVerifier *verifier, + const gchar *subject_name, GList *cert_chain, + PurpleCertificateVerifiedCallback cb, + * Completes and destroys a VerificationRequest + * @param vrq Request to conclude + * @param st Success/failure code to pass to the request's +purple_certificate_verify_complete(PurpleCertificateVerificationRequest *vrq, + PurpleCertificateVerificationStatus st); +/*****************************************************************************/ +/** @name Certificate Functions */ +/*****************************************************************************/ + * Makes a duplicate of a certificate + * @param crt Instance to duplicate + * @return Pointer to new instance +purple_certificate_copy(PurpleCertificate *crt); + * Duplicates an entire list of certificates + * @param crt_list List to duplicate + * @return New list copy +purple_certificate_copy_list(GList *crt_list); + * Destroys and free()'s a Certificate + * @param crt Instance to destroy. May be NULL. +purple_certificate_destroy (PurpleCertificate *crt); + * Destroy an entire list of Certificate instances and the containing list + * @param crt_list List of certificates to destroy. May be NULL. +purple_certificate_destroy_list (GList * crt_list); + * Check whether 'crt' has a valid signature made by 'issuer' + * @param crt Certificate instance to check signature of + * @param issuer Certificate thought to have signed 'crt' + * @return TRUE if 'crt' has a valid signature made by 'issuer', + * @todo Find a way to give the reason (bad signature, not the issuer, etc.) +purple_certificate_signed_by(PurpleCertificate *crt, PurpleCertificate *issuer); + * Check that a certificate chain is valid and, if not, the failing certificate. + * Uses purple_certificate_signed_by() to verify that each PurpleCertificate + * in the chain carries a valid signature from the next. A single-certificate + * chain is considered to be valid. + * @param chain List of PurpleCertificate instances comprising the chain, + * in the order certificate, issuer, issuer's issuer, etc. + * @param failing A pointer to a PurpleCertificate*. If not NULL, if the + * chain fails to validate, this will be set to the + * certificate whose signature could not be validated. + * @return TRUE if the chain is valid. See description. + * @deprecated This function will become + * purple_certificate_check_signature_chain in 3.0.0 +purple_certificate_check_signature_chain_with_failing(GList *chain, + PurpleCertificate **failing); + * Check that a certificate chain is valid + * Uses purple_certificate_signed_by() to verify that each PurpleCertificate + * in the chain carries a valid signature from the next. A single-certificate + * chain is considered to be valid. + * @param chain List of PurpleCertificate instances comprising the chain, + * in the order certificate, issuer, issuer's issuer, etc. + * @return TRUE if the chain is valid. See description. + * @todo Specify which certificate in the chain caused a failure + * @deprecated This function will be removed in 3.0.0 and replaced with + * purple_certificate_check_signature_chain_with_failing +purple_certificate_check_signature_chain(GList *chain); + * Imports a PurpleCertificate from a file + * @param scheme Scheme to import under + * @param filename File path to import from + * @return Pointer to a new PurpleCertificate, or NULL on failure +purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename); + * Imports a list of PurpleCertificates from a file + * @param scheme Scheme to import under + * @param filename File path to import from + * @return Pointer to a GSList of new PurpleCertificates, or NULL on failure +purple_certificates_import(PurpleCertificateScheme *scheme, const gchar *filename); + * Exports a PurpleCertificate to a file + * @param filename File to export the certificate to + * @param crt Certificate to export + * @return TRUE if the export succeeded, otherwise FALSE +purple_certificate_export(const gchar *filename, PurpleCertificate *crt); + * Retrieves the certificate public key fingerprint using SHA1. + * @param crt Certificate instance + * @return Binary representation of the hash. You are responsible for free()ing + * @see purple_base16_encode_chunked() +purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt); + * Get a unique identifier for the certificate + * @param crt Certificate instance + * @return String representing the certificate uniquely. Must be g_free()'ed +purple_certificate_get_unique_id(PurpleCertificate *crt); + * Get a unique identifier for the certificate's issuer + * @param crt Certificate instance + * @return String representing the certificate's issuer uniquely. Must be +purple_certificate_get_issuer_unique_id(PurpleCertificate *crt); + * Gets the certificate subject's name + * For X.509, this is the "Common Name" field, as we're only using it + * for hostname verification at the moment + * @param crt Certificate instance + * @return Newly allocated string with the certificate subject. +purple_certificate_get_subject_name(PurpleCertificate *crt); + * Check the subject name against that on the certificate + * @param crt Certificate instance + * @param name Name to check. + * @return TRUE if it is a match, else FALSE +purple_certificate_check_subject_name(PurpleCertificate *crt, const gchar *name); + * Get the expiration/activation times. + * @param crt Certificate instance + * @param activation Reference to store the activation time at. May be NULL + * if you don't actually want it. + * @param expiration Reference to store the expiration time at. May be NULL + * if you don't actually want it. + * @return TRUE if the requested values were obtained, otherwise FALSE. +purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t *expiration); +/*****************************************************************************/ +/** @name Certificate Pool Functions */ +/*****************************************************************************/ + * Helper function for generating file paths in ~/.purple/certificates for + * CertificatePools that use them. + * All components will be escaped for filesystem friendliness. + * @param pool CertificatePool to build a path for + * @param id Key to look up a Certificate by. May be NULL. + * @return A newly allocated path of the form + * ~/.purple/certificates/scheme_name/pool_name/unique_id +purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id); + * Determines whether a pool can be used. + * Checks whether the associated CertificateScheme is loaded. + * @param pool Pool to check + * @return TRUE if the pool can be used, otherwise FALSE +purple_certificate_pool_usable(PurpleCertificatePool *pool); + * Looks up the scheme the pool operates under + * @param pool Pool to get the scheme of + * @return Pointer to the pool's scheme, or NULL if it isn't loaded. + * @see purple_certificate_pool_usable() +PurpleCertificateScheme * +purple_certificate_pool_get_scheme(PurpleCertificatePool *pool); + * Check for presence of an ID in a pool. + * @param pool Pool to look in + * @param id ID to look for + * @return TRUE if the ID is in the pool, else FALSE +purple_certificate_pool_contains(PurpleCertificatePool *pool, const gchar *id); + * Retrieve a certificate from a pool. + * @param pool Pool to fish in + * @param id ID to look up + * @return Retrieved certificate, or NULL if it wasn't there +purple_certificate_pool_retrieve(PurpleCertificatePool *pool, const gchar *id); + * Add a certificate to a pool + * Any pre-existing certificate of the same ID will be overwritten. + * @param pool Pool to add to + * @param id ID to store the certificate with + * @param crt Certificate to store + * @return TRUE if the operation succeeded, otherwise FALSE +purple_certificate_pool_store(PurpleCertificatePool *pool, const gchar *id, PurpleCertificate *crt); + * Remove a certificate from a pool + * @param pool Pool to remove from + * @param id ID to remove + * @return TRUE if the operation succeeded, otherwise FALSE +purple_certificate_pool_delete(PurpleCertificatePool *pool, const gchar *id); + * Get the list of IDs currently in the pool. + * @param pool Pool to enumerate + * @return GList pointing to newly-allocated id strings. Free using + * purple_certificate_pool_destroy_idlist() +purple_certificate_pool_get_idlist(PurpleCertificatePool *pool); + * Destroys the result given by purple_certificate_pool_get_idlist() + * @param idlist ID List to destroy +purple_certificate_pool_destroy_idlist(GList *idlist); +/*****************************************************************************/ +/** @name Certificate Subsystem API */ +/*****************************************************************************/ + * Initialize the certificate system +purple_certificate_init(void); + * Un-initialize the certificate system +purple_certificate_uninit(void); + * Get the Certificate subsystem handle for signalling purposes +purple_certificate_get_handle(void); +/** Look up a registered CertificateScheme by name + * @param name The scheme name. Case insensitive. + * @return Pointer to the located Scheme, or NULL if it isn't found. +PurpleCertificateScheme * +purple_certificate_find_scheme(const gchar *name); + * Get all registered CertificateSchemes + * @return GList pointing to all registered CertificateSchemes . This value + * is owned by libpurple +purple_certificate_get_schemes(void); +/** Register a CertificateScheme with libpurple + * No two schemes can be registered with the same name; this function enforces + * @param scheme Pointer to the scheme to register. + * @return TRUE if the scheme was successfully added, otherwise FALSE +purple_certificate_register_scheme(PurpleCertificateScheme *scheme); +/** Unregister a CertificateScheme from libpurple + * @param scheme Scheme to unregister. + * If the scheme is not registered, this is a no-op. + * @return TRUE if the unregister completed successfully +purple_certificate_unregister_scheme(PurpleCertificateScheme *scheme); +/** Look up a registered PurpleCertificateVerifier by scheme and name + * @param scheme_name Scheme name. Case insensitive. + * @param ver_name The verifier name. Case insensitive. + * @return Pointer to the located Verifier, or NULL if it isn't found. +PurpleCertificateVerifier * +purple_certificate_find_verifier(const gchar *scheme_name, const gchar *ver_name); + * Get the list of registered CertificateVerifiers + * @return GList of all registered PurpleCertificateVerifier. This value + * is owned by libpurple +purple_certificate_get_verifiers(void); + * Register a CertificateVerifier with libpurple + * @param vr Verifier to register. + * @return TRUE if register succeeded, otherwise FALSE +purple_certificate_register_verifier(PurpleCertificateVerifier *vr); + * Unregister a CertificateVerifier with libpurple + * @param vr Verifier to unregister. + * @return TRUE if unregister succeeded, otherwise FALSE +purple_certificate_unregister_verifier(PurpleCertificateVerifier *vr); +/** Look up a registered PurpleCertificatePool by scheme and name + * @param scheme_name Scheme name. Case insensitive. + * @param pool_name Pool name. Case insensitive. + * @return Pointer to the located Pool, or NULL if it isn't found. +purple_certificate_find_pool(const gchar *scheme_name, const gchar *pool_name); + * Get the list of registered Pools + * @return GList of all registered PurpleCertificatePool s. This value + * is owned by libpurple +purple_certificate_get_pools(void); + * Register a CertificatePool with libpurple and call its init function + * @param pool Pool to register. + * @return TRUE if the register succeeded, otherwise FALSE +purple_certificate_register_pool(PurpleCertificatePool *pool); + * Unregister a CertificatePool with libpurple and call its uninit function + * @param pool Pool to unregister. + * @return TRUE if the unregister succeeded, otherwise FALSE +purple_certificate_unregister_pool(PurpleCertificatePool *pool); + * Displays a window showing X.509 certificate information + * @param crt Certificate under an "x509" Scheme + * @todo Will break on CA certs, as they have no Common Name +purple_certificate_display_x509(PurpleCertificate *crt); + * Add a search path for certificates. + * @param path Path to search for certificates. +void purple_certificate_add_ca_search_path(const char *path); +#endif /* __cplusplus */ +#endif /* _PURPLE_CERTIFICATE_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/chat.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,118 @@
+ * @file chat.h Chat stuff + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_CHAT_H_ +#define PURPLE_JABBER_CHAT_H_ +#include "conversation.h" +typedef struct _JabberChatMember { +typedef struct _JabberChat { + GHashTable *components; + PurpleConversation *conv; + PurpleRequestType config_dialog_type; + void *config_dialog_handle; +GList *jabber_chat_info(PurpleConnection *gc); +GHashTable *jabber_chat_info_defaults(PurpleConnection *gc, const char *chat_name); +char *jabber_get_chat_name(GHashTable *data); + * in-prpl function for joining a chat room. Doesn't require sticking goop + * @param room The room to join. This MUST be normalized already. + * @param server The server the room is on. This MUST be normalized already. + * @param password The password (if required) to join the room. May be NULL. + * @param data The chat hash table. May be NULL (it will be generated + * for current core<>prpl API interface.) +JabberChat *jabber_join_chat(JabberStream *js, const char *room, + const char *server, const char *handle, + const char *password, GHashTable *data); +void jabber_chat_join(PurpleConnection *gc, GHashTable *data); +JabberChat *jabber_chat_find(JabberStream *js, const char *room, +JabberChat *jabber_chat_find_by_id(JabberStream *js, int id); +JabberChat *jabber_chat_find_by_conv(PurpleConversation *conv); +void jabber_chat_destroy(JabberChat *chat); +void jabber_chat_free(JabberChat *chat); +gboolean jabber_chat_find_buddy(PurpleConversation *conv, const char *name); +void jabber_chat_invite(PurpleConnection *gc, int id, const char *message, +void jabber_chat_leave(PurpleConnection *gc, int id); +char *jabber_chat_buddy_real_name(PurpleConnection *gc, int id, const char *who); +void jabber_chat_request_room_configure(JabberChat *chat); +void jabber_chat_create_instant_room(JabberChat *chat); +void jabber_chat_register(JabberChat *chat); +void jabber_chat_change_topic(JabberChat *chat, const char *topic); +void jabber_chat_set_topic(PurpleConnection *gc, int id, const char *topic); +gboolean jabber_chat_change_nick(JabberChat *chat, const char *nick); +void jabber_chat_part(JabberChat *chat, const char *msg); +void jabber_chat_track_handle(JabberChat *chat, const char *handle, + const char *jid, const char *affiliation, const char *role); +void jabber_chat_remove_handle(JabberChat *chat, const char *handle); +gboolean jabber_chat_ban_user(JabberChat *chat, const char *who, +gboolean jabber_chat_affiliate_user(JabberChat *chat, const char *who, + const char *affiliation); +gboolean jabber_chat_affiliation_list(JabberChat *chat, const char *affiliation); +gboolean jabber_chat_role_user(JabberChat *chat, const char *who, + const char *role, const char *why); +gboolean jabber_chat_role_list(JabberChat *chat, const char *role); +PurpleRoomlist *jabber_roomlist_get_list(PurpleConnection *gc); +void jabber_roomlist_cancel(PurpleRoomlist *list); +void jabber_chat_disco_traffic(JabberChat *chat); +char *jabber_roomlist_room_serialize(PurpleRoomlistRoom *room); +gboolean jabber_chat_all_participants_have_capability(const JabberChat *chat, +guint jabber_chat_get_num_participants(const JabberChat *chat); +#endif /* PURPLE_JABBER_CHAT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/cipher.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,502 @@
+ * @file cipher.h Purple Cipher API + * @see @ref cipher-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define PURPLE_CIPHER(obj) ((PurpleCipher *)(obj)) /**< PurpleCipher typecast helper */ +#define PURPLE_CIPHER_OPS(obj) ((PurpleCipherOps *)(obj)) /**< PurpleCipherInfo typecase helper */ +#define PURPLE_CIPHER_CONTEXT(obj) ((PurpleCipherContext *)(obj)) /**< PurpleCipherContext typecast helper */ +typedef struct _PurpleCipher PurpleCipher; /**< A handle to a PurpleCipher */ +typedef struct _PurpleCipherOps PurpleCipherOps; /**< Ops for a PurpleCipher */ +typedef struct _PurpleCipherContext PurpleCipherContext; /**< A context for a PurpleCipher */ + * Modes for batch encrypters +typedef enum _PurpleCipherBatchMode { + PURPLE_CIPHER_BATCH_MODE_ECB, + PURPLE_CIPHER_BATCH_MODE_CBC +} PurpleCipherBatchMode; + * The operation flags for a cipher +typedef enum _PurpleCipherCaps { + PURPLE_CIPHER_CAPS_SET_OPT = 1 << 1, /**< Set option flag */ + PURPLE_CIPHER_CAPS_GET_OPT = 1 << 2, /**< Get option flag */ + PURPLE_CIPHER_CAPS_INIT = 1 << 3, /**< Init flag */ + PURPLE_CIPHER_CAPS_RESET = 1 << 4, /**< Reset flag */ + PURPLE_CIPHER_CAPS_UNINIT = 1 << 5, /**< Uninit flag */ + PURPLE_CIPHER_CAPS_SET_IV = 1 << 6, /**< Set IV flag */ + PURPLE_CIPHER_CAPS_APPEND = 1 << 7, /**< Append flag */ + PURPLE_CIPHER_CAPS_DIGEST = 1 << 8, /**< Digest flag */ + PURPLE_CIPHER_CAPS_ENCRYPT = 1 << 9, /**< Encrypt flag */ + PURPLE_CIPHER_CAPS_DECRYPT = 1 << 10, /**< Decrypt flag */ + PURPLE_CIPHER_CAPS_SET_SALT = 1 << 11, /**< Set salt flag */ + PURPLE_CIPHER_CAPS_GET_SALT_SIZE = 1 << 12, /**< Get salt size flag */ + PURPLE_CIPHER_CAPS_SET_KEY = 1 << 13, /**< Set key flag */ + PURPLE_CIPHER_CAPS_GET_KEY_SIZE = 1 << 14, /**< Get key size flag */ + PURPLE_CIPHER_CAPS_SET_BATCH_MODE = 1 << 15, /**< Set batch mode flag */ + PURPLE_CIPHER_CAPS_GET_BATCH_MODE = 1 << 16, /**< Get batch mode flag */ + PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE = 1 << 17, /**< The get block size flag */ + PURPLE_CIPHER_CAPS_SET_KEY_WITH_LEN = 1 << 18, /**< The set key with length flag */ + PURPLE_CIPHER_CAPS_UNKNOWN = 1 << 19 /**< Unknown */ + * The operations of a cipher. Every cipher must implement one of these. +struct _PurpleCipherOps { + /** The set option function */ + void (*set_option)(PurpleCipherContext *context, const gchar *name, void *value); + /** The get option function */ + void *(*get_option)(PurpleCipherContext *context, const gchar *name); + /** The init function */ + void (*init)(PurpleCipherContext *context, void *extra); + /** The reset function */ + void (*reset)(PurpleCipherContext *context, void *extra); + /** The uninit function */ + void (*uninit)(PurpleCipherContext *context); + /** The set initialization vector function */ + void (*set_iv)(PurpleCipherContext *context, guchar *iv, size_t len); + /** The append data function */ + void (*append)(PurpleCipherContext *context, const guchar *data, size_t len); + /** The digest function */ + gboolean (*digest)(PurpleCipherContext *context, size_t in_len, guchar digest[], size_t *out_len); + /** The encrypt function */ + int (*encrypt)(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen); + /** The decrypt function */ + int (*decrypt)(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen); + /** The set salt function */ + void (*set_salt)(PurpleCipherContext *context, guchar *salt); + /** The get salt size function */ + size_t (*get_salt_size)(PurpleCipherContext *context); + /** The set key function */ + void (*set_key)(PurpleCipherContext *context, const guchar *key); + /** The get key size function */ + size_t (*get_key_size)(PurpleCipherContext *context); + /** The set batch mode function */ + void (*set_batch_mode)(PurpleCipherContext *context, PurpleCipherBatchMode mode); + /** The get batch mode function */ + PurpleCipherBatchMode (*get_batch_mode)(PurpleCipherContext *context); + /** The get block size function */ + size_t (*get_block_size)(PurpleCipherContext *context); + /** The set key with length function */ + void (*set_key_with_len)(PurpleCipherContext *context, const guchar *key, size_t len); +/*****************************************************************************/ +/** @name PurpleCipher API */ +/*****************************************************************************/ + * @param cipher The cipher handle + * @return The cipher's name +const gchar *purple_cipher_get_name(PurpleCipher *cipher); + * Gets a cipher's capabilities + * @param cipher The cipher handle + * @return The cipher's info +guint purple_cipher_get_capabilities(PurpleCipher *cipher); + * Gets a digest from a cipher + * @param name The cipher's name + * @param data The data to hash + * @param data_len The length of the data + * @param in_len The length of the buffer + * @param digest The returned digest + * @param out_len The length written + * @return @c TRUE if successful, @c FALSE otherwise +gboolean purple_cipher_digest_region(const gchar *name, const guchar *data, size_t data_len, size_t in_len, guchar digest[], size_t *out_len); +/******************************************************************************/ +/** @name PurpleCiphers API */ +/******************************************************************************/ + * Finds a cipher by it's name + * @param name The name of the cipher to find + * @return The cipher handle or @c NULL +PurpleCipher *purple_ciphers_find_cipher(const gchar *name); + * Registers a cipher as a usable cipher + * @param name The name of the new cipher + * @param ops The cipher ops to register + * @return The handle to the new cipher or @c NULL if it failed +PurpleCipher *purple_ciphers_register_cipher(const gchar *name, PurpleCipherOps *ops); + * @param cipher The cipher handle to unregister + * @return Whether or not the cipher was successfully unloaded +gboolean purple_ciphers_unregister_cipher(PurpleCipher *cipher); + * Gets the list of ciphers + * @return The list of available ciphers + * @note This list should not be modified, it is owned by the cipher core +GList *purple_ciphers_get_ciphers(void); +/******************************************************************************/ +/** @name PurpleCipher Subsystem API */ +/******************************************************************************/ + * Gets the handle to the cipher subsystem + * @return The handle to the cipher subsystem +gpointer purple_ciphers_get_handle(void); + * Initializes the cipher core +void purple_ciphers_init(void); + * Uninitializes the cipher core +void purple_ciphers_uninit(void); +/******************************************************************************/ +/** @name PurpleCipherContext API */ +/******************************************************************************/ + * Sets the value an option on a cipher context + * @param context The cipher context + * @param name The name of the option + * @param value The value to set +void purple_cipher_context_set_option(PurpleCipherContext *context, const gchar *name, gpointer value); + * Gets the vale of an option on a cipher context + * @param context The cipher context + * @param name The name of the option + * @return The value of the option +gpointer purple_cipher_context_get_option(PurpleCipherContext *context, const gchar *name); + * Creates a new cipher context and initializes it + * @param cipher The cipher to use + * @param extra Extra data for the specific cipher + * @return The new cipher context +PurpleCipherContext *purple_cipher_context_new(PurpleCipher *cipher, void *extra); + * Creates a new cipher context by the cipher name and initializes it + * @param name The cipher's name + * @param extra Extra data for the specific cipher + * @return The new cipher context +PurpleCipherContext *purple_cipher_context_new_by_name(const gchar *name, void *extra); + * Resets a cipher context to it's default value + * @note If you have set an IV you will have to set it after resetting + * @param context The context to reset + * @param extra Extra data for the specific cipher +void purple_cipher_context_reset(PurpleCipherContext *context, gpointer extra); + * Destorys a cipher context and deinitializes it + * @param context The cipher context to destory +void purple_cipher_context_destroy(PurpleCipherContext *context); + * Sets the initialization vector for a context + * @note This should only be called right after a cipher context is created or reset + * @param context The context to set the IV to + * @param iv The initialization vector to set + * @param len The len of the IV +void purple_cipher_context_set_iv(PurpleCipherContext *context, guchar *iv, size_t len); + * Appends data to the context + * @param context The context to append data to + * @param data The data to append + * @param len The length of the data +void purple_cipher_context_append(PurpleCipherContext *context, const guchar *data, size_t len); + * @param context The context to digest + * @param in_len The length of the buffer + * @param digest The return buffer for the digest + * @param out_len The length of the returned value +gboolean purple_cipher_context_digest(PurpleCipherContext *context, size_t in_len, guchar digest[], size_t *out_len); + * Converts a guchar digest into a hex string + * @param context The context to get a digest from + * @param in_len The length of the buffer + * @param digest_s The return buffer for the string digest + * @param out_len The length of the returned value +gboolean purple_cipher_context_digest_to_str(PurpleCipherContext *context, size_t in_len, gchar digest_s[], size_t *out_len); + * Encrypts data using the context + * @param context The context + * @param data The data to encrypt + * @param len The length of the data + * @param output The output buffer + * @param outlen The len of data that was outputed + * @return A cipher specific status code +gint purple_cipher_context_encrypt(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen); + * Decrypts data using the context + * @param context The context + * @param data The data to encrypt + * @param len The length of the returned value + * @param output The output buffer + * @param outlen The len of data that was outputed + * @return A cipher specific status code +gint purple_cipher_context_decrypt(PurpleCipherContext *context, const guchar data[], size_t len, guchar output[], size_t *outlen); + * Sets the salt on a context + * @param context The context whose salt to set +void purple_cipher_context_set_salt(PurpleCipherContext *context, guchar *salt); + * Gets the size of the salt if the cipher supports it + * @param context The context whose salt size to get + * @return The size of the salt +size_t purple_cipher_context_get_salt_size(PurpleCipherContext *context); + * Sets the key on a context + * @param context The context whose key to set +void purple_cipher_context_set_key(PurpleCipherContext *context, const guchar *key); + * Gets the key size for a context + * @param context The context whose key size to get + * @return The size of the key +size_t purple_cipher_context_get_key_size(PurpleCipherContext *context); + * Sets the batch mode of a context + * @param context The context whose batch mode to set + * @param mode The batch mode under which the cipher should operate +void purple_cipher_context_set_batch_mode(PurpleCipherContext *context, PurpleCipherBatchMode mode); + * Gets the batch mode of a context + * @param context The context whose batch mode to get + * @return The batch mode under which the cipher is operating +PurpleCipherBatchMode purple_cipher_context_get_batch_mode(PurpleCipherContext *context); + * Gets the block size of a context + * @param context The context whose block size to get + * @return The block size of the context +size_t purple_cipher_context_get_block_size(PurpleCipherContext *context); + * Sets the key with a given length on a context + * @param context The context whose key to set + * @param len The length of the key +void purple_cipher_context_set_key_with_len(PurpleCipherContext *context, const guchar *key, size_t len); + * Sets the cipher data for a context + * @param context The context whose cipher data to set + * @param data The cipher data to set +void purple_cipher_context_set_data(PurpleCipherContext *context, gpointer data); + * Gets the cipher data for a context + * @param context The context whose cipher data to get + * @return The cipher data +gpointer purple_cipher_context_get_data(PurpleCipherContext *context); +/*****************************************************************************/ +/** @name Purple Cipher HTTP Digest Helper Functions */ +/*****************************************************************************/ + * Calculates a session key for HTTP Digest authentation + * See RFC 2617 for more information. + * @param algorithm The hash algorithm to use + * @param username The username provided by the user + * @param realm The authentication realm provided by the server + * @param password The password provided by the user + * @param nonce The nonce provided by the server + * @param client_nonce The nonce provided by the client + * @return The session key, or @c NULL if an error occurred. +gchar *purple_cipher_http_digest_calculate_session_key( + const gchar *algorithm, const gchar *username, + const gchar *realm, const gchar *password, + const gchar *nonce, const gchar *client_nonce); +/** Calculate a response for HTTP Digest authentication + * See RFC 2617 for more information. + * @param algorithm The hash algorithm to use + * @param method The HTTP method in use + * @param digest_uri The URI from the initial request + * @param qop The "quality of protection" + * @param entity The entity body + * @param nonce The nonce provided by the server + * @param nonce_count The nonce count + * @param client_nonce The nonce provided by the client + * @param session_key The session key from purple_cipher_http_digest_calculate_session_key() + * @return The hashed response, or @c NULL if an error occurred. +gchar *purple_cipher_http_digest_calculate_response( + const gchar *algorithm, const gchar *method, + const gchar *digest_uri, const gchar *qop, + const gchar *entity, const gchar *nonce, + const gchar *nonce_count, const gchar *client_nonce, + const gchar *session_key); +#endif /* PURPLE_CIPHER_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/circbuffer.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,118 @@
+ * @file circbuffer.h Buffer Utility Functions +/* Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _PurpleCircBuffer { + /** A pointer to the starting address of our chunk of memory. */ + /** The incremental amount to increase this buffer by when + * the buffer is not big enough to hold incoming data, in bytes. */ + /** The length of this buffer, in bytes. */ + /** The number of bytes of this buffer that contain unread data. */ + /** A pointer to the next byte where new incoming data is + /** A pointer to the next byte of buffered data that should be + * read by the consumer. */ + * Creates a new circular buffer. This will not allocate any memory for the + * actual buffer until data is appended to it. + * @param growsize The amount that the buffer should grow the first time data + * is appended and every time more space is needed. Pass in + * "0" to use the default of 256 bytes. + * @return The new PurpleCircBuffer. This should be freed with + * purple_circ_buffer_destroy when you are done with it +PurpleCircBuffer *purple_circ_buffer_new(gsize growsize); + * Dispose of the PurpleCircBuffer and free any memory used by it (including any + * memory used by the internal buffer). + * @param buf The PurpleCircBuffer to free +void purple_circ_buffer_destroy(PurpleCircBuffer *buf); + * Append data to the PurpleCircBuffer. This will grow the internal + * buffer to fit the added data, if needed. + * @param buf The PurpleCircBuffer to which to append the data + * @param src pointer to the data to copy into the buffer + * @param len number of bytes to copy into the buffer +void purple_circ_buffer_append(PurpleCircBuffer *buf, gconstpointer src, gsize len); + * Determine the maximum number of contiguous bytes that can be read from the + * Note: This may not be the total number of bytes that are buffered - a + * subsequent call after calling purple_circ_buffer_mark_read() may indicate more + * data is available to read. + * @param buf the PurpleCircBuffer for which to determine the maximum contiguous + * bytes that can be read. + * @return the number of bytes that can be read from the PurpleCircBuffer +gsize purple_circ_buffer_get_max_read(const PurpleCircBuffer *buf); + * Mark the number of bytes that have been read from the buffer. + * @param buf The PurpleCircBuffer to mark bytes read from + * @param len The number of bytes to mark as read + * @return TRUE if we successfully marked the bytes as having been read, FALSE +gboolean purple_circ_buffer_mark_read(PurpleCircBuffer *buf, gsize len); +#endif /* _CIRCBUFFER_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/cmdproc.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,100 @@
+ * @file cmdproc.h MSN command processor functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnCmdProc MsnCmdProc; + GHashTable *multiparts; /**< Multi-part message ID's */ + void *data; /**< Extra data, like the switchboard. */ + * Creates a MsnCmdProc structure. + * @param session The session to associate with. + * @return A new MsnCmdProc structure. +MsnCmdProc *msn_cmdproc_new(MsnSession *session); + * Destroys an MsnCmdProc. + * @param cmdproc The object structure. +void msn_cmdproc_destroy(MsnCmdProc *cmdproc); + * Process the queued transactions. + * @param cmdproc The MsnCmdProc. +void msn_cmdproc_process_queue(MsnCmdProc *cmdproc); + * Sends transaction using this servconn. + * @param cmdproc The MsnCmdProc to be used. + * @param trans The MsnTransaction to be sent. +gboolean msn_cmdproc_send_trans(MsnCmdProc *cmdproc, MsnTransaction *trans); + * Add a transaction to the queue to be processed latter. + * @param cmdproc The MsnCmdProc in which the transaction will be queued. + * @param trans The MsnTransaction to be queued. +void msn_cmdproc_queue_trans(MsnCmdProc *cmdproc, + MsnTransaction *trans); +void msn_cmdproc_process_msg(MsnCmdProc *cmdproc, +void msn_cmdproc_process_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd); +void msn_cmdproc_process_cmd_text(MsnCmdProc *cmdproc, const char *command); +void msn_cmdproc_process_payload(MsnCmdProc *cmdproc, + char *payload, int payload_len); +#endif /* MSN_CMDPROC_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/cmds.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,250 @@
+ * @file cmds.h Commands API + * @see @ref cmd-signals +/* Copyright (C) 2003 Timothy Ringenbach <omarvo@hotmail.com> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#include "conversation.h" +/**************************************************************************/ +/**************************************************************************/ +/** The possible results of running a command with purple_cmd_do_command(). */ +typedef enum _PurpleCmdStatus { + PURPLE_CMD_STATUS_FAILED, + PURPLE_CMD_STATUS_NOT_FOUND, + PURPLE_CMD_STATUS_WRONG_ARGS, + PURPLE_CMD_STATUS_WRONG_PRPL, + PURPLE_CMD_STATUS_WRONG_TYPE +/** Commands registered with the core return one of these values when run. + * Normally, a command will want to return one of the first two; in some + * unusual cases, you might want to have several functions called for a + * particular command; in this case, they should return + * #PURPLE_CMD_RET_CONTINUE to cause the core to fall through to other + * commands with the same name. +typedef enum _PurpleCmdRet { + PURPLE_CMD_RET_OK, /**< Everything's okay; Don't look for another command to call. */ + PURPLE_CMD_RET_FAILED, /**< The command failed, but stop looking.*/ + PURPLE_CMD_RET_CONTINUE /**< Continue, looking for other commands with the same name to call. */ +#define PURPLE_CMD_FUNC(func) ((PurpleCmdFunc)func) +/** A function implementing a command, as passed to purple_cmd_register(). + * @todo document the arguments to these functions. +typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *, const gchar *cmd, + gchar **args, gchar **error, void *data); +/** A unique integer representing a command registered with + * purple_cmd_register(), which can subsequently be passed to + * purple_cmd_unregister() to unregister that command. +typedef guint PurpleCmdId; +typedef enum _PurpleCmdPriority { + PURPLE_CMD_P_VERY_LOW = -1000, + PURPLE_CMD_P_DEFAULT = 1000, + PURPLE_CMD_P_PRPL = 2000, + PURPLE_CMD_P_PLUGIN = 3000, + PURPLE_CMD_P_ALIAS = 4000, + PURPLE_CMD_P_HIGH = 5000, + PURPLE_CMD_P_VERY_HIGH = 6000 +/** Flags used to set various properties of commands. Every command should + * have at least one of #PURPLE_CMD_FLAG_IM and #PURPLE_CMD_FLAG_CHAT set in + * order to be even slighly useful. + * @see purple_cmd_register +typedef enum _PurpleCmdFlag { + /** Command is usable in IMs. */ + PURPLE_CMD_FLAG_IM = 0x01, + /** Command is usable in multi-user chats. */ + PURPLE_CMD_FLAG_CHAT = 0x02, + /** Command is usable only for a particular prpl. */ + PURPLE_CMD_FLAG_PRPL_ONLY = 0x04, + /** Incorrect arguments to this command should be accepted anyway. */ + PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS = 0x08 +/**************************************************************************/ +/** @name Commands API */ +/**************************************************************************/ + * Register a new command with the core. + * The command will only happen if commands are enabled, + * which is a UI pref. UIs don't have to support commands at all. + * @param cmd The command. This should be a UTF-8 (or ASCII) string, with no spaces + * or other white space. + * @param args A string of characters describing to libpurple how to parse this + * command's arguments. If what the user types doesn't match this + * pattern, libpurple will keep looking for another command, unless + * the flag #PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS is passed in @a f. + * This string should contain no whitespace, and use a single + * character for each argument. The recognized characters are: + * <li><tt>'w'</tt>: Matches a single word.</li> + * <li><tt>'W'</tt>: Matches a single word, with formatting.</li> + * <li><tt>'s'</tt>: Matches the rest of the arguments after this + * point, as a single string.</li> + * <li><tt>'S'</tt>: Same as <tt>'s'</tt> but with formatting.</li> + * If args is the empty string, then the command accepts no arguments. + * The args passed to the callback @a func will be a @c NULL + * terminated array of @c NULL terminated strings, and will always + * match the number of arguments asked for, unless + * #PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS is passed. + * @param p This is the priority. Higher priority commands will be run first, + * and usually the first command will stop any others from being + * @param f Flags specifying various options about this command, combined with + * <tt>|</tt> (bitwise OR). You need to at least pass one of + * #PURPLE_CMD_FLAG_IM or #PURPLE_CMD_FLAG_CHAT (you may pass both) in + * order for the command to ever actually be called. + * @param prpl_id If the #PURPLE_CMD_FLAG_PRPL_ONLY flag is set, this is the id + * of the prpl to which the command applies (such as + * <tt>"prpl-msn"</tt>). If the flag is not set, this parameter + * is ignored; pass @c NULL (or a humourous string of your + * @param func This is the function to call when someone enters this command. + * @param helpstr a whitespace sensitive, UTF-8, HTML string describing how to + * use the command. The preferred format of this string is the + * command's name, followed by a space and any arguments it + * accepts (if it takes any arguments, otherwise no space), + * followed by a colon, two spaces, and a description of the + * command in sentence form. Do not include a slash before the + * @param data User defined data to pass to the #PurpleCmdFunc @a f. + * @return A #PurpleCmdId, which is only used for calling + * #purple_cmd_unregister, or @a 0 on failure. +PurpleCmdId purple_cmd_register(const gchar *cmd, const gchar *args, PurpleCmdPriority p, PurpleCmdFlag f, + const gchar *prpl_id, PurpleCmdFunc func, const gchar *helpstr, void *data); + * Unregister a command with the core. + * All registered commands must be unregistered, if they're registered by a plugin + * or something else that might go away. Normally this is called when the plugin + * @param id The #PurpleCmdId to unregister, as returned by #purple_cmd_register. +void purple_cmd_unregister(PurpleCmdId id); + * Normally the UI calls this to perform a command. This might also be useful + * if aliases are ever implemented. + * @param conv The conversation the command was typed in. + * @param cmdline The command the user typed (including all arguments) as a single string. + * The caller doesn't have to do any parsing, except removing the command + * prefix, which the core has no knowledge of. cmd should not contain any + * formatting, and should be in plain text (no html entities). + * @param markup This is the same as cmd, but is the formatted version. It should be in + * HTML, with < > and &, at least, escaped to html entities, and should + * include both the default formatting and any extra manual formatting. + * @param errormsg If the command failed errormsg is filled in with the appropriate error + * message. It must be freed by the caller with g_free(). + * @return A #PurpleCmdStatus indicating if the command succeeded or failed. +PurpleCmdStatus purple_cmd_do_command(PurpleConversation *conv, const gchar *cmdline, + const gchar *markup, gchar **errormsg); + * List registered commands. + * Returns a <tt>GList</tt> (which must be freed by the caller) of all commands + * that are valid in the context of @a conv, or all commands, if @a conv is @c + * NULL. Don't keep this list around past the main loop, or anything else that + * might unregister a command, as the <tt>const char *</tt>'s used get freed + * @param conv The conversation, or @c NULL. + * @return A @c GList of <tt>const char *</tt>, which must be freed with + * <tt>g_list_free()</tt>. +GList *purple_cmd_list(PurpleConversation *conv); + * Get the help string for a command. + * Returns the help strings for a given command in the form of a GList, + * one node for each matching command. + * @param conv The conversation, or @c NULL for no context. + * @param cmd The command. No wildcards accepted, but returns help for all + * @return A <tt>GList</tt> of <tt>const char *</tt>s, which is the help string +GList *purple_cmd_help(PurpleConversation *conv, const gchar *cmd); + * Get the handle for the commands API +gpointer purple_cmds_get_handle(void); + * Initialize the commands subsystem. +void purple_cmds_init(void); + * Uninitialize the commands subsystem. +void purple_cmds_uninit(void); +#endif /* _PURPLE_CMDS_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/command.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,84 @@
+ * @file command.h MSN command functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnCommand MsnCommand; +#include "transaction.h" +typedef void (*MsnPayloadCb)(MsnCmdProc *cmdproc, MsnCommand *cmd, + char *payload, size_t len); + MsnPayloadCb payload_cb; + * Create a command object from the incoming string and ref it. + * @param string The incoming string. + * @return A MsnCommand object. +MsnCommand *msn_command_from_string(const char *string); + * Increment the ref count. + * @param cmd The MsnCommand to be ref. + * @return The ref command. +MsnCommand *msn_command_ref(MsnCommand *cmd); + * Decrement the ref count. If the count goes to 0, destroy it. + * @param cmd The MsnCommand to be unref. +void msn_command_unref(MsnCommand *cmd); +#endif /* MSN_COMMAND_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/connection.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,626 @@
+ * @file connection.h Connection API + * @see @ref connection-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_CONNECTION_H_ +#define _PURPLE_CONNECTION_H_ +/** @copydoc _PurpleConnection */ +typedef struct _PurpleConnection PurpleConnection; + * Flags to change behavior of the client for a given connection. + PURPLE_CONNECTION_HTML = 0x0001, /**< Connection sends/receives in 'HTML'. */ + PURPLE_CONNECTION_NO_BGCOLOR = 0x0002, /**< Connection does not send/receive + PURPLE_CONNECTION_AUTO_RESP = 0x0004, /**< Send auto responses when away. */ + PURPLE_CONNECTION_FORMATTING_WBFO = 0x0008, /**< The text buffer must be formatted as a whole */ + PURPLE_CONNECTION_NO_NEWLINES = 0x0010, /**< No new lines are allowed in outgoing messages */ + PURPLE_CONNECTION_NO_FONTSIZE = 0x0020, /**< Connection does not send/receive font sizes */ + PURPLE_CONNECTION_NO_URLDESC = 0x0040, /**< Connection does not support descriptions with links */ + PURPLE_CONNECTION_NO_IMAGES = 0x0080, /**< Connection does not support sending of images */ + PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100, /**< Connection supports sending and receiving custom smileys */ + PURPLE_CONNECTION_SUPPORT_MOODS = 0x0200, /**< Connection supports setting moods */ + PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES = 0x0400 /**< Connection supports setting a message on moods */ +} PurpleConnectionFlags; + PURPLE_DISCONNECTED = 0, /**< Disconnected. */ + PURPLE_CONNECTED, /**< Connected. */ + PURPLE_CONNECTING /**< Connecting. */ +} PurpleConnectionState; + * Possible errors that can cause a connection to be closed. + /** There was an error sending or receiving on the network socket, or + * there was some protocol error (such as the server sending malformed + PURPLE_CONNECTION_ERROR_NETWORK_ERROR = 0, + /** The username supplied was not valid. */ + PURPLE_CONNECTION_ERROR_INVALID_USERNAME = 1, + /** The username, password or some other credential was incorrect. Use + * #PURPLE_CONNECTION_ERROR_INVALID_USERNAME instead if the username + * is known to be invalid. + PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED = 2, + /** libpurple doesn't speak any of the authentication methods the + PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE = 3, + /** libpurple was built without SSL support, and the connection needs + PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT = 4, + /** There was an error negotiating SSL on this connection, or the + * server does not support encryption but an account option was set to + PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR = 5, + /** Someone is already connected to the server using the name you are + * trying to connect with. + PURPLE_CONNECTION_ERROR_NAME_IN_USE = 6, + /** The username/server/other preference for the account isn't valid. + * For instance, on IRC the username cannot contain white space. + * This reason should not be used for incorrect passwords etc: use + * #PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED for that. + * @todo This reason really shouldn't be necessary. Usernames and + * other account preferences should be validated when the + PURPLE_CONNECTION_ERROR_INVALID_SETTINGS = 7, + /** The server did not provide a SSL certificate. */ + PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED = 8, + /** The server's SSL certificate could not be trusted. */ + PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED = 9, + /** The server's SSL certificate has expired. */ + PURPLE_CONNECTION_ERROR_CERT_EXPIRED = 10, + /** The server's SSL certificate is not yet valid. */ + PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED = 11, + /** The server's SSL certificate did not match its hostname. */ + PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH = 12, + /** The server's SSL certificate does not have the expected + PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH = 13, + /** The server's SSL certificate is self-signed. */ + PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED = 14, + /** There was some other error validating the server's SSL certificate. + PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR = 15, + /** Some other error occurred which fits into none of the other + /* purple_connection_error_reason() in connection.c uses the fact that + * this is the last member of the enum when sanity-checking; if other + * reasons are added after it, the check must be updated. + PURPLE_CONNECTION_ERROR_OTHER_ERROR = 16 +} PurpleConnectionError; +/** Holds the type of an error along with its description. */ + /** The type of error. */ + PurpleConnectionError type; + /** A localised, human-readable description of the error. */ +} PurpleConnectionErrorInfo; + * Connection UI operations. Used to notify the user of changes to + * connections, such as being disconnected, and to respond to the + * underlying network connection appearing and disappearing. UIs should + * call #purple_connections_set_ui_ops() with an instance of this struct. + * When an account is connecting, this operation is called to notify + * the UI of what is happening, as well as which @a step out of @a + * step_count has been reached (which might be displayed as a progress + * @see #purple_connection_update_progress + void (*connect_progress)(PurpleConnection *gc, + * Called when a connection is established (just before the + * @ref signed-on signal). + void (*connected)(PurpleConnection *gc); + * Called when a connection is ended (between the @ref signing-off + * and @ref signed-off signals). + void (*disconnected)(PurpleConnection *gc); + * Used to display connection-specific notices. (Pidgin's Gtk user + * interface implements this as a no-op; #purple_connection_notice(), + * which uses this operation, is not used by any of the protocols + * shipped with libpurple.) + void (*notice)(PurpleConnection *gc, const char *text); + * Called when an error causes a connection to be disconnected. + * Called before #disconnected. + * @param text a localized error message. + * @see #purple_connection_error + * @deprecated in favour of + * #PurpleConnectionUiOps.report_disconnect_reason. + void (*report_disconnect)(PurpleConnection *gc, const char *text); + * Called when libpurple discovers that the computer's network + * connection is active. On Linux, this uses Network Manager if + * available; on Windows, it uses Win32's network change notification + void (*network_connected)(void); + * Called when libpurple discovers that the computer's network + * connection has gone away. + void (*network_disconnected)(void); + * Called when an error causes a connection to be disconnected. + * Called before #disconnected. This op is intended to replace + * #report_disconnect. If both are implemented, this will be called + * first; however, there's no real reason to implement both. + * @param reason why the connection ended, if known, or + * #PURPLE_CONNECTION_ERROR_OTHER_ERROR, if not. + * @param text a localized message describing the disconnection + * in more detail to the user. + * @see #purple_connection_error_reason + void (*report_disconnect_reason)(PurpleConnection *gc, + PurpleConnectionError reason, + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); +} PurpleConnectionUiOps; +/* Represents an active connection on an account. */ +struct _PurpleConnection + PurplePlugin *prpl; /**< The protocol plugin. */ + PurpleConnectionFlags flags; /**< Connection flags. */ + PurpleConnectionState state; /**< The connection state. */ + PurpleAccount *account; /**< The account being connected to. */ + char *password; /**< The password used. */ + int inpa; /**< The input watcher. */ + GSList *buddy_chats; /**< A list of active chats + (#PurpleConversation structs of type + #PURPLE_CONV_TYPE_CHAT). */ + void *proto_data; /**< Protocol-specific data. */ + char *display_name; /**< How you appear to other people. */ + guint keepalive; /**< Keep-alive. */ + /** Wants to Die state. This is set when the user chooses to log out, or + * when the protocol is disconnected and should not be automatically + * reconnected (incorrect password, etc.). prpls should rely on + * purple_connection_error_reason() to set this for them rather than + * setting it themselves. + * @see purple_connection_error_is_fatal + guint disconnect_timeout; /**< Timer used for nasty stack tricks */ + time_t last_received; /**< When we last received a packet. Set by the + prpl to avoid sending unneeded keepalives */ +/**************************************************************************/ +/** @name Connection API */ +/**************************************************************************/ +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_CONNECTION_C_) + * This function should only be called by purple_account_connect() + * in account.c. If you're trying to sign on an account, use that + * Creates a connection to the specified account and either connects + * or attempts to register a new account. If you are logging in, + * the connection uses the current active status for this account. + * So if you want to sign on as "away," for example, you need to + * have called purple_account_set_status(account, "away"). + * (And this will call purple_account_connect() automatically). + * @param account The account the connection should be connecting to. + * @param regist Whether we are registering a new account or just + * trying to do a normal signon. + * @param password The password to use. + * @deprecated As this is internal, we should make it private in 3.0.0. +void purple_connection_new(PurpleAccount *account, gboolean regist, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_CONNECTION_C_) + * This function should only be called by purple_account_unregister() + * Tries to unregister the account on the server. If the account is not + * connected, also creates a new connection. + * @param account The account to unregister + * @param password The password to use. + * @param cb Optional callback to be called when unregistration is complete + * @param user_data user data to pass to the callback + * @deprecated As this is internal, we should make it private in 3.0.0. +void purple_connection_new_unregister(PurpleAccount *account, const char *password, PurpleAccountUnregistrationCb cb, void *user_data); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_CONNECTION_C_) + * Disconnects and destroys a PurpleConnection. + * This function should only be called by purple_account_disconnect() + * in account.c. If you're trying to sign off an account, use that + * @param gc The purple connection to destroy. + * @deprecated As this is internal, we should make it private in 3.0.0. +void purple_connection_destroy(PurpleConnection *gc); + * Sets the connection state. PRPLs should call this and pass in + * the state #PURPLE_CONNECTED when the account is completely + * signed on. What does it mean to be completely signed on? If + * the core can call prpl->set_status, and it successfully changes + * your status, then the account is online. + * @param gc The connection. + * @param state The connection state. +void purple_connection_set_state(PurpleConnection *gc, PurpleConnectionState state); + * Sets the connection's account. + * @param gc The connection. + * @param account The account. +void purple_connection_set_account(PurpleConnection *gc, PurpleAccount *account); + * Sets the connection's displayed name. + * @param gc The connection. + * @param name The displayed name. +void purple_connection_set_display_name(PurpleConnection *gc, const char *name); + * Sets the protocol data for a connection. + * @param connection The PurpleConnection. + * @param proto_data The protocol data to set for the connection. +void purple_connection_set_protocol_data(PurpleConnection *connection, void *proto_data); + * Returns the connection state. + * @param gc The connection. + * @return The connection state. +PurpleConnectionState purple_connection_get_state(const PurpleConnection *gc); + * Returns TRUE if the account is connected, otherwise returns FALSE. + * @return TRUE if the account is connected, otherwise returns FALSE. +#define PURPLE_CONNECTION_IS_CONNECTED(gc) \ + (purple_connection_get_state(gc) == PURPLE_CONNECTED) + * Returns the connection's account. + * @param gc The connection. + * @return The connection's account. +PurpleAccount *purple_connection_get_account(const PurpleConnection *gc); + * Returns the protocol plugin managing a connection. + * @param gc The connection. + * @return The protocol plugin. +PurplePlugin * purple_connection_get_prpl(const PurpleConnection *gc); + * Returns the connection's password. + * @param gc The connection. + * @return The connection's password. +const char *purple_connection_get_password(const PurpleConnection *gc); + * Returns the connection's displayed name. + * @param gc The connection. + * @return The connection's displayed name. +const char *purple_connection_get_display_name(const PurpleConnection *gc); + * Gets the protocol data from a connection. + * @param connection The PurpleConnection. + * @return The protocol data for the connection. +void *purple_connection_get_protocol_data(const PurpleConnection *connection); + * Updates the connection progress. + * @param gc The connection. + * @param text Information on the current step. + * @param step The current step. + * @param count The total number of steps. +void purple_connection_update_progress(PurpleConnection *gc, const char *text, + size_t step, size_t count); + * Displays a connection-specific notice. + * @param gc The connection. + * @param text The notice text. +void purple_connection_notice(PurpleConnection *gc, const char *text); + * Closes a connection with an error. + * @param gc The connection. + * @param reason The error text, which may not be @c NULL. + * @deprecated in favour of #purple_connection_error_reason. Calling + * @c purple_connection_error(gc, text) is equivalent to calling + * @c purple_connection_error_reason(gc, reason, text) where @c reason is + * #PURPLE_CONNECTION_ERROR_OTHER_ERROR if @c gc->wants_to_die is @c TRUE, and + * #PURPLE_CONNECTION_ERROR_NETWORK_ERROR if not. (This is to keep + * auto-reconnection behaviour the same when using old prpls which don't use +void purple_connection_error(PurpleConnection *gc, const char *reason); + * Closes a connection with an error and a human-readable description of the + * error. It also sets @c gc->wants_to_die to the value of + * #purple_connection_error_is_fatal(@a reason), mainly for + * backwards-compatibility. + * @param gc the connection which is closing. + * @param reason why the connection is closing. + * @param description a non-@c NULL localized description of the error. +purple_connection_error_reason (PurpleConnection *gc, + PurpleConnectionError reason, + const char *description); + * Closes a connection due to an SSL error; this is basically a shortcut to + * turning the #PurpleSslErrorType into a #PurpleConnectionError and a + * human-readable string and then calling purple_connection_error_reason(). +purple_connection_ssl_error (PurpleConnection *gc, + PurpleSslErrorType ssl_error); + * Reports whether a disconnection reason is fatal (in which case the account + * should probably not be automatically reconnected) or transient (so + * auto-reconnection is a good idea). + * For instance, #PURPLE_CONNECTION_ERROR_NETWORK_ERROR is a temporary error, + * which might be caused by losing the network connection, so <tt> + * purple_connection_error_is_fatal (PURPLE_CONNECTION_ERROR_NETWORK_ERROR)</tt> + * is @c FALSE. On the other hand, + * #PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED probably indicates a + * misconfiguration of the account which needs the user to go fix it up, so + * <tt> purple_connection_error_is_fatal + * (PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED)</tt> is @c TRUE. + * (This function is meant to replace checking PurpleConnection.wants_to_die.) + * @return @c TRUE if the account should not be automatically reconnected, and +purple_connection_error_is_fatal (PurpleConnectionError reason); +/**************************************************************************/ +/** @name Connections API */ +/**************************************************************************/ + * Disconnects from all connections. +void purple_connections_disconnect_all(void); + * Returns a list of all active connections. This does not + * include connections that are in the process of connecting. + * @constreturn A list of all active connections. +GList *purple_connections_get_all(void); + * Returns a list of all connections in the process of connecting. + * @constreturn A list of connecting connections. +GList *purple_connections_get_connecting(void); + * Checks if gc is still a valid pointer to a gc. + * @return @c TRUE if gc is valid. + * @deprecated Do not use this. Instead, cancel your asynchronous request + * when the PurpleConnection is destroyed. + * TODO: Eventually this bad boy will be removed, because it is + * a gross fix for a crashy problem. +#define PURPLE_CONNECTION_IS_VALID(gc) (g_list_find(purple_connections_get_all(), (gc)) != NULL) +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used for connections. + * @param ops The UI operations structure. +void purple_connections_set_ui_ops(PurpleConnectionUiOps *ops); + * Returns the UI operations structure used for connections. + * @return The UI operations structure in use. +PurpleConnectionUiOps *purple_connections_get_ui_ops(void); +/**************************************************************************/ +/** @name Connections Subsystem */ +/**************************************************************************/ + * Initializes the connections subsystem. +void purple_connections_init(void); + * Uninitializes the connections subsystem. +void purple_connections_uninit(void); + * Returns the handle to the connections subsystem. + * @return The connections subsystem handle. +void *purple_connections_get_handle(void); +#endif /* _PURPLE_CONNECTION_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/contact.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,746 @@
+ * @file contact.h Header file for contact.c + * MaYuan<mayuan2006@gmail.com> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +typedef struct _MsnCallbackState MsnCallbackState; + MSN_ACCEPTED_BUDDY = 0x04, + MSN_DENIED_BUDDY = 0x08, + MSN_RENAME_GROUP = 0x40, + MSN_UPDATE_INFO = 0x80, + MSN_ANNOTATE_USER = 0x100 + MSN_UPDATE_DISPLAY, /* Real display name */ + MSN_UPDATE_ALIAS, /* Aliased display name */ +} MsnSoapPartnerScenario; +#define MSN_APPLICATION_ID "CFE80F9D-180F-4399-82AB-413F33A1FA11" +#define MSN_CONTACT_SERVER "local-bay.contacts.msn.com" +#define MSN_GET_CONTACT_POST_URL "/abservice/SharingService.asmx" +#define MSN_GET_CONTACT_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/FindMembership" +#define MSN_GET_CONTACT_UPDATE_XML \ + "<deltasOnly>true</deltasOnly>"\ + "<lastChange>%s</lastChange>" +#define MSN_GET_CONTACT_TEMPLATE "<?xml version='1.0' encoding='utf-8'?>"\ +"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<soap:Header xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId xmlns=\"http://www.msn.com/webservices/AddressBook\">" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration xmlns=\"http://www.msn.com/webservices/AddressBook\">false</IsMigration>"\ + "<PartnerScenario xmlns=\"http://www.msn.com/webservices/AddressBook\">%s</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest xmlns=\"http://www.msn.com/webservices/AddressBook\">false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<soap:Body xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<FindMembership xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<serviceFilter xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<Types xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Messenger</ServiceType>"\ + "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Invitation</ServiceType>"\ + "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">SocialNetwork</ServiceType>"\ + "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Space</ServiceType>"\ + "<ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Profile</ServiceType>"\ +/************************************************ + * *********************************************/ +#define MSN_ADDRESS_BOOK_POST_URL "/abservice/abservice.asmx" +/* Create AddressBook template */ +#define MSN_ADD_ADDRESSBOOK_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABAdd" +#define MSN_ADD_ADDRESSBOOK_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Initial</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ownerPuid>0</ownerPuid>"\ + "<ownerEmail>%s</ownerEmail>"\ + "<fDefault>true</fDefault>"\ +#define MSN_GET_ADDRESS_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABFindContactsPaged" +#define MSN_GET_ADDRESS_FULL_TIME "0001-01-01T00:00:00.0000000-08:00" +#define MSN_GET_ADDRESS_UPDATE_XML \ + "<deltasOnly>true</deltasOnly>"\ + "<lastChange>%s</lastChange>"\ +#define MSN_GET_GLEAM_UPDATE_XML \ + "<dynamicItemView>Gleam</dynamicItemView>"\ + "<dynamicItemLastChange>%s</dynamicItemLastChange>" +#define MSN_GET_ADDRESS_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>%s</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABFindContactsPaged xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abView>Full</abView>"\ + "<extendedContent>AB AllGroups CircleResult</extendedContent>"\ + "</ABFindContactsPaged>"\ +/*Gleams SOAP request template*/ +#define MSN_GET_GLEAMS_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABFindAll" +#define MSN_GLEAMS_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Initial</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABFindAll xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<abView>Full</abView>"\ + "<dynamicItemView>Gleam</dynamicItemView>"\ + "<dynamicItemLastChange>0001-01-01T00:00:00.0000000-08:00</dynamicItemLastChange>"\ +/******************************************************* + * Contact Management SOAP actions + *******************************************************/ +#define MSN_CONTACT_ADD_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactAdd" +#define MSN_CONTACT_LIVE_PENDING_XML \ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<contactType>LivePending</contactType>"\ + "<passportName>%s</passportName>"\ + "<isMessengerUser>true</isMessengerUser>"\ +#define MSN_CONTACT_XML \ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<passportName>%s</passportName>"\ + "<isSmtp>false</isSmtp>"\ + "<isMessengerUser>true</isMessengerUser>"\ +#define MSN_CONTACT_DISPLAYNAME_XML \ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<displayName>%s</displayName>"\ + "<passportName>%s</passportName>"\ + "<isMessengerUser>true</isMessengerUser>"\ +#define MSN_CONTACT_ID_XML \ + "<contactId>%s</contactId>"\ +#define MSN_CONTACT_EMAIL_XML \ + "<contactEmailType>%s</contactEmailType>"\ + "<isMessengerEnabled>true</isMessengerEnabled>"\ + "<Capability>%d</Capability>"\ + "<MessengerEnabledExternally>false</MessengerEnabledExternally>"\ + "<propertiesChanged/>"\ +#define MSN_CONTACT_INVITE_MESSAGE_XML \ + "<MessengerMemberInfo>"\ + "<PendingAnnotations>"\ + "<Name>MSN.IM.InviteMessage</Name>"\ + "</PendingAnnotations>"\ + "<DisplayName>%s</DisplayName>"\ + "</MessengerMemberInfo>" +#define MSN_ADD_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ +"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>ContactSave</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<contacts>%s</contacts>"\ + "<EnableAllowListManagement>true</EnableAllowListManagement>"\ +/* Add a contact to a group */ +#define MSN_ADD_CONTACT_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactAdd" +#define MSN_ADD_CONTACT_GROUP_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ +"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>ContactSave</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABGroupContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<contacts>%s</contacts>"\ + "<groupContactAddOptions>"\ + "<fGenerateMissingQuickName>true</fGenerateMissingQuickName>"\ + "<EnableAllowListManagement>true</EnableAllowListManagement>"\ + "</groupContactAddOptions>"\ + "</ABGroupContactAdd>"\ +/* Delete a contact from the Contact List */ +#define MSN_CONTACT_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactDelete" +#define MSN_DEL_CONTACT_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Timer</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<contacts>%s</contacts>"\ +/* Remove a contact from a group */ +#define MSN_CONTACT_DEL_GROUP_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupContactDelete" +#define MSN_CONTACT_DEL_GROUP_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Timer</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABGroupContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<contacts>%s</contacts>"\ + "</ABGroupContactDelete>"\ +/* Update Contact Information */ +#define MSN_CONTACT_UPDATE_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactUpdate" +#define MSN_CONTACT_UPDATE_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario></PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABContactUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ +/* Update Contact Annotations */ +#define MSN_CONTACT_ANNOTATE_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABContactUpdate" +#define MSN_CONTACT_ANNOTATE_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario></PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABContactUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<propertiesChanged>Annotation</propertiesChanged>"\ +/******************************************************* + * Add/Delete contact from lists SOAP actions + *******************************************************/ +/* block means delete from allow list and add contact to block list */ +#define MSN_SHARE_POST_URL "/abservice/SharingService.asmx" +#define MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/AddMember" +#define MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/DeleteMember" +#define MSN_MEMBER_PASSPORT_XML \ + "<Member xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"%s\">"\ + "<State>Accepted</State>"\ +#define MSN_MEMBER_MEMBERSHIPID_XML \ + "<Member xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"%s\">"\ + "<MembershipId>%u</MembershipId>"\ + "<State>Accepted</State>"\ +/* first delete contact from allow list */ +#define MSN_CONTACT_DELETE_FROM_LIST_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>%s</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<DeleteMember xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<Type>Messenger</Type>"\ + "<ForeignId></ForeignId>"\ + "<MemberRole>%s</MemberRole>"\ +#define MSN_CONTACT_ADD_TO_LIST_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>%s</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<AddMember xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<Type>Messenger</Type>"\ + "<ForeignId></ForeignId>"\ + "<MemberRole>%s</MemberRole>"\ +/******************************************************* + * Group management SOAP actions + *******************************************************/ +#define MSN_GROUP_ADD_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupAdd" +#define MSN_GROUP_ADD_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>GroupSave</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABGroupAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<fRenameOnMsgrConflict>false</fRenameOnMsgrConflict>"\ + "<groupType>C8529CE2-6EAD-434d-881F-341E17DB3FF8</groupType>"\ + "<fMessenger>false</fMessenger>"\ + "<Name>MSN.IM.Display</Name>"\ +#define MSN_GROUP_DEL_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupDelete" +#define MSN_GROUP_DEL_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Timer</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABGroupDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ +/* change a group's name */ +#define MSN_GROUP_RENAME_SOAP_ACTION "http://www.msn.com/webservices/AddressBook/ABGroupUpdate" +#define MSN_GROUP_RENAME_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">"\ + "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ApplicationId>" MSN_APPLICATION_ID "</ApplicationId>"\ + "<IsMigration>false</IsMigration>"\ + "<PartnerScenario>Timer</PartnerScenario>"\ + "</ABApplicationHeader>"\ + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<ManagedGroupRequest>false</ManagedGroupRequest>"\ + "<TicketToken>EMPTY</TicketToken>"\ + "<ABGroupUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">"\ + "<abId>00000000-0000-0000-0000-000000000000</abId>"\ + "<groupId>%s</groupId>"\ + "<propertiesChanged>GroupName </propertiesChanged>"\ +struct _MsnCallbackState + gchar * old_group_name; + gchar * new_group_name; + MsnCallbackAction action; + const gchar *post_action; + /* For msn_get_contact_list only */ + MsnSoapPartnerScenario partner_scenario; +/************************************************ + ************************************************/ +MsnCallbackState * msn_callback_state_new(MsnSession *session); +MsnCallbackState * msn_callback_state_dup(MsnCallbackState *state); +void msn_callback_state_free(MsnCallbackState *state); +void msn_callback_state_set_who(MsnCallbackState *state, const gchar *who); +void msn_callback_state_set_uid(MsnCallbackState *state, const gchar *uid); +void msn_callback_state_set_old_group_name(MsnCallbackState *state, + const gchar *old_group_name); +void msn_callback_state_set_new_group_name(MsnCallbackState *state, + const gchar *new_group_name); +void msn_callback_state_set_guid(MsnCallbackState *state, const gchar *guid); +void msn_callback_state_set_list_id(MsnCallbackState *state, MsnListId list_id); +void msn_callback_state_set_action(MsnCallbackState *state, + MsnCallbackAction action); +void msn_get_contact_list(MsnSession *session, + const MsnSoapPartnerScenario partner_scenario, +void msn_get_address_book(MsnSession *session, + const MsnSoapPartnerScenario partner_scenario, + const char * update, const char * gupdate); +/* contact SOAP operations */ +void msn_update_contact(MsnSession *session, const char *passport, MsnContactUpdateType type, const char* value); +void msn_annotate_contact(MsnSession *session, const char *passport, ...) G_GNUC_NULL_TERMINATED; +void msn_add_contact(MsnSession *session, MsnCallbackState *state, +void msn_delete_contact(MsnSession *session, MsnUser *user); +void msn_add_contact_to_group(MsnSession *session, MsnCallbackState *state, + const char *passport, const char *groupId); +void msn_del_contact_from_group(MsnSession *session, const char *passport, + const char *group_name); +void msn_add_group(MsnSession *session, MsnCallbackState *state, + const char* group_name); +void msn_del_group(MsnSession *session, const gchar *group_name); +void msn_contact_rename_group(MsnSession *session, const char *old_group_name, + const char *new_group_name); +void msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state, + const gchar *passport, const MsnListId list); +void msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state, + const gchar *passport, const MsnListId list); +#endif /* MSN_CONTACT_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/conversation.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1476 @@
+ * @file conversation.h Conversation API + * @see @ref conversation-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_CONVERSATION_H_ +#define _PURPLE_CONVERSATION_H_ +/**************************************************************************/ +/**************************************************************************/ +/** @copydoc _PurpleConversationUiOps */ +typedef struct _PurpleConversationUiOps PurpleConversationUiOps; +/** @copydoc _PurpleConversation */ +typedef struct _PurpleConversation PurpleConversation; +/** @copydoc _PurpleConvIm */ +typedef struct _PurpleConvIm PurpleConvIm; +/** @copydoc _PurpleConvChat */ +typedef struct _PurpleConvChat PurpleConvChat; +/** @copydoc _PurpleConvChatBuddy */ +typedef struct _PurpleConvChatBuddy PurpleConvChatBuddy; +/** @copydoc _PurpleConvMessage */ +typedef struct _PurpleConvMessage PurpleConvMessage; + * A type of conversation. + PURPLE_CONV_TYPE_UNKNOWN = 0, /**< Unknown conversation type. */ + PURPLE_CONV_TYPE_IM, /**< Instant Message. */ + PURPLE_CONV_TYPE_CHAT, /**< Chat room. */ + PURPLE_CONV_TYPE_MISC, /**< A misc. conversation. */ + PURPLE_CONV_TYPE_ANY /**< Any type of conversation. */ +} PurpleConversationType; + * Conversation update type. + PURPLE_CONV_UPDATE_ADD = 0, /**< The buddy associated with the conversation + PURPLE_CONV_UPDATE_REMOVE, /**< The buddy associated with the conversation + PURPLE_CONV_UPDATE_ACCOUNT, /**< The purple_account was changed. */ + PURPLE_CONV_UPDATE_TYPING, /**< The typing state was updated. */ + PURPLE_CONV_UPDATE_UNSEEN, /**< The unseen state was updated. */ + PURPLE_CONV_UPDATE_LOGGING, /**< Logging for this conversation was + enabled or disabled. */ + PURPLE_CONV_UPDATE_TOPIC, /**< The topic for a chat was updated. */ + * XXX These need to go when we implement a more generic core/UI event + PURPLE_CONV_ACCOUNT_ONLINE, /**< One of the user's accounts went online. */ + PURPLE_CONV_ACCOUNT_OFFLINE, /**< One of the user's accounts went offline. */ + PURPLE_CONV_UPDATE_AWAY, /**< The other user went away. */ + PURPLE_CONV_UPDATE_ICON, /**< The other user's buddy icon changed. */ + PURPLE_CONV_UPDATE_TITLE, + PURPLE_CONV_UPDATE_CHATLEFT, + PURPLE_CONV_UPDATE_FEATURES /**< The features for a chat have changed */ + * The typing state of a user. + PURPLE_NOT_TYPING = 0, /**< Not typing. */ + PURPLE_TYPING, /**< Currently typing. */ + PURPLE_TYPED /**< Stopped typing momentarily. */ + * Flags applicable to a message. Most will have send, recv or system. + PURPLE_MESSAGE_SEND = 0x0001, /**< Outgoing message. */ + PURPLE_MESSAGE_RECV = 0x0002, /**< Incoming message. */ + PURPLE_MESSAGE_SYSTEM = 0x0004, /**< System message. */ + PURPLE_MESSAGE_AUTO_RESP = 0x0008, /**< Auto response. */ + PURPLE_MESSAGE_ACTIVE_ONLY = 0x0010, /**< Hint to the UI that this + which are only open for + (e.g. for contact-aware + PURPLE_MESSAGE_NICK = 0x0020, /**< Contains your nick. */ + PURPLE_MESSAGE_NO_LOG = 0x0040, /**< Do not log. */ + PURPLE_MESSAGE_WHISPER = 0x0080, /**< Whispered message. */ + PURPLE_MESSAGE_ERROR = 0x0200, /**< Error message. */ + PURPLE_MESSAGE_DELAYED = 0x0400, /**< Delayed message. */ + PURPLE_MESSAGE_RAW = 0x0800, /**< "Raw" message - don't + PURPLE_MESSAGE_IMAGES = 0x1000, /**< Message contains images */ + PURPLE_MESSAGE_NOTIFY = 0x2000, /**< Message is a notification */ + PURPLE_MESSAGE_NO_LINKIFY = 0x4000, /**< Message should not be auto- + linkified @since 2.1.0 */ + PURPLE_MESSAGE_INVISIBLE = 0x8000 /**< Message should not be displayed */ + * Flags applicable to users in Chats. + PURPLE_CBFLAGS_NONE = 0x0000, /**< No flags */ + PURPLE_CBFLAGS_VOICE = 0x0001, /**< Voiced user or "Participant" */ + PURPLE_CBFLAGS_HALFOP = 0x0002, /**< Half-op */ + PURPLE_CBFLAGS_OP = 0x0004, /**< Channel Op or Moderator */ + PURPLE_CBFLAGS_FOUNDER = 0x0008, /**< Channel Founder */ + PURPLE_CBFLAGS_TYPING = 0x0010, /**< Currently typing */ + PURPLE_CBFLAGS_AWAY = 0x0020 /**< Currently away. @since 2.8.0 */ +} PurpleConvChatBuddyFlags; + * Conversation operations and events. + * Any UI representing a conversation must assign a filled-out + * PurpleConversationUiOps structure to the PurpleConversation. +struct _PurpleConversationUiOps + /** Called when @a conv is created (but before the @ref + * conversation-created signal is emitted). + void (*create_conversation)(PurpleConversation *conv); + /** Called just before @a conv is freed. */ + void (*destroy_conversation)(PurpleConversation *conv); + /** Write a message to a chat. If this field is @c NULL, libpurple will + * fall back to using #write_conv. + * @see purple_conv_chat_write() + void (*write_chat)(PurpleConversation *conv, const char *who, + const char *message, PurpleMessageFlags flags, + /** Write a message to an IM conversation. If this field is @c NULL, + * libpurple will fall back to using #write_conv. + * @see purple_conv_im_write() + void (*write_im)(PurpleConversation *conv, const char *who, + const char *message, PurpleMessageFlags flags, + /** Write a message to a conversation. This is used rather than the + * chat- or im-specific ops for errors, system messages (such as "x is + * now know as y"), and as the fallback if #write_im and #write_chat + * are not implemented. It should be implemented, or the UI will miss + * conversation error messages and your users will hate you. + * @see purple_conversation_write() + void (*write_conv)(PurpleConversation *conv, + PurpleMessageFlags flags, + /** Add @a cbuddies to a chat. + * @param cbuddies A @c GList of #PurpleConvChatBuddy structs. + * @param new_arrivals Whether join notices should be shown. + * (Join notices are actually written to the + * conversation by #purple_conv_chat_add_users().) + void (*chat_add_users)(PurpleConversation *conv, + gboolean new_arrivals); + /** Rename the user in this chat named @a old_name to @a new_name. (The + * rename message is written to the conversation by libpurple.) + * @param new_alias @a new_name's new alias, if they have one. + * @see purple_conv_chat_add_users() + void (*chat_rename_user)(PurpleConversation *conv, const char *old_name, + const char *new_name, const char *new_alias); + /** Remove @a users from a chat. + * @param users A @c GList of <tt>const char *</tt>s. + * @see purple_conv_chat_rename_user() + void (*chat_remove_users)(PurpleConversation *conv, GList *users); + /** Called when a user's flags are changed. + * @see purple_conv_chat_user_set_flags() + void (*chat_update_user)(PurpleConversation *conv, const char *user); + /** Present this conversation to the user; for example, by displaying + void (*present)(PurpleConversation *conv); + /** If this UI has a concept of focus (as in a windowing system) and + * this conversation has the focus, return @c TRUE; otherwise, return + gboolean (*has_focus)(PurpleConversation *conv); + gboolean (*custom_smiley_add)(PurpleConversation *conv, const char *smile, gboolean remote); + void (*custom_smiley_write)(PurpleConversation *conv, const char *smile, + const guchar *data, gsize size); + void (*custom_smiley_close)(PurpleConversation *conv, const char *smile); + /** Prompt the user for confirmation to send @a message. This function + * should arrange for the message to be sent if the user accepts. If + * this field is @c NULL, libpurple will fall back to using + * #purple_request_action(). + void (*send_confirm)(PurpleConversation *conv, const char *message); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + * Data specific to Instant Messages. + PurpleConversation *conv; /**< The parent conversation. */ + PurpleTypingState typing_state; /**< The current typing state. */ + guint typing_timeout; /**< The typing timer handle. */ + time_t type_again; /**< The type again time. */ + guint send_typed_timeout; /**< The type again timer handle. */ + PurpleBuddyIcon *icon; /**< The buddy icon. */ + * Data specific to Chats. + PurpleConversation *conv; /**< The parent conversation. */ + GList *in_room; /**< The users in the room. + * @deprecated Will be removed in 3.0.0 + GList *ignored; /**< Ignored users. */ + char *who; /**< The person who set the topic. */ + char *topic; /**< The topic. */ + int id; /**< The chat ID. */ + char *nick; /**< Your nick in this chat. */ + gboolean left; /**< We left the chat and kept the window open */ + GHashTable *users; /**< Hash table of the users in the room. + * Data for "Chat Buddies" +struct _PurpleConvChatBuddy + char *name; /**< The chat participant's name in the chat. */ + char *alias; /**< The chat participant's alias, if known; + char *alias_key; /**< A string by which this buddy will be sorted, + * or @c NULL if the buddy should be sorted by + * its @c name. (This is currently always @c + gboolean buddy; /**< @a TRUE if this chat participant is on the + * buddy list; @a FALSE otherwise. + PurpleConvChatBuddyFlags flags; /**< A bitwise OR of flags for this participant, + * such as whether they are a channel operator. + GHashTable *attributes; /**< A hash table of attributes about the user, such as + * real name, user@host, etc. + gpointer ui_data; /** < The UI can put whatever it wants here. */ + * Description of a conversation message +struct _PurpleConvMessage + PurpleMessageFlags flags; + PurpleConversation *conv; /**< @since 2.3.0 */ + char *alias; /**< @since 2.3.0 */ + * A core representation of a conversation between two or more people. + * The conversation can be an IM or a chat. +struct _PurpleConversation + PurpleConversationType type; /**< The type of conversation. */ + PurpleAccount *account; /**< The user using this conversation. */ + char *name; /**< The name of the conversation. */ + char *title; /**< The window title. */ + gboolean logging; /**< The status of logging. */ + GList *logs; /**< This conversation's logs */ + PurpleConvIm *im; /**< IM-specific data. */ + PurpleConvChat *chat; /**< Chat-specific data. */ + void *misc; /**< Misc. data. */ + PurpleConversationUiOps *ui_ops; /**< UI-specific operations. */ + void *ui_data; /**< UI-specific data. */ + GHashTable *data; /**< Plugin-specific data. */ + PurpleConnectionFlags features; /**< The supported features */ + GList *message_history; /**< Message history, as a GList of PurpleConvMessage's */ +/**************************************************************************/ +/** @name Conversation API */ +/**************************************************************************/ + * Creates a new conversation of the specified type. + * @param type The type of conversation. + * @param account The account opening the conversation window on the purple + * @param name The name of the conversation. For PURPLE_CONV_TYPE_IM, + * this is the name of the buddy. + * @return The new conversation. +PurpleConversation *purple_conversation_new(PurpleConversationType type, + PurpleAccount *account, + * Destroys the specified conversation and removes it from the parent + * If this conversation is the only one contained in the parent window, + * that window is also destroyed. + * @param conv The conversation to destroy. +void purple_conversation_destroy(PurpleConversation *conv); + * Present a conversation to the user. This allows core code to initiate a + * conversation by displaying the IM dialog. + * @param conv The conversation to present +void purple_conversation_present(PurpleConversation *conv); + * Returns the specified conversation's type. + * @param conv The conversation. + * @return The conversation's type. +PurpleConversationType purple_conversation_get_type(const PurpleConversation *conv); + * Sets the specified conversation's UI operations structure. + * @param conv The conversation. + * @param ops The UI conversation operations structure. +void purple_conversation_set_ui_ops(PurpleConversation *conv, + PurpleConversationUiOps *ops); + * Sets the default conversation UI operations structure. + * @param ops The UI conversation operations structure. +void purple_conversations_set_ui_ops(PurpleConversationUiOps *ops); + * Returns the specified conversation's UI operations structure. + * @param conv The conversation. + * @return The operations structure. +PurpleConversationUiOps *purple_conversation_get_ui_ops( + const PurpleConversation *conv); + * Sets the specified conversation's purple_account. + * This purple_account represents the user using purple, not the person the user + * is having a conversation/chat/flame with. + * @param conv The conversation. + * @param account The purple_account. +void purple_conversation_set_account(PurpleConversation *conv, + PurpleAccount *account); + * Returns the specified conversation's purple_account. + * This purple_account represents the user using purple, not the person the user + * is having a conversation/chat/flame with. + * @param conv The conversation. + * @return The conversation's purple_account. +PurpleAccount *purple_conversation_get_account(const PurpleConversation *conv); + * Returns the specified conversation's purple_connection. + * This is the same as purple_conversation_get_user(conv)->gc. + * @param conv The conversation. + * @return The conversation's purple_connection. +PurpleConnection *purple_conversation_get_gc(const PurpleConversation *conv); + * Sets the specified conversation's title. + * @param conv The conversation. + * @param title The title. +void purple_conversation_set_title(PurpleConversation *conv, const char *title); + * Returns the specified conversation's title. + * @param conv The conversation. +const char *purple_conversation_get_title(const PurpleConversation *conv); + * Automatically sets the specified conversation's title. + * This function takes OPT_IM_ALIAS_TAB into account, as well as the + * @param conv The conversation. +void purple_conversation_autoset_title(PurpleConversation *conv); + * Sets the specified conversation's name. + * @param conv The conversation. + * @param name The conversation's name. +void purple_conversation_set_name(PurpleConversation *conv, const char *name); + * Returns the specified conversation's name. + * @param conv The conversation. + * @return The conversation's name. If the conversation is an IM with a PurpleBuddy, + * then it's the name of the PurpleBuddy. +const char *purple_conversation_get_name(const PurpleConversation *conv); + * Get an attribute of a chat buddy + * @param cb The chat buddy. + * @param key The key of the attribute. + * @return The value of the attribute key. +const char *purple_conv_chat_cb_get_attribute(PurpleConvChatBuddy *cb, const char *key); + * Get the keys of all atributes of a chat buddy + * @param cb The chat buddy. + * @return A list of the attributes of a chat buddy. +GList *purple_conv_chat_cb_get_attribute_keys(PurpleConvChatBuddy *cb); + * Set an attribute of a chat buddy + * @param chat The chat. + * @param cb The chat buddy. + * @param key The key of the attribute. + * @param value The value of the attribute. +void purple_conv_chat_cb_set_attribute(PurpleConvChat *chat, PurpleConvChatBuddy *cb, const char *key, const char *value); + * Set attributes of a chat buddy + * @param chat The chat. + * @param cb The chat buddy. + * @param keys A GList of the keys. + * @param values A GList of the values. +purple_conv_chat_cb_set_attributes(PurpleConvChat *chat, PurpleConvChatBuddy *cb, GList *keys, GList *values); + * Enables or disables logging for this conversation. + * @param conv The conversation. + * @param log @c TRUE if logging should be enabled, or @c FALSE otherwise. +void purple_conversation_set_logging(PurpleConversation *conv, gboolean log); + * Returns whether or not logging is enabled for this conversation. + * @param conv The conversation. + * @return @c TRUE if logging is enabled, or @c FALSE otherwise. +gboolean purple_conversation_is_logging(const PurpleConversation *conv); + * Closes any open logs for this conversation. + * Note that new logs will be opened as necessary (e.g. upon receipt of a + * message, if the conversation has logging enabled. To disable logging for + * the remainder of the conversation, use purple_conversation_set_logging(). + * @param conv The conversation. +void purple_conversation_close_logs(PurpleConversation *conv); + * Returns the specified conversation's IM-specific data. + * If the conversation type is not PURPLE_CONV_TYPE_IM, this will return @c NULL. + * @param conv The conversation. + * @return The IM-specific data. +PurpleConvIm *purple_conversation_get_im_data(const PurpleConversation *conv); +#define PURPLE_CONV_IM(c) (purple_conversation_get_im_data(c)) + * Returns the specified conversation's chat-specific data. + * If the conversation type is not PURPLE_CONV_TYPE_CHAT, this will return @c NULL. + * @param conv The conversation. + * @return The chat-specific data. +PurpleConvChat *purple_conversation_get_chat_data(const PurpleConversation *conv); +#define PURPLE_CONV_CHAT(c) (purple_conversation_get_chat_data(c)) + * Sets extra data for a conversation. + * @param conv The conversation. + * @param key The unique key. + * @param data The data to assign. +void purple_conversation_set_data(PurpleConversation *conv, const char *key, + * Returns extra data in a conversation. + * @param conv The conversation. + * @param key The unqiue key. + * @return The data associated with the key. +gpointer purple_conversation_get_data(PurpleConversation *conv, const char *key); + * Returns a list of all conversations. + * This list includes both IMs and chats. + * @constreturn A GList of all conversations. +GList *purple_get_conversations(void); + * Returns a list of all IMs. + * @constreturn A GList of all IMs. +GList *purple_get_ims(void); + * Returns a list of all chats. + * @constreturn A GList of all chats. +GList *purple_get_chats(void); + * Finds a conversation with the specified type, name, and Purple account. + * @param type The type of the conversation. + * @param name The name of the conversation. + * @param account The purple_account associated with the conversation. + * @return The conversation if found, or @c NULL otherwise. +PurpleConversation *purple_find_conversation_with_account( + PurpleConversationType type, const char *name, + const PurpleAccount *account); + * Writes to a conversation window. + * This function should not be used to write IM or chat messages. Use + * purple_conv_im_write() and purple_conv_chat_write() instead. Those functions will + * most likely call this anyway, but they may do their own formatting, + * This can be used to write generic messages, such as "so and so closed + * the conversation window." + * @param conv The conversation. + * @param who The user who sent the message. + * @param message The message. + * @param flags The message flags. + * @param mtime The time the message was sent. + * @see purple_conv_im_write() + * @see purple_conv_chat_write() +void purple_conversation_write(PurpleConversation *conv, const char *who, + const char *message, PurpleMessageFlags flags, + Set the features as supported for the given conversation. + @param conv The conversation + @param features Bitset defining supported features +void purple_conversation_set_features(PurpleConversation *conv, + PurpleConnectionFlags features); + Get the features supported by the given conversation. + @param conv The conversation +PurpleConnectionFlags purple_conversation_get_features(PurpleConversation *conv); + * Determines if a conversation has focus + * @param conv The conversation. + * @return @c TRUE if the conversation has focus, @c FALSE if + * it does not or the UI does not have a concept of conversation focus +gboolean purple_conversation_has_focus(PurpleConversation *conv); + * Updates the visual status and UI of a conversation. + * @param conv The conversation. + * @param type The update type. +void purple_conversation_update(PurpleConversation *conv, PurpleConvUpdateType type); + * Calls a function on each conversation. + * @param func The function. +void purple_conversation_foreach(void (*func)(PurpleConversation *conv)); + * Retrieve the message history of a conversation. + * @param conv The conversation + * @return A GList of PurpleConvMessage's. The must not modify the list or the data within. + * The list contains the newest message at the beginning, and the oldest message at +GList *purple_conversation_get_message_history(PurpleConversation *conv); + * Clear the message history of a conversation. + * @param conv The conversation +void purple_conversation_clear_message_history(PurpleConversation *conv); + * Get the sender from a PurpleConvMessage + * @param msg A PurpleConvMessage + * @return The name of the sender of the message +const char *purple_conversation_message_get_sender(PurpleConvMessage *msg); + * Get the message from a PurpleConvMessage + * @param msg A PurpleConvMessage + * @return The name of the sender of the message +const char *purple_conversation_message_get_message(PurpleConvMessage *msg); + * Get the message-flags of a PurpleConvMessage + * @param msg A PurpleConvMessage + * @return The message flags +PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage *msg); + * Get the timestamp of a PurpleConvMessage + * @param msg A PurpleConvMessage + * @return The timestamp of the message +time_t purple_conversation_message_get_timestamp(PurpleConvMessage *msg); +/**************************************************************************/ +/** @name IM Conversation API */ +/**************************************************************************/ + * Gets an IM's parent conversation. + * @return The parent conversation. +PurpleConversation *purple_conv_im_get_conversation(const PurpleConvIm *im); + * Sets the IM's buddy icon. + * This should only be called from within Purple. You probably want to + * call purple_buddy_icon_set_data(). + * @param icon The buddy icon. + * @see purple_buddy_icon_set_data() +void purple_conv_im_set_icon(PurpleConvIm *im, PurpleBuddyIcon *icon); + * Returns the IM's buddy icon. + * @return The buddy icon. +PurpleBuddyIcon *purple_conv_im_get_icon(const PurpleConvIm *im); + * Sets the IM's typing state. + * @param state The typing state. +void purple_conv_im_set_typing_state(PurpleConvIm *im, PurpleTypingState state); + * Returns the IM's typing state. + * @return The IM's typing state. +PurpleTypingState purple_conv_im_get_typing_state(const PurpleConvIm *im); + * Starts the IM's typing timeout. + * @param timeout The timeout. +void purple_conv_im_start_typing_timeout(PurpleConvIm *im, int timeout); + * Stops the IM's typing timeout. +void purple_conv_im_stop_typing_timeout(PurpleConvIm *im); + * Returns the IM's typing timeout. +guint purple_conv_im_get_typing_timeout(const PurpleConvIm *im); + * Sets the quiet-time when no PURPLE_TYPING messages will be sent. + * Few protocols need this (maybe only MSN). If the user is still + * typing after this quiet-period, then another PURPLE_TYPING message + * @param val The number of seconds to wait before allowing another + * PURPLE_TYPING message to be sent to the user. Or 0 to + * not send another PURPLE_TYPING message. +void purple_conv_im_set_type_again(PurpleConvIm *im, unsigned int val); + * Returns the time after which another PURPLE_TYPING message should be sent. + * @return The time in seconds since the epoch. Or 0 if no additional + * PURPLE_TYPING message should be sent. +time_t purple_conv_im_get_type_again(const PurpleConvIm *im); + * Starts the IM's type again timeout. +void purple_conv_im_start_send_typed_timeout(PurpleConvIm *im); + * Stops the IM's type again timeout. +void purple_conv_im_stop_send_typed_timeout(PurpleConvIm *im); + * Returns the IM's type again timeout interval. + * @return The type again timeout interval. +guint purple_conv_im_get_send_typed_timeout(const PurpleConvIm *im); + * Updates the visual typing notification for an IM conversation. +void purple_conv_im_update_typing(PurpleConvIm *im); + * @param who The user who sent the message. + * @param message The message to write. + * @param flags The message flags. + * @param mtime The time the message was sent. +void purple_conv_im_write(PurpleConvIm *im, const char *who, + const char *message, PurpleMessageFlags flags, + * Presents an IM-error to the user + * This is a helper function to find a conversation, write an error to it, and + * raise the window. If a conversation with this user doesn't already exist, + * the function will return FALSE and the calling function can attempt to present + * the error another way (purple_notify_error, most likely) + * @param who The user this error is about + * @param account The account this error is on + * @param what The error + * @return TRUE if the error was presented, else FALSE +gboolean purple_conv_present_error(const char *who, PurpleAccount *account, const char *what); + * Sends a message to this IM conversation. + * @param message The message to send. +void purple_conv_im_send(PurpleConvIm *im, const char *message); + * Sends a message to a conversation after confirming with + * This function is intended for use in cases where the user + * hasn't explicitly and knowingly caused a message to be sent. + * The confirmation ensures that the user isn't sending a + * @param conv The conversation. + * @param message The message to send. +void purple_conv_send_confirm(PurpleConversation *conv, const char *message); + * Sends a message to this IM conversation with specified flags. + * @param message The message to send. + * @param flags The PurpleMessageFlags flags to use in addition to PURPLE_MESSAGE_SEND. +void purple_conv_im_send_with_flags(PurpleConvIm *im, const char *message, PurpleMessageFlags flags); + * Adds a smiley to the conversation's smiley tree. If this returns + * @c TRUE you should call purple_conv_custom_smiley_write() one or more + * times, and then purple_conv_custom_smiley_close(). If this returns + * @c FALSE, either the conv or smile were invalid, or the icon was + * found in the cache. In either case, calling write or close would + * @param conv The conversation to associate the smiley with. + * @param smile The text associated with the smiley + * @param cksum_type The type of checksum. + * @param chksum The checksum, as a NUL terminated base64 string. + * @param remote @c TRUE if the custom smiley is set by the remote user (buddy). + * @return @c TRUE if an icon is expected, else FALSE. Note that + * it is an error to never call purple_conv_custom_smiley_close if + * this function returns @c TRUE, but an error to call it if + * @c FALSE is returned. +gboolean purple_conv_custom_smiley_add(PurpleConversation *conv, const char *smile, + const char *cksum_type, const char *chksum, + * Updates the image associated with the current smiley. + * @param conv The conversation associated with the smiley. + * @param smile The text associated with the smiley. + * @param data The actual image data. + * @param size The length of the data. +void purple_conv_custom_smiley_write(PurpleConversation *conv, + * Close the custom smiley, all data has been written with + * purple_conv_custom_smiley_write, and it is no longer valid + * to call that function on that smiley. + * @param conv The purple conversation associated with the smiley. + * @param smile The text associated with the smiley +void purple_conv_custom_smiley_close(PurpleConversation *conv, const char *smile); +/**************************************************************************/ +/** @name Chat Conversation API */ +/**************************************************************************/ + * Gets a chat's parent conversation. + * @param chat The chat. + * @return The parent conversation. +PurpleConversation *purple_conv_chat_get_conversation(const PurpleConvChat *chat); + * Sets the list of users in the chat room. + * @note Calling this function will not update the display of the users. + * Please use purple_conv_chat_add_user(), purple_conv_chat_add_users(), + * purple_conv_chat_remove_user(), and purple_conv_chat_remove_users() instead. + * @param chat The chat. + * @param users The list of users. + * @return The list passed. + * @deprecated This function will be removed in 3.0.0. You shouldn't be using it anyway. +GList *purple_conv_chat_set_users(PurpleConvChat *chat, GList *users); + * Returns a list of users in the chat room. The members of the list + * are PurpleConvChatBuddy objects. + * @param chat The chat. + * @constreturn The list of users. +GList *purple_conv_chat_get_users(const PurpleConvChat *chat); + * Ignores a user in a chat room. + * @param chat The chat. + * @param name The name of the user. +void purple_conv_chat_ignore(PurpleConvChat *chat, const char *name); + * Unignores a user in a chat room. + * @param chat The chat. + * @param name The name of the user. +void purple_conv_chat_unignore(PurpleConvChat *chat, const char *name); + * Sets the list of ignored users in the chat room. + * @param chat The chat. + * @param ignored The list of ignored users. + * @return The list passed. +GList *purple_conv_chat_set_ignored(PurpleConvChat *chat, GList *ignored); + * Returns the list of ignored users in the chat room. + * @param chat The chat. + * @constreturn The list of ignored users. +GList *purple_conv_chat_get_ignored(const PurpleConvChat *chat); + * Returns the actual name of the specified ignored user, if it exists in + * If the user found contains a prefix, such as '+' or '\@', this is also + * returned. The username passed to the function does not have to have this + * @param chat The chat. + * @param user The user to check in the ignore list. + * @return The ignored user if found, complete with prefixes, or @c NULL +const char *purple_conv_chat_get_ignored_user(const PurpleConvChat *chat, + * Returns @c TRUE if the specified user is ignored. + * @param chat The chat. + * @param user The user. + * @return @c TRUE if the user is in the ignore list; @c FALSE otherwise. +gboolean purple_conv_chat_is_user_ignored(const PurpleConvChat *chat, + * Sets the chat room's topic. + * @param chat The chat. + * @param who The user that set the topic. + * @param topic The topic. +void purple_conv_chat_set_topic(PurpleConvChat *chat, const char *who, + * Returns the chat room's topic. + * @param chat The chat. + * @return The chat's topic. +const char *purple_conv_chat_get_topic(const PurpleConvChat *chat); + * Sets the chat room's ID. + * @param chat The chat. +void purple_conv_chat_set_id(PurpleConvChat *chat, int id); + * Returns the chat room's ID. + * @param chat The chat. +int purple_conv_chat_get_id(const PurpleConvChat *chat); + * @param chat The chat. + * @param who The user who sent the message. + * @param message The message to write. + * @param flags The flags. + * @param mtime The time the message was sent. +void purple_conv_chat_write(PurpleConvChat *chat, const char *who, + const char *message, PurpleMessageFlags flags, + * Sends a message to this chat conversation. + * @param chat The chat. + * @param message The message to send. +void purple_conv_chat_send(PurpleConvChat *chat, const char *message); + * Sends a message to this chat conversation with specified flags. + * @param chat The chat. + * @param message The message to send. + * @param flags The PurpleMessageFlags flags to use. +void purple_conv_chat_send_with_flags(PurpleConvChat *chat, const char *message, PurpleMessageFlags flags); + * Adds a user to a chat. + * @param chat The chat. + * @param user The user to add. + * @param extra_msg An extra message to display with the join message. + * @param flags The users flags + * @param new_arrival Decides whether or not to show a join notice. +void purple_conv_chat_add_user(PurpleConvChat *chat, const char *user, + const char *extra_msg, PurpleConvChatBuddyFlags flags, + * Adds a list of users to a chat. + * The data is copied from @a users, @a extra_msgs, and @a flags, so it is up to + * the caller to free this list after calling this function. + * @param chat The chat. + * @param users The list of users to add. + * @param extra_msgs An extra message to display with the join message for each + * user. This list may be shorter than @a users, in which + * case, the users after the end of extra_msgs will not have + * an extra message. By extension, this means that extra_msgs + * can simply be @c NULL and none of the users will have an + * @param flags The list of flags for each user. + * @param new_arrivals Decides whether or not to show join notices. +void purple_conv_chat_add_users(PurpleConvChat *chat, GList *users, GList *extra_msgs, + GList *flags, gboolean new_arrivals); + * Renames a user in a chat. + * @param chat The chat. + * @param old_user The old username. + * @param new_user The new username. +void purple_conv_chat_rename_user(PurpleConvChat *chat, const char *old_user, + * Removes a user from a chat, optionally with a reason. + * It is up to the developer to free this list after calling this function. + * @param chat The chat. + * @param user The user that is being removed. + * @param reason The optional reason given for the removal. Can be @c NULL. +void purple_conv_chat_remove_user(PurpleConvChat *chat, const char *user, + * Removes a list of users from a chat, optionally with a single reason. + * @param chat The chat. + * @param users The users that are being removed. + * @param reason The optional reason given for the removal. Can be @c NULL. +void purple_conv_chat_remove_users(PurpleConvChat *chat, GList *users, + * Finds a user in a chat + * @param chat The chat. + * @param user The user to look for. + * @return TRUE if the user is in the chat, FALSE if not +gboolean purple_conv_chat_find_user(PurpleConvChat *chat, const char *user); + * Set a users flags in a chat + * @param chat The chat. + * @param user The user to update. + * @param flags The new flags. +void purple_conv_chat_user_set_flags(PurpleConvChat *chat, const char *user, + PurpleConvChatBuddyFlags flags); + * Get the flags for a user in a chat + * @param chat The chat. + * @param user The user to find the flags for + * @return The flags for the user +PurpleConvChatBuddyFlags purple_conv_chat_user_get_flags(PurpleConvChat *chat, + * Clears all users from a chat. + * @param chat The chat. +void purple_conv_chat_clear_users(PurpleConvChat *chat); + * Sets your nickname (used for hilighting) for a chat. + * @param chat The chat. + * @param nick The nick. +void purple_conv_chat_set_nick(PurpleConvChat *chat, const char *nick); + * Gets your nickname (used for hilighting) for a chat. + * @param chat The chat. +const char *purple_conv_chat_get_nick(PurpleConvChat *chat); + * Finds a chat with the specified chat ID. + * @param gc The purple_connection. + * @param id The chat ID. + * @return The chat conversation. +PurpleConversation *purple_find_chat(const PurpleConnection *gc, int id); + * Lets the core know we left a chat, without destroying it. + * Called from serv_got_chat_left(). + * @param chat The chat. +void purple_conv_chat_left(PurpleConvChat *chat); + * Invite a user to a chat. + * The user will be prompted to enter the user's name or a message if one is + * @param chat The chat. + * @param user The user to invite to the chat. + * @param message The message to send with the invitation. + * @param confirm Prompt before sending the invitation. The user is always + * prompted if either \a user or \a message is @c NULL. +void purple_conv_chat_invite_user(PurpleConvChat *chat, const char *user, + const char *message, gboolean confirm); + * Returns true if we're no longer in this chat, + * and just left the window open. + * @param chat The chat. + * @return @c TRUE if we left the chat already, @c FALSE if +gboolean purple_conv_chat_has_left(PurpleConvChat *chat); + * Creates a new chat buddy + * @param name The name. + * @param alias The alias. + * @param flags The flags. + * @return The new chat buddy +PurpleConvChatBuddy *purple_conv_chat_cb_new(const char *name, const char *alias, + PurpleConvChatBuddyFlags flags); + * Find a chat buddy in a chat + * @param chat The chat. + * @param name The name of the chat buddy to find. +PurpleConvChatBuddy *purple_conv_chat_cb_find(PurpleConvChat *chat, const char *name); + * Get the name of a chat buddy + * @param cb The chat buddy. + * @return The name of the chat buddy. +const char *purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb); + * Destroys a chat buddy + * @param cb The chat buddy to destroy +void purple_conv_chat_cb_destroy(PurpleConvChatBuddy *cb); + * Retrieves the extended menu items for the conversation. + * @param conv The conversation. + * @return A list of PurpleMenuAction items, harvested by the + * chat-extended-menu signal. The list and the menuaction + * items should be freed by the caller. +GList * purple_conversation_get_extended_menu(PurpleConversation *conv); + * Perform a command in a conversation. Similar to @see purple_cmd_do_command + * @param conv The conversation. + * @param cmdline The entire command including the arguments. + * @param markup @c NULL, or the formatted command line. + * @param error If the command failed errormsg is filled in with the appropriate error + * message, if not @c NULL. It must be freed by the caller with g_free(). + * @return @c TRUE if the command was executed successfully, @c FALSE otherwise. +gboolean purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **error); +/**************************************************************************/ +/** @name Conversations Subsystem */ +/**************************************************************************/ + * Returns the conversation subsystem handle. + * @return The conversation subsystem handle. +void *purple_conversations_get_handle(void); + * Initializes the conversation subsystem. +void purple_conversations_init(void); + * Uninitializes the conversation subsystem. +void purple_conversations_uninit(void); +#endif /* _PURPLE_CONVERSATION_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/core.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,251 @@
+ * @file core.h Startup and shutdown of libpurple + * @defgroup core libpurple + * @see @ref core-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/*! @mainpage Pidgin/Finch/libpurple API Documentation + * <a href="group__core.html">libpurple</a> is intended to be the core of an IM + * program. <a href="group__pidgin.html">Pidgin</a> is a GTK+ frontend + * to libpurple, and <a href="group__finch.html">Finch</a> is an ncurses + * frontend built using <a href="group__gnt.html">libgnt</a> + * (GLib Ncurses Toolkit). +typedef struct PurpleCore PurpleCore; +/** Callbacks that fire at different points of the initialization and teardown + * of libpurple, along with a hook to return descriptive information about the + /** Called just after the preferences subsystem is initialized; the UI + * could use this callback to add some preferences it needs to be in + * place when other subsystems are initialized. + void (*ui_prefs_init)(void); + /** Called just after the debug subsystem is initialized, but before + * just about every other component's initialization. The UI should + * use this hook to call purple_debug_set_ui_ops() so that debugging + * information for other components can be logged during their + void (*debug_ui_init)(void); + /** Called after all of libpurple has been initialized. The UI should + * use this hook to set all other necessary UiOps structures. + /** Called after most of libpurple has been uninitialized. */ + /** Called by purple_core_get_ui_info(); should return the information + GHashTable* (*get_ui_info)(void); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + * Initializes the core of purple. + * This will setup preferences for all the core subsystems. + * @param ui The ID of the UI using the core. This should be a + * unique ID, registered with the purple team. + * @return @c TRUE if successful, or @c FALSE otherwise. +gboolean purple_core_init(const char *ui); + * Quits the core of purple, which, depending on the UI, may quit the + * application using the purple core. +void purple_core_quit(void); + * Calls purple_core_quit(). This can be used as the function + * passed to purple_timeout_add() when you want to shutdown Purple + * in a specified amount of time. When shutting down Purple + * from a plugin, you must use this instead of purple_core_quit(); + * for an immediate exit, use a timeout value of 0: + * <code>purple_timeout_add(0, purple_core_quitcb, NULL);</code> + * This is ensures that code from your plugin is not being + * executed when purple_core_quit() is called. If the plugin + * called purple_core_quit() directly, you would get a core dump + * after purple_core_quit() executes and control returns to your + * plugin because purple_core_quit() frees all plugins. +gboolean purple_core_quit_cb(gpointer unused); + * Returns the version of the core library. + * @return The version of the core library. +const char *purple_core_get_version(void); + * Returns the ID of the UI that is using the core, as passed to + * @return The ID of the UI that is currently using the core. +const char *purple_core_get_ui(void); + * Returns a handle to the purple core. + * This is used to connect to @ref core-signals "core signals". +PurpleCore *purple_get_core(void); + * Sets the UI ops for the core. + * @param ops A UI ops structure for the core. +void purple_core_set_ui_ops(PurpleCoreUiOps *ops); + * Returns the UI ops for the core. + * @return The core's UI ops structure. +PurpleCoreUiOps *purple_core_get_ui_ops(void); + * Migrates from <tt>.gaim</tt> to <tt>.purple</tt>. + * UIs <strong>must not</strong> call this if they have been told to use a + * custom user directory. + * @return A boolean indicating success or migration failure. On failure, + * the application must display an error to the user and then exit. +gboolean purple_core_migrate(void); + * Ensures that only one instance is running. If libpurple is built with D-Bus + * support, this checks if another process owns the libpurple bus name and if + * so whether that process is using the same configuration directory as this + * @return @c TRUE if this is the first instance of libpurple running; + * @c FALSE if there is another instance running. +gboolean purple_core_ensure_single_instance(void); + * Returns a hash table containing various information about the UI. The + * following well-known entries may be in the table (along with any others the + * UI might choose to include): + * <dt><tt>name</tt></dt> + * <dd>the user-readable name for the UI.</dd> + * <dt><tt>version</tt></dt> + * <dd>a user-readable description of the current version of the UI.</dd> + * <dt><tt>website</tt></dt> + * <dd>the UI's website, such as http://pidgin.im.</dd> + * <dt><tt>dev_website</tt></dt> + * <dd>the UI's development/support website, such as http://developer.pidgin.im.</dd> + * <dt><tt>client_type</tt></dt> + * <dd>the type of UI. Possible values include 'pc', 'console', 'phone', + * 'handheld', 'web', and 'bot'. These values are compared + * programmatically and should not be localized.</dd> + * @return A GHashTable with strings for keys and values. This + * hash table must not be freed and should not be modified. +GHashTable* purple_core_get_ui_info(void); +#endif /* _PURPLE_CORE_H_ */ + `//"\\ """"`---.___.-"" + __--""" ,-/-==\\ | | `\ ,' + _-" /' | \\ ___ / / \ / + .' / | \\ /" "\ /' / \ /' + / ____ / | \`\.__/-"" D O \_/' / \/' +/-'" """""---__ | "-/" O G R /' _--"` + \_| / R __--_ t ), __--"" + '""--_/ T _-"_>--<_\ h '-" \ + {\__--_/} / \\__>--<__\ e B \ + /' (_/ _-" | |__>--<__| U | + | _/) )-" | |__>--<__| R | + / /" ,_/ / /__>---<__/ N | + o-o _// /-"_>---<__-" I / + ,//('( |__>--<__| T / .----_ + ( ( ')) |__>--<__| | /' _---_"\ + `-)) )) ( |__>--<__| O | /' / "\`\ + ,/,'//( ( \__>--<__\ R \ /' // || + ,( ( ((, )) "-__>--<_"-_ "--____---"' _/'/ /' + `"/ )` ) ,/| "-_">--<_/-__ __-" _/ + ._-"//( )/ )) ` ""-'_/_/ /"""""""__--" --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/dbus-maybe.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,35 @@
+/* This file contains macros that wrap calls to the purple dbus module. + These macros call the appropriate functions if the build includes + dbus support and do nothing otherwise. See "dbus-server.h" for +#ifndef _PURPLE_DBUS_MAYBE_H_ +#define _PURPLE_DBUS_MAYBE_H_ +#ifndef DBUS_API_SUBJECT_TO_CHANGE +#define DBUS_API_SUBJECT_TO_CHANGE +#include "dbus-server.h" +/* this provides a type check */ +#define PURPLE_DBUS_REGISTER_POINTER(ptr, type) { \ + type *typed_ptr = ptr; \ + purple_dbus_register_pointer(typed_ptr, PURPLE_DBUS_TYPE(type)); \ +#define PURPLE_DBUS_UNREGISTER_POINTER(ptr) purple_dbus_unregister_pointer(ptr) +#define PURPLE_DBUS_REGISTER_POINTER(ptr, type) { \ +#define PURPLE_DBUS_UNREGISTER_POINTER(ptr) --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/debug.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,243 @@
+ * @file debug.h Debug API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_DEBUG_H_ +#define _PURPLE_DEBUG_H_ + PURPLE_DEBUG_ALL = 0, /**< All debug levels. */ + PURPLE_DEBUG_MISC, /**< General chatter. */ + PURPLE_DEBUG_INFO, /**< General operation Information. */ + PURPLE_DEBUG_WARNING, /**< Warnings. */ + PURPLE_DEBUG_ERROR, /**< Errors. */ + PURPLE_DEBUG_FATAL /**< Fatal errors. */ + void (*print)(PurpleDebugLevel level, const char *category, + gboolean (*is_enabled)(PurpleDebugLevel level, + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/**************************************************************************/ + * Outputs debug information. + * @param level The debug level. + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug(PurpleDebugLevel level, const char *category, + const char *format, ...) G_GNUC_PRINTF(3, 4); + * Outputs misc. level debug information. + * This is a wrapper for purple_debug(), and uses PURPLE_DEBUG_MISC as + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug_misc(const char *category, const char *format, ...) G_GNUC_PRINTF(2, 3); + * Outputs info level debug information. + * This is a wrapper for purple_debug(), and uses PURPLE_DEBUG_INFO as + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug_info(const char *category, const char *format, ...) G_GNUC_PRINTF(2, 3); + * Outputs warning level debug information. + * This is a wrapper for purple_debug(), and uses PURPLE_DEBUG_WARNING as + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug_warning(const char *category, const char *format, ...) G_GNUC_PRINTF(2, 3); + * Outputs error level debug information. + * This is a wrapper for purple_debug(), and uses PURPLE_DEBUG_ERROR as + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug_error(const char *category, const char *format, ...) G_GNUC_PRINTF(2, 3); + * Outputs fatal error level debug information. + * This is a wrapper for purple_debug(), and uses PURPLE_DEBUG_ERROR as + * @param category The category (or @c NULL). + * @param format The format string. +void purple_debug_fatal(const char *category, const char *format, ...) G_GNUC_PRINTF(2, 3); + * Enable or disable printing debug output to the console. + * @param enabled TRUE to enable debug output or FALSE to disable it. +void purple_debug_set_enabled(gboolean enabled); + * Check if console debug output is enabled. + * @return TRUE if debugging is enabled, FALSE if it is not. +gboolean purple_debug_is_enabled(void); + * Enable or disable verbose debugging. This ordinarily should only be called + * by #purple_debug_init, but there are cases where this can be useful for + * @param verbose TRUE to enable verbose debugging or FALSE to disable it. +void purple_debug_set_verbose(gboolean verbose); + * Check if verbose logging is enabled. + * @return TRUE if verbose debugging is enabled, FALSE if it is not. +gboolean purple_debug_is_verbose(void); + * Enable or disable unsafe debugging. This ordinarily should only be called + * by #purple_debug_init, but there are cases where this can be useful for + * @param unsafe TRUE to enable debug logging of messages that could + * potentially contain passwords and other sensitive information. +void purple_debug_set_unsafe(gboolean unsafe); + * Check if unsafe debugging is enabled. Defaults to FALSE. + * @return TRUE if the debug logging of all messages is enabled, FALSE + * if messages that could potentially contain passwords and other + * sensitive information are not logged. +gboolean purple_debug_is_unsafe(void); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used when outputting debug + * @param ops The UI operations structure. +void purple_debug_set_ui_ops(PurpleDebugUiOps *ops); + * Returns the UI operations structure used when outputting debug + * @return The UI operations structure in use. +PurpleDebugUiOps *purple_debug_get_ui_ops(void); +/**************************************************************************/ +/** @name Debug Subsystem */ +/**************************************************************************/ + * Initializes the debug subsystem. +void purple_debug_init(void); +#endif /* _PURPLE_DEBUG_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/desktopitem.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,172 @@
+ * @file desktopitem.h Functions for managing .desktop files +/* Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * The following code has been adapted from gnome-desktop-item.[ch], + * as found on gnome-desktop-2.8.1. + * Copyright (C) 2004 by Alceste Scalas <alceste.scalas@gmx.net>. + * Original copyright notice: + * Copyright (C) 1999, 2000 Red Hat Inc. + * Copyright (C) 2001 Sid Vicious + * This file is part of the Gnome Library. + * The Gnome Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * The Gnome Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1301, USA. +#ifndef _PURPLE_DESKTOP_ITEM_H_ +#define _PURPLE_DESKTOP_ITEM_H_ +#include <glib-object.h> + PURPLE_DESKTOP_ITEM_TYPE_NULL = 0 /* This means its NULL, that is, not + PURPLE_DESKTOP_ITEM_TYPE_OTHER /* This means it's not one of the below + strings types, and you must get the + /* These are the standard compliant types: */ + PURPLE_DESKTOP_ITEM_TYPE_APPLICATION, + PURPLE_DESKTOP_ITEM_TYPE_LINK, + PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE, + PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE, + PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY, + PURPLE_DESKTOP_ITEM_TYPE_SERVICE, + PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE +} PurpleDesktopItemType; +typedef struct _PurpleDesktopItem PurpleDesktopItem; +#define PURPLE_TYPE_DESKTOP_ITEM (purple_desktop_item_get_type ()) +GType purple_desktop_item_get_type (void); +#define PURPLE_DESKTOP_ITEM_ENCODING "Encoding" /* string */ +#define PURPLE_DESKTOP_ITEM_VERSION "Version" /* numeric */ +#define PURPLE_DESKTOP_ITEM_NAME "Name" /* localestring */ +#define PURPLE_DESKTOP_ITEM_GENERIC_NAME "GenericName" /* localestring */ +#define PURPLE_DESKTOP_ITEM_TYPE "Type" /* string */ +#define PURPLE_DESKTOP_ITEM_FILE_PATTERN "FilePattern" /* regexp(s) */ +#define PURPLE_DESKTOP_ITEM_TRY_EXEC "TryExec" /* string */ +#define PURPLE_DESKTOP_ITEM_NO_DISPLAY "NoDisplay" /* boolean */ +#define PURPLE_DESKTOP_ITEM_COMMENT "Comment" /* localestring */ +#define PURPLE_DESKTOP_ITEM_EXEC "Exec" /* string */ +#define PURPLE_DESKTOP_ITEM_ACTIONS "Actions" /* strings */ +#define PURPLE_DESKTOP_ITEM_ICON "Icon" /* string */ +#define PURPLE_DESKTOP_ITEM_MINI_ICON "MiniIcon" /* string */ +#define PURPLE_DESKTOP_ITEM_HIDDEN "Hidden" /* boolean */ +#define PURPLE_DESKTOP_ITEM_PATH "Path" /* string */ +#define PURPLE_DESKTOP_ITEM_TERMINAL "Terminal" /* boolean */ +#define PURPLE_DESKTOP_ITEM_TERMINAL_OPTIONS "TerminalOptions" /* string */ +#define PURPLE_DESKTOP_ITEM_SWALLOW_TITLE "SwallowTitle" /* string */ +#define PURPLE_DESKTOP_ITEM_SWALLOW_EXEC "SwallowExec" /* string */ +#define PURPLE_DESKTOP_ITEM_MIME_TYPE "MimeType" /* regexp(s) */ +#define PURPLE_DESKTOP_ITEM_PATTERNS "Patterns" /* regexp(s) */ +#define PURPLE_DESKTOP_ITEM_DEFAULT_APP "DefaultApp" /* string */ +#define PURPLE_DESKTOP_ITEM_DEV "Dev" /* string */ +#define PURPLE_DESKTOP_ITEM_FS_TYPE "FSType" /* string */ +#define PURPLE_DESKTOP_ITEM_MOUNT_POINT "MountPoint" /* string */ +#define PURPLE_DESKTOP_ITEM_READ_ONLY "ReadOnly" /* boolean */ +#define PURPLE_DESKTOP_ITEM_UNMOUNT_ICON "UnmountIcon" /* string */ +#define PURPLE_DESKTOP_ITEM_SORT_ORDER "SortOrder" /* strings */ +#define PURPLE_DESKTOP_ITEM_URL "URL" /* string */ +#define PURPLE_DESKTOP_ITEM_DOC_PATH "X-GNOME-DocPath" /* string */ + * This function loads 'filename' and turns it into a PurpleDesktopItem. + * @param filename The filename or directory path to load the PurpleDesktopItem from + * @return The newly loaded item, or NULL on error. +PurpleDesktopItem *purple_desktop_item_new_from_file (const char *filename); + * Gets the type attribute (the 'Type' field) of the item. This should + * usually be 'Application' for an application, but it can be 'Directory' + * for a directory description. There are other types available as well. + * The type usually indicates how the desktop item should be handeled and + * how the 'Exec' field should be handeled. + * @param item A desktop item + * @return The type of the specified 'item'. The returned memory + * remains owned by the PurpleDesktopItem and should not be freed. +PurpleDesktopItemType purple_desktop_item_get_entry_type (const PurpleDesktopItem *item); + * Gets the value of an attribute of the item, as a string. + * @param item A desktop item + * @param attr The attribute to look for + * @return The value of the specified item attribute. +const char *purple_desktop_item_get_string (const PurpleDesktopItem *item, + * Creates a copy of a PurpleDesktopItem. The new copy has a refcount of 1. + * Note: Section stack is NOT copied. + * @param item The item to be copied +PurpleDesktopItem *purple_desktop_item_copy (const PurpleDesktopItem *item); + * Decreases the reference count of the specified item, and destroys + * the item if there are no more references left. + * @param item A desktop item +void purple_desktop_item_unref (PurpleDesktopItem *item); +#endif /* _PURPLE_DESKTOP_ITEM_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/directconn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,200 @@
+ * @file directconn.h MSN direct connection functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef MSN_DIRECTCONN_H +#define MSN_DIRECTCONN_H +typedef struct _MsnDirectConn MsnDirectConn; +#include "slpmsg_part.h" +#define MSN_DCCONN_MAX_SIZE 1352 + DC_STATE_CLOSED, /*< No socket opened yet */ + DC_STATE_FOO, /*< Waiting for FOO message */ + DC_STATE_HANDSHAKE, /*< Waiting for handshake message */ + DC_STATE_HANDSHAKE_REPLY, /*< Waiting for handshake reply message */ + DC_STATE_ESTABLISHED /*< Handshake complete */ +} MsnDirectConnProcessResult; + DC_NONCE_UNKNOWN, /**< Invalid scheme */ + DC_NONCE_PLAIN, /**< No hashing */ + DC_NONCE_SHA1 /**< First 16 bytes of SHA1 of nonce */ +} MsnDirectConnNonceType; +typedef struct _MsnDirectConnPacket MsnDirectConnPacket; +struct _MsnDirectConnPacket { + void (*sent_cb)(struct _MsnDirectConnPacket*); + MsnSlpMessagePart *part; + MsnDirectConnState state; /**< Direct connection status */ + MsnSlpLink *slplink; /**< The slplink using this direct connection */ + MsnSlpCall *slpcall; /**< The slpcall which initiated the direct connection */ + char *msg_body; /**< The body of message sent by send_connection_info_msg_cb */ + MsnSlpMessage *prev_ack; /**< The saved SLP ACK message */ + MsnDirectConnNonceType nonce_type; /**< The type of nonce hashing */ + guchar nonce[16]; /**< The nonce used for handshake */ + gchar nonce_hash[37]; /**< The hash of nonce */ + gchar remote_nonce[37]; /**< The remote side's nonce */ + PurpleNetworkListenData *listen_data; /**< The pending socket creation request */ + PurpleProxyConnectData *connect_data; /**< The pending connection attempt */ + int listenfd; /**< The socket we're listening for incoming connections */ + guint listenfd_handle; /**< The timeout handle for incoming connection */ + guint connect_timeout_handle; /**< The timeout handle for outgoing connection */ + int fd; /**< The direct connection socket */ + guint recv_handle; /**< The incoming data callback handle */ + guint send_handle; /**< The outgoing data callback handle */ + gchar *in_buffer; /**< The receive buffer */ + int in_size; /**< The receive buffer size */ + int in_pos; /**< The first free position in receive buffer */ + GQueue *out_queue; /**< The outgoing packet queue */ + int msg_pos; /**< The position of next byte to be sent in the actual packet */ + /** The callback used for sending information to the peer about the opened socket */ + void (*send_connection_info_msg_cb)(MsnDirectConn *); + gchar *ext_ip; /**< Our external IP address */ + int ext_port; /**< Our external port */ + /*int num_calls;*/ /**< The number of slpcalls using this direct connection */ +#define DC_OUTGOING_TIMEOUT (5) +/* Time for internal + external connection attempts */ +#define DC_INCOMING_TIMEOUT (DC_OUTGOING_TIMEOUT * 3) +/* Timeout for lack of activity */ + * Queues an MSN message to be sent via direct connection. +msn_dc_enqueue_part(MsnDirectConn *dc, MsnSlpMessagePart *part); + * Creates, initializes, and returns a new MsnDirectConn structure. +msn_dc_new(MsnSlpCall *slpcall); + * Destroys an MsnDirectConn structure. Frees every buffer allocated earlier + * restores saved callbacks, etc. +msn_dc_destroy(MsnDirectConn *dc); + * Fallback to switchboard connection. Used when neither side is able to + * create a listening socket. +msn_dc_fallback_to_sb(MsnDirectConn *dc); + * Increases the slpcall counter in DC. The direct connection remains open + * until all slpcalls using it are destroyed. +msn_dc_ref(MsnDirectConn *dc); + * Decrease the slpcall counter in DC. The direct connection remains open + * until all slpcalls using it are destroyed. +msn_dc_unref(MsnDirectConn *dc); + * Sends a direct connect INVITE message on the associated slplink + * with the corresponding connection type and information. +msn_dc_send_invite(MsnDirectConn *dc); + * Sends a direct connect OK message as a response to an INVITE received earliaer + * on the corresponding slplink. +msn_dc_send_ok(MsnDirectConn *dc); + * This callback will be called when we're successfully connected to +msn_dc_connected_to_peer_cb(gpointer data, gint fd, const gchar *error_msg); + * This callback will be called when we're unable to connect to + * the remote host in DC_CONNECT_TIMEOUT seconds. +msn_dc_outgoing_connection_timeout_cb(gpointer data); + * This callback will be called when the listening socket is successfully + * created and its parameters (IP/port) are available. +msn_dc_listen_socket_created_cb(int listenfd, gpointer data); +#endif /* MSN_DIRECTCONN_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/dnsquery.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,180 @@
+ * @file dnsquery.h DNS query API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_DNSQUERY_H_ +#define _PURPLE_DNSQUERY_H_ + * An opaque structure representing a DNS query. The hostname and port + * associated with the query can be retrieved using + * purple_dnsquery_get_host() and purple_dnsquery_get_port(). +typedef struct _PurpleDnsQueryData PurpleDnsQueryData; + * The "hosts" parameter is a linked list containing pairs of + * one size_t addrlen and one struct sockaddr *addr. It should + * be free'd by the callback function. +typedef void (*PurpleDnsQueryConnectFunction)(GSList *hosts, gpointer data, const char *error_message); + * Callbacks used by the UI if it handles resolving DNS +typedef void (*PurpleDnsQueryResolvedCallback) (PurpleDnsQueryData *query_data, GSList *hosts); +typedef void (*PurpleDnsQueryFailedCallback) (PurpleDnsQueryData *query_data, const gchar *error_message); + * DNS Request UI operations; UIs should implement this if they want to do DNS + * lookups themselves, rather than relying on the core. + /** If implemented, return TRUE if the UI takes responsibility for DNS + * queries. When returning FALSE, the standard implementation is used. */ + gboolean (*resolve_host)(PurpleDnsQueryData *query_data, + PurpleDnsQueryResolvedCallback resolved_cb, + PurpleDnsQueryFailedCallback failed_cb); + /** Called just before @a query_data is freed; this should cancel any + * further use of @a query_data the UI would make. Unneeded if + * #resolve_host is not implemented. + void (*destroy)(PurpleDnsQueryData *query_data); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/** @name DNS query API */ +/**************************************************************************/ + * Perform an asynchronous DNS query. + * @param account the account that the query is being done for (or NULL) + * @param hostname The hostname to resolve. + * @param port A port number which is stored in the struct sockaddr. + * @param callback The callback function to call after resolving. + * @param data Extra data to pass to the callback function. + * @return NULL if there was an error, otherwise return a reference to + * a data structure that can be used to cancel the pending + * DNS query, if needed. +PurpleDnsQueryData *purple_dnsquery_a_account(PurpleAccount *account, const char *hostname, int port, PurpleDnsQueryConnectFunction callback, gpointer data); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_DNSQUERY_C_) + * Perform an asynchronous DNS query. + * @param hostname The hostname to resolve. + * @param port A port number which is stored in the struct sockaddr. + * @param callback The callback function to call after resolving. + * @param data Extra data to pass to the callback function. + * @return NULL if there was an error, otherwise return a reference to + * a data structure that can be used to cancel the pending + * DNS query, if needed. + * @deprecated Use purple_dnsquery_a_account instead +PurpleDnsQueryData *purple_dnsquery_a(const char *hostname, int port, PurpleDnsQueryConnectFunction callback, gpointer data); + * Cancel a DNS query and destroy the associated data structure. + * @param query_data The DNS query to cancel. This data structure + * is freed by this function. +void purple_dnsquery_destroy(PurpleDnsQueryData *query_data); + * Sets the UI operations structure to be used when doing a DNS + * resolve. The UI operations need only be set if the UI wants to + * handle the resolve itself; otherwise, leave it as NULL. + * @param ops The UI operations structure. +void purple_dnsquery_set_ui_ops(PurpleDnsQueryUiOps *ops); + * Returns the UI operations structure to be used when doing a DNS + * @return The UI operations structure. +PurpleDnsQueryUiOps *purple_dnsquery_get_ui_ops(void); + * Get the host associated with a PurpleDnsQueryData + * @param query_data The DNS query +char *purple_dnsquery_get_host(PurpleDnsQueryData *query_data); + * Get the port associated with a PurpleDnsQueryData + * @param query_data The DNS query +unsigned short purple_dnsquery_get_port(PurpleDnsQueryData *query_data); + * Initializes the DNS query subsystem. +void purple_dnsquery_init(void); + * Uninitializes the DNS query subsystem. +void purple_dnsquery_uninit(void); +#endif /* _PURPLE_DNSQUERY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/dnssrv.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,242 @@
+ * Copyright (C) 2005, Thomas Butter <butter@uni-mannheim.de> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_DNSSRV_H +#define _PURPLE_DNSSRV_H +typedef struct _PurpleSrvTxtQueryData PurpleSrvTxtQueryData; +typedef struct _PurpleSrvResponse PurpleSrvResponse; +typedef struct _PurpleTxtResponse PurpleTxtResponse; +/* For compatibility, should be removed for 3.0.0 +typedef struct _PurpleSrvTxtQueryData PurpleSrvQueryData; +struct _PurpleSrvResponse { +struct _PurpleTxtResponse { +typedef void (*PurpleSrvTxtQueryResolvedCallback) (PurpleSrvTxtQueryData *query_data, GList *records); +typedef void (*PurpleSrvTxtQueryFailedCallback) (PurpleSrvTxtQueryData *query_data, const gchar *error_message); + * SRV Request UI operations; UIs should implement this if they want to do SRV + * lookups themselves, rather than relying on the core. + /** If implemented, return TRUE if the UI takes responsibility for SRV + * queries. When returning FALSE, the standard implementation is used. + * These callbacks MUST be called asynchronously. */ + gboolean (*resolve)(PurpleSrvTxtQueryData *query_data, + PurpleSrvTxtQueryResolvedCallback resolved_cb, + PurpleSrvTxtQueryFailedCallback failed_cb); + /** Called just before @a query_data is freed; this should cancel any + * further use of @a query_data the UI would make. Unneeded if + * #resolve_host is not implemented. + void (*destroy)(PurpleSrvTxtQueryData *query_data); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +} PurpleSrvTxtQueryUiOps; + * @param resp An array of PurpleSrvResponse of size results. The array + * is sorted based on the order described in the DNS SRV RFC. + * Users of this API should try each record in resp in order, + * starting at the beginning. +typedef void (*PurpleSrvCallback)(PurpleSrvResponse *resp, int results, gpointer data); + * Callback that returns the data retrieved from a DNS TXT lookup. + * @param responses A GList of PurpleTxtResponse objects. + * @param data The extra data passed to purple_txt_resolve. +typedef void (*PurpleTxtCallback)(GList *responses, gpointer data); + * Queries an SRV record. + * @param account the account that the query is being done for (or NULL) + * @param protocol Name of the protocol (e.g. "sip") + * @param transport Name of the transport ("tcp" or "udp") + * @param domain Domain name to query (e.g. "blubb.com") + * @param cb A callback which will be called with the results + * @param extradata Extra data to be passed to the callback +PurpleSrvTxtQueryData *purple_srv_resolve_account(PurpleAccount *account, const char *protocol, const char *transport, const char *domain, PurpleSrvCallback cb, gpointer extradata); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_DNSSRV_C_) + * Queries an SRV record. + * @param protocol Name of the protocol (e.g. "sip") + * @param transport Name of the transport ("tcp" or "udp") + * @param domain Domain name to query (e.g. "blubb.com") + * @param cb A callback which will be called with the results + * @param extradata Extra data to be passed to the callback + * @deprecated Use purple_srv_resolve_account instead +PurpleSrvTxtQueryData *purple_srv_resolve(const char *protocol, const char *transport, const char *domain, PurpleSrvCallback cb, gpointer extradata); + * Cancel an SRV or DNS query. + * @param query_data The request to cancel. + * @deprecated Use purple_srv_txt_query_destroy instead +void purple_srv_cancel(PurpleSrvTxtQueryData *query_data); + * Queries an TXT record. + * @param account the account that the query is being done for (or NULL) + * @param owner Name of the protocol (e.g. "_xmppconnect") + * @param domain Domain name to query (e.g. "blubb.com") + * @param cb A callback which will be called with the results + * @param extradata Extra data to be passed to the callback +PurpleSrvTxtQueryData *purple_txt_resolve_account(PurpleAccount *account, const char *owner, const char *domain, PurpleTxtCallback cb, gpointer extradata); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_DNSSRV_C_) + * Queries an TXT record. + * @param owner Name of the protocol (e.g. "_xmppconnect") + * @param domain Domain name to query (e.g. "blubb.com") + * @param cb A callback which will be called with the results + * @param extradata Extra data to be passed to the callback + * @deprecated Use purple_txt_resolve_account instead +PurpleSrvTxtQueryData *purple_txt_resolve(const char *owner, const char *domain, PurpleTxtCallback cb, gpointer extradata); + * Cancel an TXT DNS query. + * @param query_data The request to cancel. + * @deprecated Use purple_srv_txt_query_destroy instead +void purple_txt_cancel(PurpleSrvTxtQueryData *query_data); + * Get the value of the current TXT record. + * @param response The TXT response record + * @returns The value of the current TXT record. +const gchar *purple_txt_response_get_content(PurpleTxtResponse *response); + * Destroy a TXT DNS response object. + * @param response The PurpleTxtResponse to destroy. +void purple_txt_response_destroy(PurpleTxtResponse *response); + * Cancel a SRV/TXT query and destroy the associated data structure. + * @param query_data The SRV/TXT query to cancel. This data structure + * is freed by this function. +void purple_srv_txt_query_destroy(PurpleSrvTxtQueryData *query_data); + * Sets the UI operations structure to be used when doing a SRV/TXT + * resolve. The UI operations need only be set if the UI wants to + * handle the resolve itself; otherwise, leave it as NULL. + * @param ops The UI operations structure. +void purple_srv_txt_query_set_ui_ops(PurpleSrvTxtQueryUiOps *ops); + * Returns the UI operations structure to be used when doing a SRV/TXT + * @return The UI operations structure. +PurpleSrvTxtQueryUiOps *purple_srv_txt_query_get_ui_ops(void); + * Get the query from a PurpleDnsQueryData + * @param query_data The SRV/TXT query +char *purple_srv_txt_query_get_query(PurpleSrvTxtQueryData *query_data); + * Get the type from a PurpleDnsQueryData (TXT or SRV) + * @param query_data The query +int purple_srv_txt_query_get_type(PurpleSrvTxtQueryData *query_data); +#endif /* _PURPLE_DNSSRV_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/error.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,57 @@
+ * @file error.h Error functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Returns the string representation of an error type. + * @param type The error type. + * @param debug Whether this should be treated as a debug log message or a user-visible error + * @return The string representation of the error type. +const char *msn_error_get_text(unsigned int type, gboolean *debug); + * @param session The current session. + * @param type The error type. +void msn_error_handle(MsnSession *session, unsigned int type); + * Show the sync issue in a dialog using request api + * @param sesion MsnSession associated to this error. + * @param passport The passport associated with the error. + * @param group_name The group in the buddy is suppoused to be +void msn_error_sync_issue(MsnSession *session, const char *passport, + const char *group_name); +#endif /* MSN_ERROR_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/eventloop.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,276 @@
+ * @file eventloop.h Purple Event Loop API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_EVENTLOOP_H_ +#define _PURPLE_EVENTLOOP_H_ + PURPLE_INPUT_READ = 1 << 0, /**< A read condition. */ + PURPLE_INPUT_WRITE = 1 << 1 /**< A write condition. */ +/** The type of callbacks to handle events on file descriptors, as passed to + * purple_input_add(). The callback will receive the @c user_data passed to + * purple_input_add(), the file descriptor on which the event occurred, and the + * condition that was satisfied to cause the callback to be invoked. +typedef void (*PurpleInputFunction)(gpointer, gint, PurpleInputCondition); +/** @copydoc _PurpleEventLoopUiOps */ +typedef struct _PurpleEventLoopUiOps PurpleEventLoopUiOps; +/** An abstraction of an application's mainloop; libpurple will use this to + * watch file descriptors and schedule timed callbacks. If your application + * uses the glib mainloop, there is an implementation of this struct in + * <tt>libpurple/example/nullclient.c</tt> which you can use verbatim. +struct _PurpleEventLoopUiOps + * Should create a callback timer with an interval measured in + * milliseconds. The supplied @a function should be called every @a + * interval seconds until it returns @c FALSE, after which it should not + * Analogous to g_timeout_add in glib. + * Note: On Win32, this function may be called from a thread other than + * the libpurple thread. You should make sure to detect this situation + * and to only call "function" from the libpurple thread. + * @param interval the interval in <em>milliseconds</em> between calls + * @param data arbitrary data to be passed to @a function at each + * @todo Who is responsible for freeing @a data? + * @return a handle for the timeout, which can be passed to + * @see purple_timeout_add + guint (*timeout_add)(guint interval, GSourceFunc function, gpointer data); + * Should remove a callback timer. Analogous to g_source_remove in glib. + * @param handle an identifier for a timeout, as returned by + * @return @c TRUE if the timeout identified by @a handle was + * @see purple_timeout_remove + gboolean (*timeout_remove)(guint handle); + * Should add an input handler. Analogous to g_io_add_watch_full in + * @param fd a file descriptor to watch for events + * @param cond a bitwise OR of events on @a fd for which @a func + * @param func a callback to fire whenever a relevant event on @a + * @param user_data arbitrary data to pass to @a fd. + * @return an identifier for this input handler, which can be + * passed to #input_remove. + * @see purple_input_add + guint (*input_add)(int fd, PurpleInputCondition cond, + PurpleInputFunction func, gpointer user_data); + * Should remove an input handler. Analogous to g_source_remove in glib. + * @param handle an identifier, as returned by #input_add. + * @return @c TRUE if the input handler was found and removed. + * @see purple_input_remove + gboolean (*input_remove)(guint handle); + * If implemented, should get the current error status for an input. + * Implementation of this UI op is optional. Implement it if the UI's + * sockets or event loop needs to customize determination of socket + * error status. If unimplemented, <tt>getsockopt(2)</tt> will be used + * @see purple_input_get_error + int (*input_get_error)(int fd, int *error); + * If implemented, should create a callback timer with an interval + * measured in seconds. Analogous to g_timeout_add_seconds in glib. + * This allows UIs to group timers for better power efficiency. For + * this reason, @a interval may be rounded by up to a second. + * Implementation of this UI op is optional. If it's not implemented, + * calls to purple_timeout_add_seconds() will be serviced by + * @see purple_timeout_add_seconds() + guint (*timeout_add_seconds)(guint interval, GSourceFunc function, + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/** @name Event Loop API */ +/**************************************************************************/ + * Creates a callback timer. + * The timer will repeat until the function returns @c FALSE. The + * first call will be at the end of the first interval. + * If the timer is in a multiple of seconds, use purple_timeout_add_seconds() + * instead as it allows UIs to group timers for power efficiency. + * @param interval The time between calls of the function, in + * @param function The function to call. + * @param data data to pass to @a function. + * @return A handle to the timer which can be passed to + * purple_timeout_remove() to remove the timer. +guint purple_timeout_add(guint interval, GSourceFunc function, gpointer data); + * Creates a callback timer. + * The timer will repeat until the function returns @c FALSE. The + * first call will be at the end of the first interval. + * This function allows UIs to group timers for better power efficiency. For + * this reason, @a interval may be rounded by up to a second. + * @param interval The time between calls of the function, in + * @param function The function to call. + * @param data data to pass to @a function. + * @return A handle to the timer which can be passed to + * purple_timeout_remove() to remove the timer. +guint purple_timeout_add_seconds(guint interval, GSourceFunc function, gpointer data); + * Removes a timeout handler. + * @param handle The handle, as returned by purple_timeout_add(). + * @return @c TRUE if the handler was successfully removed. +gboolean purple_timeout_remove(guint handle); + * Adds an input handler. + * @param fd The input file descriptor. + * @param cond The condition type. + * @param func The callback function for data. + * @param user_data User-specified data. + * @return The resulting handle (will be greater than 0). + * @see g_io_add_watch_full +guint purple_input_add(int fd, PurpleInputCondition cond, + PurpleInputFunction func, gpointer user_data); + * Removes an input handler. + * @param handle The handle of the input handler. Note that this is the return + * value from purple_input_add(), <i>not</i> the file descriptor. +gboolean purple_input_remove(guint handle); + * Get the current error status for an input. + * The return value and error follow getsockopt() with a level of SOL_SOCKET and an + * option name of SO_ERROR, and this is how the error is determined if the UI does not + * implement the input_get_error UI op. + * @param fd The input file descriptor. + * @param error A pointer to an @c int which on return will have the error, or + * @return @c 0 if there is no error; @c -1 if there is an error, in which case + * @a errno will be set. +purple_input_get_error(int fd, int *error); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used for accounts. + * @param ops The UI operations structure. +void purple_eventloop_set_ui_ops(PurpleEventLoopUiOps *ops); + * Returns the UI operations structure used for accounts. + * @return The UI operations structure in use. +PurpleEventLoopUiOps *purple_eventloop_get_ui_ops(void); +#endif /* _PURPLE_EVENTLOOP_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/ft.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,785 @@
+ * @file ft.h File Transfer API + * @see @ref xfer-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/**************************************************************************/ +/**************************************************************************/ +typedef struct _PurpleXfer PurpleXfer; + * Types of file transfers. + PURPLE_XFER_UNKNOWN = 0, /**< Unknown file transfer type. */ + PURPLE_XFER_SEND, /**< File sending. */ + PURPLE_XFER_RECEIVE /**< File receiving. */ + * The different states of the xfer. + PURPLE_XFER_STATUS_UNKNOWN = 0, /**< Unknown, the xfer may be null. */ + PURPLE_XFER_STATUS_NOT_STARTED, /**< It hasn't started yet. */ + PURPLE_XFER_STATUS_ACCEPTED, /**< Receive accepted, but destination file not selected yet */ + PURPLE_XFER_STATUS_STARTED, /**< purple_xfer_start has been called. */ + PURPLE_XFER_STATUS_DONE, /**< The xfer completed successfully. */ + PURPLE_XFER_STATUS_CANCEL_LOCAL, /**< The xfer was cancelled by us. */ + PURPLE_XFER_STATUS_CANCEL_REMOTE /**< The xfer was cancelled by the other end, or we couldn't connect. */ + * File transfer UI operations. + * Any UI representing a file transfer must assign a filled-out + * PurpleXferUiOps structure to the purple_xfer. + void (*new_xfer)(PurpleXfer *xfer); + void (*destroy)(PurpleXfer *xfer); + void (*add_xfer)(PurpleXfer *xfer); + void (*update_progress)(PurpleXfer *xfer, double percent); + void (*cancel_local)(PurpleXfer *xfer); + void (*cancel_remote)(PurpleXfer *xfer); + * UI op to write data received from the prpl. The UI must deal with the + * entire buffer and return size, or it is treated as an error. + * @param xfer The file transfer structure + * @param buffer The buffer to write + * @param size The size of the buffer + * @return size if the write was successful, or a value between 0 and + gssize (*ui_write)(PurpleXfer *xfer, const guchar *buffer, gssize size); + * UI op to read data to send to the prpl for a file transfer. + * @param xfer The file transfer structure + * @param buffer A pointer to a buffer. The UI must allocate this buffer. + * libpurple will free the data. + * @param size The maximum amount of data to put in the buffer. + * @returns The amount of data in the buffer, 0 if nothing is available, + * and a negative value if an error occurred and the transfer + * should be cancelled (libpurple will cancel). + gssize (*ui_read)(PurpleXfer *xfer, guchar **buffer, gssize size); + * Op to notify the UI that not all the data read in was written. The UI + * should re-enqueue this data and return it the next time read is called. + * This MUST be implemented if read and write are implemented. + * @param xfer The file transfer structure + * @param buffer A pointer to the beginning of the unwritten data. + * @param size The amount of unwritten data. + void (*data_not_sent)(PurpleXfer *xfer, const guchar *buffer, gsize size); + * Op to create a thumbnail image for a file transfer + * @param xfer The file transfer structure + void (*add_thumbnail)(PurpleXfer *xfer, const gchar *formats); + * A core representation of a file transfer. + guint ref; /**< The reference count. */ + PurpleXferType type; /**< The type of transfer. */ + PurpleAccount *account; /**< The account. */ + char *who; /**< The person on the other end of the + char *message; /**< A message sent with the request */ + char *filename; /**< The name sent over the network. */ + char *local_filename; /**< The name on the local hard drive. */ + size_t size; /**< The size of the file. */ + FILE *dest_fp; /**< The destination file pointer. */ + char *remote_ip; /**< The remote IP address. */ + int local_port; /**< The local port. */ + int remote_port; /**< The remote port. */ + int fd; /**< The socket file descriptor. */ + int watcher; /**< Watcher. */ + size_t bytes_sent; /**< The number of bytes sent. */ + size_t bytes_remaining; /**< The number of bytes remaining. */ + time_t start_time; /**< When the transfer of data began. */ + time_t end_time; /**< When the transfer of data ended. */ + size_t current_buffer_size; /**< This gradually increases for fast + network connections. */ + PurpleXferStatusType status; /**< File Transfer's status. */ + /** I/O operations, which should be set by the prpl using + * purple_xfer_set_init_fnc() and friends. Setting #init is + * mandatory; all others are optional. + void (*init)(PurpleXfer *xfer); + void (*request_denied)(PurpleXfer *xfer); + void (*start)(PurpleXfer *xfer); + void (*end)(PurpleXfer *xfer); + void (*cancel_send)(PurpleXfer *xfer); + void (*cancel_recv)(PurpleXfer *xfer); + gssize (*read)(guchar **buffer, PurpleXfer *xfer); + gssize (*write)(const guchar *buffer, size_t size, PurpleXfer *xfer); + void (*ack)(PurpleXfer *xfer, const guchar *buffer, size_t size); + PurpleXferUiOps *ui_ops; /**< UI-specific operations. */ + void *ui_data; /**< UI-specific data. */ + void *data; /**< prpl-specific data. */ +/**************************************************************************/ +/** @name File Transfer API */ +/**************************************************************************/ + * Creates a new file transfer handle. + * This is called by prpls. + * The handle starts with a ref count of 1, and this reference + * is owned by the core. The prpl normally does not need to + * purple_xfer_ref or unref. + * @param account The account sending or receiving the file. + * @param type The type of file transfer. + * @param who The name of the remote user. + * @return A file transfer handle. +PurpleXfer *purple_xfer_new(PurpleAccount *account, + PurpleXferType type, const char *who); + * @return all current xfers with refs +GList *purple_xfers_get_all(void); + * Increases the reference count on a PurpleXfer. + * Please call purple_xfer_unref later. + * @param xfer A file transfer handle. +void purple_xfer_ref(PurpleXfer *xfer); + * Decreases the reference count on a PurpleXfer. + * If the reference reaches 0, purple_xfer_destroy (an internal function) + * will destroy the xfer. It calls the ui destroy cb first. + * Since the core keeps a ref on the xfer, only an erroneous call to + * this function will destroy the xfer while still in use. + * @param xfer A file transfer handle. +void purple_xfer_unref(PurpleXfer *xfer); + * Requests confirmation for a file transfer from the user. If receiving + * a file which is known at this point, this requests user to accept and + * save the file. If the filename is unknown (not set) this only requests user + * to accept the file transfer. In this case protocol must call this function + * again once the filename is available. + * @param xfer The file transfer to request confirmation on. +void purple_xfer_request(PurpleXfer *xfer); + * Called if the user accepts the file transfer request. + * @param xfer The file transfer. + * @param filename The filename. +void purple_xfer_request_accepted(PurpleXfer *xfer, const char *filename); + * Called if the user rejects the file transfer request. + * @param xfer The file transfer. +void purple_xfer_request_denied(PurpleXfer *xfer); + * Returns the type of file transfer. + * @param xfer The file transfer. + * @return The type of the file transfer. +PurpleXferType purple_xfer_get_type(const PurpleXfer *xfer); + * Returns the account the file transfer is using. + * @param xfer The file transfer. +PurpleAccount *purple_xfer_get_account(const PurpleXfer *xfer); + * Returns the name of the remote user. + * @param xfer The file transfer. + * @return The name of the remote user. +const char *purple_xfer_get_remote_user(const PurpleXfer *xfer); + * Returns the status of the xfer. + * @param xfer The file transfer. +PurpleXferStatusType purple_xfer_get_status(const PurpleXfer *xfer); + * Returns true if the file transfer was cancelled. + * @param xfer The file transfer. + * @return Whether or not the transfer was cancelled. + * FIXME: This should be renamed using cancelled for 3.0.0. +gboolean purple_xfer_is_canceled(const PurpleXfer *xfer); + * Returns the completed state for a file transfer. + * @param xfer The file transfer. + * @return The completed state. +gboolean purple_xfer_is_completed(const PurpleXfer *xfer); + * Returns the name of the file being sent or received. + * @param xfer The file transfer. + * @return The filename. +const char *purple_xfer_get_filename(const PurpleXfer *xfer); + * Returns the file's destination filename, + * @param xfer The file transfer. + * @return The destination filename. +const char *purple_xfer_get_local_filename(const PurpleXfer *xfer); + * Returns the number of bytes sent (or received) so far. + * @param xfer The file transfer. + * @return The number of bytes sent. +size_t purple_xfer_get_bytes_sent(const PurpleXfer *xfer); + * Returns the number of bytes remaining to send or receive. + * @param xfer The file transfer. + * @return The number of bytes remaining. +size_t purple_xfer_get_bytes_remaining(const PurpleXfer *xfer); + * Returns the size of the file being sent or received. + * @param xfer The file transfer. + * @return The total size of the file. +size_t purple_xfer_get_size(const PurpleXfer *xfer); + * Returns the current percentage of progress of the transfer. + * This is a number between 0 (0%) and 1 (100%). + * @param xfer The file transfer. + * @return The percentage complete. +double purple_xfer_get_progress(const PurpleXfer *xfer); + * Returns the local port number in the file transfer. + * @param xfer The file transfer. + * @return The port number on this end. +unsigned int purple_xfer_get_local_port(const PurpleXfer *xfer); + * Returns the remote IP address in the file transfer. + * @param xfer The file transfer. + * @return The IP address on the other end. +const char *purple_xfer_get_remote_ip(const PurpleXfer *xfer); + * Returns the remote port number in the file transfer. + * @param xfer The file transfer. + * @return The port number on the other end. +unsigned int purple_xfer_get_remote_port(const PurpleXfer *xfer); + * Returns the time the transfer of a file started. + * @param xfer The file transfer. + * @return The time when the transfer started. +time_t purple_xfer_get_start_time(const PurpleXfer *xfer); + * Returns the time the transfer of a file ended. + * @param xfer The file transfer. + * @return The time when the transfer ended. +time_t purple_xfer_get_end_time(const PurpleXfer *xfer); + * Sets the completed state for the file transfer. + * @param xfer The file transfer. + * @param completed The completed state. +void purple_xfer_set_completed(PurpleXfer *xfer, gboolean completed); + * Sets the filename for the file transfer. + * @param xfer The file transfer. + * @param message The message. +void purple_xfer_set_message(PurpleXfer *xfer, const char *message); + * Sets the filename for the file transfer. + * @param xfer The file transfer. + * @param filename The filename. +void purple_xfer_set_filename(PurpleXfer *xfer, const char *filename); + * Sets the local filename for the file transfer. + * @param xfer The file transfer. + * @param filename The filename +void purple_xfer_set_local_filename(PurpleXfer *xfer, const char *filename); + * Sets the size of the file in a file transfer. + * @param xfer The file transfer. + * @param size The size of the file. +void purple_xfer_set_size(PurpleXfer *xfer, size_t size); + * Sets the current working position in the active file transfer. This + * can be used to jump backward in the file if the protocol detects + * that some bit of data needs to be resent or has been sent twice. + * It's used for pausing and resuming an oscar file transfer. + * @param xfer The file transfer. + * @param bytes_sent The new current position in the file. If we're + * sending a file then this is the byte that we will + * send. If we're receiving a file, this is the + * next byte that we expect to receive. +void purple_xfer_set_bytes_sent(PurpleXfer *xfer, size_t bytes_sent); + * Returns the UI operations structure for a file transfer. + * @param xfer The file transfer. + * @return The UI operations structure. +PurpleXferUiOps *purple_xfer_get_ui_ops(const PurpleXfer *xfer); + * Sets the read function for the file transfer. + * @param xfer The file transfer. + * @param fnc The read function. +void purple_xfer_set_read_fnc(PurpleXfer *xfer, + gssize (*fnc)(guchar **, PurpleXfer *)); + * Sets the write function for the file transfer. + * @param xfer The file transfer. + * @param fnc The write function. +void purple_xfer_set_write_fnc(PurpleXfer *xfer, + gssize (*fnc)(const guchar *, size_t, PurpleXfer *)); + * Sets the acknowledge function for the file transfer. + * @param xfer The file transfer. + * @param fnc The acknowledge function. +void purple_xfer_set_ack_fnc(PurpleXfer *xfer, + void (*fnc)(PurpleXfer *, const guchar *, size_t)); + * Sets the function to be called if the request is denied. + * @param xfer The file transfer. + * @param fnc The request denied prpl callback. +void purple_xfer_set_request_denied_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Sets the transfer initialization function for the file transfer. + * This function is required, and must call purple_xfer_start() with + * the necessary parameters. This will be called if the file transfer + * is accepted by the user. + * @param xfer The file transfer. + * @param fnc The transfer initialization function. +void purple_xfer_set_init_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Sets the start transfer function for the file transfer. + * @param xfer The file transfer. + * @param fnc The start transfer function. +void purple_xfer_set_start_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Sets the end transfer function for the file transfer. + * @param xfer The file transfer. + * @param fnc The end transfer function. +void purple_xfer_set_end_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Sets the cancel send function for the file transfer. + * @param xfer The file transfer. + * @param fnc The cancel send function. +void purple_xfer_set_cancel_send_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Sets the cancel receive function for the file transfer. + * @param xfer The file transfer. + * @param fnc The cancel receive function. +void purple_xfer_set_cancel_recv_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *)); + * Reads in data from a file transfer stream. + * @param xfer The file transfer. + * @param buffer The buffer that will be created to contain the data. + * @return The number of bytes read, or -1. +gssize purple_xfer_read(PurpleXfer *xfer, guchar **buffer); + * Writes data to a file transfer stream. + * @param xfer The file transfer. + * @param buffer The buffer to read the data from. + * @param size The number of bytes to write. + * @return The number of bytes written, or -1. +gssize purple_xfer_write(PurpleXfer *xfer, const guchar *buffer, gsize size); + * Starts a file transfer. + * Either @a fd must be specified <i>or</i> @a ip and @a port on a + * file receive transfer. On send, @a fd must be specified, and + * @a ip and @a port are ignored. + * Prior to libpurple 2.6.0, passing '0' to @a fd was special-cased to + * allow the protocol plugin to facilitate the file transfer itself. As of + * 2.6.0, this is supported (for backward compatibility), but will be + * removed in libpurple 3.0.0. If a prpl detects that the running libpurple + * is running 2.6.0 or higher, it should use the invalid fd '-1'. + * @param xfer The file transfer. + * @param fd The file descriptor for the socket. + * @param ip The IP address to connect to. + * @param port The port to connect to. +void purple_xfer_start(PurpleXfer *xfer, int fd, const char *ip, + * Ends a file transfer. + * @param xfer The file transfer. +void purple_xfer_end(PurpleXfer *xfer); + * Adds a new file transfer to the list of file transfers. Call this only + * if you are not using purple_xfer_start. + * @param xfer The file transfer. +void purple_xfer_add(PurpleXfer *xfer); + * Cancels a file transfer on the local end. + * @param xfer The file transfer. +void purple_xfer_cancel_local(PurpleXfer *xfer); + * Cancels a file transfer from the remote end. + * @param xfer The file transfer. +void purple_xfer_cancel_remote(PurpleXfer *xfer); + * Displays a file transfer-related error message. + * This is a wrapper around purple_notify_error(), which automatically + * specifies a title ("File transfer to <i>user</i> failed" or + * "File Transfer from <i>user</i> failed"). + * @param type The type of file transfer. + * @param account The account sending or receiving the file. + * @param who The user on the other end of the transfer. + * @param msg The message to display. +void purple_xfer_error(PurpleXferType type, PurpleAccount *account, const char *who, const char *msg); + * Updates file transfer progress. + * @param xfer The file transfer. +void purple_xfer_update_progress(PurpleXfer *xfer); + * Displays a file transfer-related message in the conversation window + * This is a wrapper around purple_conversation_write + * @param xfer The file transfer to which this message relates. + * @param message The message to display. + * @param is_error Is this an error message?. +void purple_xfer_conversation_write(PurpleXfer *xfer, char *message, gboolean is_error); + * Allows the UI to signal it's ready to send/receive data (depending on + * the direction of the file transfer. Used when the UI is providing + * read/write/data_not_sent UI ops. + * @param xfer The file transfer which is ready. +void purple_xfer_ui_ready(PurpleXfer *xfer); + * Allows the prpl to signal it's ready to send/receive data (depending on + * the direction of the file transfer. Used when the prpl provides read/write + * ops and cannot/does not provide a raw fd to the core. + * @param xfer The file transfer which is ready. +void purple_xfer_prpl_ready(PurpleXfer *xfer); + * Gets the thumbnail data for a transfer + * @param xfer The file transfer to get the thumbnail for + * @param len If not @c NULL, the length of the thumbnail data returned + * will be set in the location pointed to by this. + * @return The thumbnail data, or NULL if there is no thumbnail +gconstpointer purple_xfer_get_thumbnail(const PurpleXfer *xfer, gsize *len); + * Gets the mimetype of the thumbnail preview for a transfer + * @param xfer The file transfer to get the mimetype for + * @return The mimetype of the thumbnail, or @c NULL if not thumbnail is set +const gchar *purple_xfer_get_thumbnail_mimetype(const PurpleXfer *xfer); + * Sets the thumbnail data for a transfer + * @param xfer The file transfer to set the data for + * @param thumbnail A pointer to the thumbnail data, this will be copied + * @param size The size in bytes of the passed in thumbnail data + * @param mimetype The mimetype of the generated thumbnail +void purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail, + gsize size, const gchar *mimetype); + * Prepare a thumbnail for a transfer (if the UI supports it) + * will be no-op in case the UI doesn't implement thumbnail creation + * @param xfer The file transfer to create a thumbnail for + * @param formats A comma-separated list of mimetypes for image formats + * the protocols can use for thumbnails. +void purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Returns the handle to the file transfer subsystem +void *purple_xfers_get_handle(void); + * Initializes the file transfer subsystem +void purple_xfers_init(void); + * Uninitializes the file transfer subsystem +void purple_xfers_uninit(void); + * Sets the UI operations structure to be used in all purple file transfers. + * @param ops The UI operations structure. +void purple_xfers_set_ui_ops(PurpleXferUiOps *ops); + * Returns the UI operations structure to be used in all purple file transfers. + * @return The UI operations structure. +PurpleXferUiOps *purple_xfers_get_ui_ops(void); +#endif /* _PURPLE_FT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/gaim-compat.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,2317 @@
+ * @file gaim-compat.h Gaim Compat macros + * Pidgin is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define GaimAccountUiOps PurpleAccountUiOps +#define GaimAccount PurpleAccount +#define GaimFilterAccountFunc PurpleFilterAccountFunc +#define GaimAccountRequestAuthorizationCb PurpleAccountRequestAuthorizationCb +#define gaim_account_new purple_account_new +#define gaim_account_destroy purple_account_destroy +#define gaim_account_connect purple_account_connect +#define gaim_account_register purple_account_register +#define gaim_account_disconnect purple_account_disconnect +#define gaim_account_notify_added purple_account_notify_added +#define gaim_account_request_add purple_account_request_add +#define gaim_account_request_close purple_account_request_close +#define gaim_account_request_authorization purple_account_request_authorization +#define gaim_account_request_change_password purple_account_request_change_password +#define gaim_account_request_change_user_info purple_account_request_change_user_info +#define gaim_account_set_username purple_account_set_username +#define gaim_account_set_password purple_account_set_password +#define gaim_account_set_alias purple_account_set_alias +#define gaim_account_set_user_info purple_account_set_user_info +#define gaim_account_set_buddy_icon_path purple_account_set_buddy_icon_path +#define gaim_account_set_protocol_id purple_account_set_protocol_id +#define gaim_account_set_connection purple_account_set_connection +#define gaim_account_set_remember_password purple_account_set_remember_password +#define gaim_account_set_check_mail purple_account_set_check_mail +#define gaim_account_set_enabled purple_account_set_enabled +#define gaim_account_set_proxy_info purple_account_set_proxy_info +#define gaim_account_set_status_types purple_account_set_status_types +#define gaim_account_set_status purple_account_set_status +#define gaim_account_set_status_list purple_account_set_status_list +#define gaim_account_clear_settings purple_account_clear_settings +#define gaim_account_set_int purple_account_set_int +#define gaim_account_set_string purple_account_set_string +#define gaim_account_set_bool purple_account_set_bool +#define gaim_account_set_ui_int purple_account_set_ui_int +#define gaim_account_set_ui_string purple_account_set_ui_string +#define gaim_account_set_ui_bool purple_account_set_ui_bool +#define gaim_account_is_connected purple_account_is_connected +#define gaim_account_is_connecting purple_account_is_connecting +#define gaim_account_is_disconnected purple_account_is_disconnected +#define gaim_account_get_username purple_account_get_username +#define gaim_account_get_password purple_account_get_password +#define gaim_account_get_alias purple_account_get_alias +#define gaim_account_get_user_info purple_account_get_user_info +#define gaim_account_get_buddy_icon_path purple_account_get_buddy_icon_path +#define gaim_account_get_protocol_id purple_account_get_protocol_id +#define gaim_account_get_protocol_name purple_account_get_protocol_name +#define gaim_account_get_connection purple_account_get_connection +#define gaim_account_get_remember_password purple_account_get_remember_password +#define gaim_account_get_check_mail purple_account_get_check_mail +#define gaim_account_get_enabled purple_account_get_enabled +#define gaim_account_get_proxy_info purple_account_get_proxy_info +#define gaim_account_get_active_status purple_account_get_active_status +#define gaim_account_get_status purple_account_get_status +#define gaim_account_get_status_type purple_account_get_status_type +#define gaim_account_get_status_type_with_primitive \ + purple_account_get_status_type_with_primitive +#define gaim_account_get_presence purple_account_get_presence +#define gaim_account_is_status_active purple_account_is_status_active +#define gaim_account_get_status_types purple_account_get_status_types +#define gaim_account_get_int purple_account_get_int +#define gaim_account_get_string purple_account_get_string +#define gaim_account_get_bool purple_account_get_bool +#define gaim_account_get_ui_int purple_account_get_ui_int +#define gaim_account_get_ui_string purple_account_get_ui_string +#define gaim_account_get_ui_bool purple_account_get_ui_bool +#define gaim_account_get_log purple_account_get_log +#define gaim_account_destroy_log purple_account_destroy_log +#define gaim_account_add_buddy purple_account_add_buddy +#define gaim_account_add_buddies purple_account_add_buddies +#define gaim_account_remove_buddy purple_account_remove_buddy +#define gaim_account_remove_buddies purple_account_remove_buddies +#define gaim_account_remove_group purple_account_remove_group +#define gaim_account_change_password purple_account_change_password +#define gaim_account_supports_offline_message purple_account_supports_offline_message +#define gaim_accounts_add purple_accounts_add +#define gaim_accounts_remove purple_accounts_remove +#define gaim_accounts_delete purple_accounts_delete +#define gaim_accounts_reorder purple_accounts_reorder +#define gaim_accounts_get_all purple_accounts_get_all +#define gaim_accounts_get_all_active purple_accounts_get_all_active +#define gaim_accounts_find purple_accounts_find +#define gaim_accounts_restore_current_statuses purple_accounts_restore_current_statuses +#define gaim_accounts_set_ui_ops purple_accounts_set_ui_ops +#define gaim_accounts_get_ui_ops purple_accounts_get_ui_ops +#define gaim_accounts_get_handle purple_accounts_get_handle +#define gaim_accounts_init purple_accounts_init +#define gaim_accounts_uninit purple_accounts_uninit +#define GaimAccountOption PurpleAccountOption +#define GaimAccountUserSplit PurpleAccountUserSplit +#define gaim_account_option_new purple_account_option_new +#define gaim_account_option_bool_new purple_account_option_bool_new +#define gaim_account_option_int_new purple_account_option_int_new +#define gaim_account_option_string_new purple_account_option_string_new +#define gaim_account_option_list_new purple_account_option_list_new +#define gaim_account_option_destroy purple_account_option_destroy +#define gaim_account_option_set_default_bool purple_account_option_set_default_bool +#define gaim_account_option_set_default_int purple_account_option_set_default_int +#define gaim_account_option_set_default_string purple_account_option_set_default_string +#define gaim_account_option_set_masked purple_account_option_set_masked +#define gaim_account_option_set_list purple_account_option_set_list +#define gaim_account_option_add_list_item purple_account_option_add_list_item +#define gaim_account_option_get_type purple_account_option_get_type +#define gaim_account_option_get_text purple_account_option_get_text +#define gaim_account_option_get_setting purple_account_option_get_setting +#define gaim_account_option_get_default_bool purple_account_option_get_default_bool +#define gaim_account_option_get_default_int purple_account_option_get_default_int +#define gaim_account_option_get_default_string purple_account_option_get_default_string +#define gaim_account_option_get_default_list_value purple_account_option_get_default_list_value +#define gaim_account_option_get_masked purple_account_option_get_masked +#define gaim_account_option_get_list purple_account_option_get_list +#define gaim_account_user_split_new purple_account_user_split_new +#define gaim_account_user_split_destroy purple_account_user_split_destroy +#define gaim_account_user_split_get_text purple_account_user_split_get_text +#define gaim_account_user_split_get_default_value purple_account_user_split_get_default_value +#define gaim_account_user_split_get_separator purple_account_user_split_get_separator +#define GaimBuddyList PurpleBuddyList +#define GaimBlistUiOps PurpleBlistUiOps +#define GaimBlistNode PurpleBlistNode +#define GaimChat PurpleChat +#define GaimGroup PurpleGroup +#define GaimContact PurpleContact +#define GaimBuddy PurpleBuddy +#define GAIM_BLIST_GROUP_NODE PURPLE_BLIST_GROUP_NODE +#define GAIM_BLIST_CONTACT_NODE PURPLE_BLIST_CONTACT_NODE +#define GAIM_BLIST_BUDDY_NODE PURPLE_BLIST_BUDDY_NODE +#define GAIM_BLIST_CHAT_NODE PURPLE_BLIST_CHAT_NODE +#define GAIM_BLIST_OTHER_NODE PURPLE_BLIST_OTHER_NODE +#define GaimBlistNodeType PurpleBlistNodeType +#define GAIM_BLIST_NODE_IS_CHAT PURPLE_BLIST_NODE_IS_CHAT +#define GAIM_BLIST_NODE_IS_BUDDY PURPLE_BLIST_NODE_IS_BUDDY +#define GAIM_BLIST_NODE_IS_CONTACT PURPLE_BLIST_NODE_IS_CONTACT +#define GAIM_BLIST_NODE_IS_GROUP PURPLE_BLIST_NODE_IS_GROUP +#define GAIM_BUDDY_IS_ONLINE PURPLE_BUDDY_IS_ONLINE +#define GAIM_BLIST_NODE_FLAG_NO_SAVE PURPLE_BLIST_NODE_FLAG_NO_SAVE +#define GaimBlistNodeFlags PurpleBlistNodeFlags +#define GAIM_BLIST_NODE_HAS_FLAG PURPLE_BLIST_NODE_HAS_FLAG +#define GAIM_BLIST_NODE_SHOULD_SAVE PURPLE_BLIST_NODE_SHOULD_SAVE +#define GAIM_BLIST_NODE_NAME PURPLE_BLIST_NODE_NAME +#define gaim_blist_new purple_blist_new +#define gaim_set_blist purple_set_blist +#define gaim_get_blist purple_get_blist +#define gaim_blist_get_root purple_blist_get_root +#define gaim_blist_node_next purple_blist_node_next +#define gaim_blist_show purple_blist_show +#define gaim_blist_destroy purple_blist_destroy +#define gaim_blist_set_visible purple_blist_set_visible +#define gaim_blist_update_buddy_status purple_blist_update_buddy_status +#define gaim_blist_update_buddy_icon purple_blist_update_buddy_icon +#define gaim_blist_alias_contact purple_blist_alias_contact +#define gaim_blist_alias_buddy purple_blist_alias_buddy +#define gaim_blist_server_alias_buddy purple_blist_server_alias_buddy +#define gaim_blist_alias_chat purple_blist_alias_chat +#define gaim_blist_rename_buddy purple_blist_rename_buddy +#define gaim_blist_rename_group purple_blist_rename_group +#define gaim_chat_new purple_chat_new +#define gaim_blist_add_chat purple_blist_add_chat +#define gaim_buddy_new purple_buddy_new +#define gaim_buddy_set_icon purple_buddy_set_icon +#define gaim_buddy_get_account purple_buddy_get_account +#define gaim_buddy_get_name purple_buddy_get_name +#define gaim_buddy_get_icon purple_buddy_get_icon +#define gaim_buddy_get_contact purple_buddy_get_contact +#define gaim_buddy_get_presence purple_buddy_get_presence +#define gaim_blist_add_buddy purple_blist_add_buddy +#define gaim_group_new purple_group_new +#define gaim_blist_add_group purple_blist_add_group +#define gaim_contact_new purple_contact_new +#define gaim_blist_add_contact purple_blist_add_contact +#define gaim_blist_merge_contact purple_blist_merge_contact +#define gaim_contact_get_priority_buddy purple_contact_get_priority_buddy +#define gaim_contact_set_alias purple_contact_set_alias +#define gaim_contact_get_alias purple_contact_get_alias +#define gaim_contact_on_account purple_contact_on_account +#define gaim_contact_invalidate_priority_buddy purple_contact_invalidate_priority_buddy +#define gaim_blist_remove_buddy purple_blist_remove_buddy +#define gaim_blist_remove_contact purple_blist_remove_contact +#define gaim_blist_remove_chat purple_blist_remove_chat +#define gaim_blist_remove_group purple_blist_remove_group +#define gaim_buddy_get_alias_only purple_buddy_get_alias_only +#define gaim_buddy_get_server_alias purple_buddy_get_server_alias +#define gaim_buddy_get_contact_alias purple_buddy_get_contact_alias +#define gaim_buddy_get_local_alias purple_buddy_get_local_alias +#define gaim_buddy_get_alias purple_buddy_get_alias +#define gaim_chat_get_name purple_chat_get_name +#define gaim_find_buddy purple_find_buddy +#define gaim_find_buddy_in_group purple_find_buddy_in_group +#define gaim_find_buddies purple_find_buddies +#define gaim_find_group purple_find_group +#define gaim_blist_find_chat purple_blist_find_chat +#define gaim_chat_get_group purple_chat_get_group +#define gaim_buddy_get_group purple_buddy_get_group +#define gaim_group_get_accounts purple_group_get_accounts +#define gaim_group_on_account purple_group_on_account +#define gaim_blist_add_account purple_blist_add_account +#define gaim_blist_remove_account purple_blist_remove_account +#define gaim_blist_get_group_size purple_blist_get_group_size +#define gaim_blist_get_group_online_count purple_blist_get_group_online_count +#define gaim_blist_load purple_blist_load +#define gaim_blist_schedule_save purple_blist_schedule_save +#define gaim_blist_request_add_buddy purple_blist_request_add_buddy +#define gaim_blist_request_add_chat purple_blist_request_add_chat +#define gaim_blist_request_add_group purple_blist_request_add_group +#define gaim_blist_node_set_bool purple_blist_node_set_bool +#define gaim_blist_node_get_bool purple_blist_node_get_bool +#define gaim_blist_node_set_int purple_blist_node_set_int +#define gaim_blist_node_get_int purple_blist_node_get_int +#define gaim_blist_node_set_string purple_blist_node_set_string +#define gaim_blist_node_get_string purple_blist_node_get_string +#define gaim_blist_node_remove_setting purple_blist_node_remove_setting +#define gaim_blist_node_set_flags purple_blist_node_set_flags +#define gaim_blist_node_get_flags purple_blist_node_get_flags +#define gaim_blist_node_get_extended_menu purple_blist_node_get_extended_menu +#define gaim_blist_set_ui_ops purple_blist_set_ui_ops +#define gaim_blist_get_ui_ops purple_blist_get_ui_ops +#define gaim_blist_get_handle purple_blist_get_handle +#define gaim_blist_init purple_blist_init +#define gaim_blist_uninit purple_blist_uninit +#define GaimBuddyIcon PurpleBuddyIcon +#define gaim_buddy_icon_new(account, username, icon_data, icon_len)\ + purple_buddy_icon_new(account, username, g_memdup(icon_data, icon_len), icon_len) +#define gaim_buddy_icon_ref purple_buddy_icon_ref +#define gaim_buddy_icon_unref purple_buddy_icon_unref +#define gaim_buddy_icon_update purple_buddy_icon_update +#define gaim_buddy_icon_set_data(icon, data, len) \ + purple_buddy_icon_set_data(icon, g_memdup(data, len), len, NULL); +#define gaim_buddy_icon_get_account purple_buddy_icon_get_account +#define gaim_buddy_icon_get_username purple_buddy_icon_get_username +#define gaim_buddy_icon_get_data purple_buddy_icon_get_data +#define gaim_buddy_icon_get_type purple_buddy_icon_get_extension +#define gaim_buddy_icons_set_for_user(icon, data, len) \ + purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len, NULL) +#define gaim_buddy_icons_set_caching purple_buddy_icons_set_caching +#define gaim_buddy_icons_is_caching purple_buddy_icons_is_caching +#define gaim_buddy_icons_set_cache_dir purple_buddy_icons_set_cache_dir +#define gaim_buddy_icons_get_cache_dir purple_buddy_icons_get_cache_dir +#define gaim_buddy_icons_get_handle purple_buddy_icons_get_handle +#define gaim_buddy_icons_init purple_buddy_icons_init +#define gaim_buddy_icons_uninit purple_buddy_icons_uninit +#define gaim_buddy_icon_get_scale_size purple_buddy_icon_get_scale_size +#define GAIM_CIPHER PURPLE_CIPHER +#define GAIM_CIPHER_OPS PURPLE_CIPHER_OPS +#define GAIM_CIPHER_CONTEXT PURPLE_CIPHER_CONTEXT +#define GaimCipher PurpleCipher +#define GaimCipherOps PurpleCipherOps +#define GaimCipherContext PurpleCipherContext +#define GAIM_CIPHER_CAPS_SET_OPT PURPLE_CIPHER_CAPS_SET_OPT +#define GAIM_CIPHER_CAPS_GET_OPT PURPLE_CIPHER_CAPS_GET_OPT +#define GAIM_CIPHER_CAPS_INIT PURPLE_CIPHER_CAPS_INIT +#define GAIM_CIPHER_CAPS_RESET PURPLE_CIPHER_CAPS_RESET +#define GAIM_CIPHER_CAPS_UNINIT PURPLE_CIPHER_CAPS_UNINIT +#define GAIM_CIPHER_CAPS_SET_IV PURPLE_CIPHER_CAPS_SET_IV +#define GAIM_CIPHER_CAPS_APPEND PURPLE_CIPHER_CAPS_APPEND +#define GAIM_CIPHER_CAPS_DIGEST PURPLE_CIPHER_CAPS_DIGEST +#define GAIM_CIPHER_CAPS_ENCRYPT PURPLE_CIPHER_CAPS_ENCRYPT +#define GAIM_CIPHER_CAPS_DECRYPT PURPLE_CIPHER_CAPS_DECRYPT +#define GAIM_CIPHER_CAPS_SET_SALT PURPLE_CIPHER_CAPS_SET_SALT +#define GAIM_CIPHER_CAPS_GET_SALT_SIZE PURPLE_CIPHER_CAPS_GET_SALT_SIZE +#define GAIM_CIPHER_CAPS_SET_KEY PURPLE_CIPHER_CAPS_SET_KEY +#define GAIM_CIPHER_CAPS_GET_KEY_SIZE PURPLE_CIPHER_CAPS_GET_KEY_SIZE +#define GAIM_CIPHER_CAPS_UNKNOWN PURPLE_CIPHER_CAPS_UNKNOWN +#define gaim_cipher_get_name purple_cipher_get_name +#define gaim_cipher_get_capabilities purple_cipher_get_capabilities +#define gaim_cipher_digest_region purple_cipher_digest_region +#define gaim_ciphers_find_cipher purple_ciphers_find_cipher +#define gaim_ciphers_register_cipher purple_ciphers_register_cipher +#define gaim_ciphers_unregister_cipher purple_ciphers_unregister_cipher +#define gaim_ciphers_get_ciphers purple_ciphers_get_ciphers +#define gaim_ciphers_get_handle purple_ciphers_get_handle +#define gaim_ciphers_init purple_ciphers_init +#define gaim_ciphers_uninit purple_ciphers_uninit +#define gaim_cipher_context_set_option purple_cipher_context_set_option +#define gaim_cipher_context_get_option purple_cipher_context_get_option +#define gaim_cipher_context_new purple_cipher_context_new +#define gaim_cipher_context_new_by_name purple_cipher_context_new_by_name +#define gaim_cipher_context_reset purple_cipher_context_reset +#define gaim_cipher_context_destroy purple_cipher_context_destroy +#define gaim_cipher_context_set_iv purple_cipher_context_set_iv +#define gaim_cipher_context_append purple_cipher_context_append +#define gaim_cipher_context_digest purple_cipher_context_digest +#define gaim_cipher_context_digest_to_str purple_cipher_context_digest_to_str +#define gaim_cipher_context_encrypt purple_cipher_context_encrypt +#define gaim_cipher_context_decrypt purple_cipher_context_decrypt +#define gaim_cipher_context_set_salt purple_cipher_context_set_salt +#define gaim_cipher_context_get_salt_size purple_cipher_context_get_salt_size +#define gaim_cipher_context_set_key purple_cipher_context_set_key +#define gaim_cipher_context_get_key_size purple_cipher_context_get_key_size +#define gaim_cipher_context_set_data purple_cipher_context_set_data +#define gaim_cipher_context_get_data purple_cipher_context_get_data +#define gaim_cipher_http_digest_calculate_session_key \ + purple_cipher_http_digest_calculate_session_key +#define gaim_cipher_http_digest_calculate_response \ + purple_cipher_http_digest_calculate_response +#define GaimCircBuffer PurpleCircBuffer +#define gaim_circ_buffer_new purple_circ_buffer_new +#define gaim_circ_buffer_destroy purple_circ_buffer_destroy +#define gaim_circ_buffer_append purple_circ_buffer_append +#define gaim_circ_buffer_get_max_read purple_circ_buffer_get_max_read +#define gaim_circ_buffer_mark_read purple_circ_buffer_mark_read +#define GaimCmdPriority PurpleCmdPriority +#define GaimCmdFlag PurpleCmdFlag +#define GaimCmdStatus PurpleCmdStatus +#define GaimCmdRet PurpleCmdRet +#define GAIM_CMD_STATUS_OK PURPLE_CMD_STATUS_OK +#define GAIM_CMD_STATUS_FAILED PURPLE_CMD_STATUS_FAILED +#define GAIM_CMD_STATUS_NOT_FOUND PURPLE_CMD_STATUS_NOT_FOUND +#define GAIM_CMD_STATUS_WRONG_ARGS PURPLE_CMD_STATUS_WRONG_ARGS +#define GAIM_CMD_STATUS_WRONG_PRPL PURPLE_CMD_STATUS_WRONG_PRPL +#define GAIM_CMD_STATUS_WRONG_TYPE PURPLE_CMD_STATUS_WRONG_TYPE +#define GAIM_CMD_FUNC PURPLE_CMD_FUNC +#define GAIM_CMD_RET_OK PURPLE_CMD_RET_OK +#define GAIM_CMD_RET_FAILED PURPLE_CMD_RET_FAILED +#define GAIM_CMD_RET_CONTINUE PURPLE_CMD_RET_CONTINUE +#define GAIM_CMD_P_VERY_LOW PURPLE_CMD_P_VERY_LOW +#define GAIM_CMD_P_LOW PURPLE_CMD_P_LOW +#define GAIM_CMD_P_DEFAULT PURPLE_CMD_P_DEFAULT +#define GAIM_CMD_P_PRPL PURPLE_CMD_P_PRPL +#define GAIM_CMD_P_PLUGIN PURPLE_CMD_P_PLUGIN +#define GAIM_CMD_P_ALIAS PURPLE_CMD_P_ALIAS +#define GAIM_CMD_P_HIGH PURPLE_CMD_P_HIGH +#define GAIM_CMD_P_VERY_HIGH PURPLE_CMD_P_VERY_HIGH +#define GAIM_CMD_FLAG_IM PURPLE_CMD_FLAG_IM +#define GAIM_CMD_FLAG_CHAT PURPLE_CMD_FLAG_CHAT +#define GAIM_CMD_FLAG_PRPL_ONLY PURPLE_CMD_FLAG_PRPL_ONLY +#define GAIM_CMD_FLAG_ALLOW_WRONG_ARGS PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS +#define GaimCmdFunc PurpleCmdFunc +#define GaimCmdId PurpleCmdId +#define gaim_cmd_register purple_cmd_register +#define gaim_cmd_unregister purple_cmd_unregister +#define gaim_cmd_do_command purple_cmd_do_command +#define gaim_cmd_list purple_cmd_list +#define gaim_cmd_help purple_cmd_help +#define GaimConnection PurpleConnection +#define GAIM_CONNECTION_HTML PURPLE_CONNECTION_HTML +#define GAIM_CONNECTION_NO_BGCOLOR PURPLE_CONNECTION_NO_BGCOLOR +#define GAIM_CONNECTION_AUTO_RESP PURPLE_CONNECTION_AUTO_RESP +#define GAIM_CONNECTION_FORMATTING_WBFO PURPLE_CONNECTION_FORMATTING_WBFO +#define GAIM_CONNECTION_NO_NEWLINES PURPLE_CONNECTION_NO_NEWLINES +#define GAIM_CONNECTION_NO_FONTSIZE PURPLE_CONNECTION_NO_FONTSIZE +#define GAIM_CONNECTION_NO_URLDESC PURPLE_CONNECTION_NO_URLDESC +#define GAIM_CONNECTION_NO_IMAGES PURPLE_CONNECTION_NO_IMAGES +#define GaimConnectionFlags PurpleConnectionFlags +#define GAIM_DISCONNECTED PURPLE_DISCONNECTED +#define GAIM_CONNECTED PURPLE_CONNECTED +#define GAIM_CONNECTING PURPLE_CONNECTING +#define GaimConnectionState PurpleConnectionState +#define GaimConnectionUiOps PurpleConnectionUiOps +#define gaim_connection_new purple_connection_new +#define gaim_connection_destroy purple_connection_destroy +#define gaim_connection_set_state purple_connection_set_state +#define gaim_connection_set_account purple_connection_set_account +#define gaim_connection_set_display_name purple_connection_set_display_name +#define gaim_connection_get_state purple_connection_get_state +#define GAIM_CONNECTION_IS_CONNECTED PURPLE_CONNECTION_IS_CONNECTED +#define gaim_connection_get_account purple_connection_get_account +#define gaim_connection_get_password purple_connection_get_password +#define gaim_connection_get_display_name purple_connection_get_display_name +#define gaim_connection_update_progress purple_connection_update_progress +#define gaim_connection_notice purple_connection_notice +#define gaim_connection_error purple_connection_error +#define gaim_connections_disconnect_all purple_connections_disconnect_all +#define gaim_connections_get_all purple_connections_get_all +#define gaim_connections_get_connecting purple_connections_get_connecting +#define GAIM_CONNECTION_IS_VALID PURPLE_CONNECTION_IS_VALID +#define gaim_connections_set_ui_ops purple_connections_set_ui_ops +#define gaim_connections_get_ui_ops purple_connections_get_ui_ops +#define gaim_connections_init purple_connections_init +#define gaim_connections_uninit purple_connections_uninit +#define gaim_connections_get_handle purple_connections_get_handle +/* from conversation.h */ +#define GaimConversationUiOps PurpleConversationUiOps +#define GaimConversation PurpleConversation +#define GaimConvIm PurpleConvIm +#define GaimConvChat PurpleConvChat +#define GaimConvChatBuddy PurpleConvChatBuddy +#define GAIM_CONV_TYPE_UNKNOWN PURPLE_CONV_TYPE_UNKNOWN +#define GAIM_CONV_TYPE_IM PURPLE_CONV_TYPE_IM +#define GAIM_CONV_TYPE_CHAT PURPLE_CONV_TYPE_CHAT +#define GAIM_CONV_TYPE_MISC PURPLE_CONV_TYPE_MISC +#define GAIM_CONV_TYPE_ANY PURPLE_CONV_TYPE_ANY +#define GaimConversationType PurpleConversationType +#define GAIM_CONV_UPDATE_ADD PURPLE_CONV_UPDATE_ADD +#define GAIM_CONV_UPDATE_REMOVE PURPLE_CONV_UPDATE_REMOVE +#define GAIM_CONV_UPDATE_ACCOUNT PURPLE_CONV_UPDATE_ACCOUNT +#define GAIM_CONV_UPDATE_TYPING PURPLE_CONV_UPDATE_TYPING +#define GAIM_CONV_UPDATE_UNSEEN PURPLE_CONV_UPDATE_UNSEEN +#define GAIM_CONV_UPDATE_LOGGING PURPLE_CONV_UPDATE_LOGGING +#define GAIM_CONV_UPDATE_TOPIC PURPLE_CONV_UPDATE_TOPIC +#define GAIM_CONV_ACCOUNT_ONLINE PURPLE_CONV_ACCOUNT_ONLINE +#define GAIM_CONV_ACCOUNT_OFFLINE PURPLE_CONV_ACCOUNT_OFFLINE +#define GAIM_CONV_UPDATE_AWAY PURPLE_CONV_UPDATE_AWAY +#define GAIM_CONV_UPDATE_ICON PURPLE_CONV_UPDATE_ICON +#define GAIM_CONV_UPDATE_TITLE PURPLE_CONV_UPDATE_TITLE +#define GAIM_CONV_UPDATE_CHATLEFT PURPLE_CONV_UPDATE_CHATLEFT +#define GAIM_CONV_UPDATE_FEATURES PURPLE_CONV_UPDATE_FEATURES +#define GaimConvUpdateType PurpleConvUpdateType +#define GAIM_NOT_TYPING PURPLE_NOT_TYPING +#define GAIM_TYPING PURPLE_TYPING +#define GAIM_TYPED PURPLE_TYPED +#define GaimTypingState PurpleTypingState +#define GAIM_MESSAGE_SEND PURPLE_MESSAGE_SEND +#define GAIM_MESSAGE_RECV PURPLE_MESSAGE_RECV +#define GAIM_MESSAGE_SYSTEM PURPLE_MESSAGE_SYSTEM +#define GAIM_MESSAGE_AUTO_RESP PURPLE_MESSAGE_AUTO_RESP +#define GAIM_MESSAGE_ACTIVE_ONLY PURPLE_MESSAGE_ACTIVE_ONLY +#define GAIM_MESSAGE_NICK PURPLE_MESSAGE_NICK +#define GAIM_MESSAGE_NO_LOG PURPLE_MESSAGE_NO_LOG +#define GAIM_MESSAGE_WHISPER PURPLE_MESSAGE_WHISPER +#define GAIM_MESSAGE_ERROR PURPLE_MESSAGE_ERROR +#define GAIM_MESSAGE_DELAYED PURPLE_MESSAGE_DELAYED +#define GAIM_MESSAGE_RAW PURPLE_MESSAGE_RAW +#define GAIM_MESSAGE_IMAGES PURPLE_MESSAGE_IMAGES +#define GaimMessageFlags PurpleMessageFlags +#define GAIM_CBFLAGS_NONE PURPLE_CBFLAGS_NONE +#define GAIM_CBFLAGS_VOICE PURPLE_CBFLAGS_VOICE +#define GAIM_CBFLAGS_HALFOP PURPLE_CBFLAGS_HALFOP +#define GAIM_CBFLAGS_OP PURPLE_CBFLAGS_OP +#define GAIM_CBFLAGS_FOUNDER PURPLE_CBFLAGS_FOUNDER +#define GAIM_CBFLAGS_TYPING PURPLE_CBFLAGS_TYPING +#define GaimConvChatBuddyFlags PurpleConvChatBuddyFlags +#define gaim_conversations_set_ui_ops purple_conversations_set_ui_ops +#define gaim_conversation_new purple_conversation_new +#define gaim_conversation_destroy purple_conversation_destroy +#define gaim_conversation_present purple_conversation_present +#define gaim_conversation_get_type purple_conversation_get_type +#define gaim_conversation_set_ui_ops purple_conversation_set_ui_ops +#define gaim_conversation_get_ui_ops purple_conversation_get_ui_ops +#define gaim_conversation_set_account purple_conversation_set_account +#define gaim_conversation_get_account purple_conversation_get_account +#define gaim_conversation_get_gc purple_conversation_get_gc +#define gaim_conversation_set_title purple_conversation_set_title +#define gaim_conversation_get_title purple_conversation_get_title +#define gaim_conversation_autoset_title purple_conversation_autoset_title +#define gaim_conversation_set_name purple_conversation_set_name +#define gaim_conversation_get_name purple_conversation_get_name +#define gaim_conversation_set_logging purple_conversation_set_logging +#define gaim_conversation_is_logging purple_conversation_is_logging +#define gaim_conversation_close_logs purple_conversation_close_logs +#define gaim_conversation_get_im_data purple_conversation_get_im_data +#define GAIM_CONV_IM PURPLE_CONV_IM +#define gaim_conversation_get_chat_data purple_conversation_get_chat_data +#define GAIM_CONV_CHAT PURPLE_CONV_CHAT +#define gaim_conversation_set_data purple_conversation_set_data +#define gaim_conversation_get_data purple_conversation_get_data +#define gaim_get_conversations purple_get_conversations +#define gaim_get_ims purple_get_ims +#define gaim_get_chats purple_get_chats +#define gaim_find_conversation_with_account \ + purple_find_conversation_with_account +#define gaim_conversation_write purple_conversation_write +#define gaim_conversation_set_features purple_conversation_set_features +#define gaim_conversation_get_features purple_conversation_get_features +#define gaim_conversation_has_focus purple_conversation_has_focus +#define gaim_conversation_update purple_conversation_update +#define gaim_conversation_foreach purple_conversation_foreach +#define gaim_conv_im_get_conversation purple_conv_im_get_conversation +#define gaim_conv_im_set_icon purple_conv_im_set_icon +#define gaim_conv_im_get_icon purple_conv_im_get_icon +#define gaim_conv_im_set_typing_state purple_conv_im_set_typing_state +#define gaim_conv_im_get_typing_state purple_conv_im_get_typing_state +#define gaim_conv_im_start_typing_timeout purple_conv_im_start_typing_timeout +#define gaim_conv_im_stop_typing_timeout purple_conv_im_stop_typing_timeout +#define gaim_conv_im_get_typing_timeout purple_conv_im_get_typing_timeout +#define gaim_conv_im_set_type_again purple_conv_im_set_type_again +#define gaim_conv_im_get_type_again purple_conv_im_get_type_again +#define gaim_conv_im_start_send_typed_timeout \ + purple_conv_im_start_send_typed_timeout +#define gaim_conv_im_stop_send_typed_timeout \ + purple_conv_im_stop_send_typed_timeout +#define gaim_conv_im_get_send_typed_timeout \ + purple_conv_im_get_send_typed_timeout +#define gaim_conv_present_error purple_conv_present_error +#define gaim_conv_send_confirm purple_conv_send_confirm +#define gaim_conv_im_update_typing purple_conv_im_update_typing +#define gaim_conv_im_write purple_conv_im_write +#define gaim_conv_im_send purple_conv_im_send +#define gaim_conv_im_send_with_flags purple_conv_im_send_with_flags +#define gaim_conv_custom_smiley_add purple_conv_custom_smiley_add +#define gaim_conv_custom_smiley_write purple_conv_custom_smiley_write +#define gaim_conv_custom_smiley_close purple_conv_custom_smiley_close +#define gaim_conv_chat_get_conversation purple_conv_chat_get_conversation +#define gaim_conv_chat_set_users purple_conv_chat_set_users +#define gaim_conv_chat_get_users purple_conv_chat_get_users +#define gaim_conv_chat_ignore purple_conv_chat_ignore +#define gaim_conv_chat_unignore purple_conv_chat_unignore +#define gaim_conv_chat_set_ignored purple_conv_chat_set_ignored +#define gaim_conv_chat_get_ignored purple_conv_chat_get_ignored +#define gaim_conv_chat_get_ignored_user purple_conv_chat_get_ignored_user +#define gaim_conv_chat_is_user_ignored purple_conv_chat_is_user_ignored +#define gaim_conv_chat_set_topic purple_conv_chat_set_topic +#define gaim_conv_chat_get_topic purple_conv_chat_get_topic +#define gaim_conv_chat_set_id purple_conv_chat_set_id +#define gaim_conv_chat_get_id purple_conv_chat_get_id +#define gaim_conv_chat_write purple_conv_chat_write +#define gaim_conv_chat_send purple_conv_chat_send +#define gaim_conv_chat_send_with_flags purple_conv_chat_send_with_flags +#define gaim_conv_chat_add_user purple_conv_chat_add_user +#define gaim_conv_chat_add_users purple_conv_chat_add_users +#define gaim_conv_chat_rename_user purple_conv_chat_rename_user +#define gaim_conv_chat_remove_user purple_conv_chat_remove_user +#define gaim_conv_chat_remove_users purple_conv_chat_remove_users +#define gaim_conv_chat_find_user purple_conv_chat_find_user +#define gaim_conv_chat_user_set_flags purple_conv_chat_user_set_flags +#define gaim_conv_chat_user_get_flags purple_conv_chat_user_get_flags +#define gaim_conv_chat_clear_users purple_conv_chat_clear_users +#define gaim_conv_chat_set_nick purple_conv_chat_set_nick +#define gaim_conv_chat_get_nick purple_conv_chat_get_nick +#define gaim_conv_chat_left purple_conv_chat_left +#define gaim_conv_chat_has_left purple_conv_chat_has_left +#define gaim_find_chat purple_find_chat +#define gaim_conv_chat_cb_new purple_conv_chat_cb_new +#define gaim_conv_chat_cb_find purple_conv_chat_cb_find +#define gaim_conv_chat_cb_get_name purple_conv_chat_cb_get_name +#define gaim_conv_chat_cb_destroy purple_conv_chat_cb_destroy +#define gaim_conversations_get_handle purple_conversations_get_handle +#define gaim_conversations_init purple_conversations_init +#define gaim_conversations_uninit purple_conversations_uninit +#define GaimCore PurpleCore +#define GaimCoreUiOps PurpleCoreUiOps +#define gaim_core_init purple_core_init +#define gaim_core_quit purple_core_quit +#define gaim_core_quit_cb purple_core_quit_cb +#define gaim_core_get_version purple_core_get_version +#define gaim_core_get_ui purple_core_get_ui +#define gaim_get_core purple_get_core +#define gaim_core_set_ui_ops purple_core_set_ui_ops +#define gaim_core_get_ui_ops purple_core_get_ui_ops +#define GAIM_DEBUG_ALL PURPLE_DEBUG_ALL +#define GAIM_DEBUG_MISC PURPLE_DEBUG_MISC +#define GAIM_DEBUG_INFO PURPLE_DEBUG_INFO +#define GAIM_DEBUG_WARNING PURPLE_DEBUG_WARNING +#define GAIM_DEBUG_ERROR PURPLE_DEBUG_ERROR +#define GAIM_DEBUG_FATAL PURPLE_DEBUG_FATAL +#define GaimDebugLevel PurpleDebugLevel +#define GaimDebugUiOps PurpleDebugUiOps +#define gaim_debug purple_debug +#define gaim_debug_misc purple_debug_misc +#define gaim_debug_info purple_debug_info +#define gaim_debug_warning purple_debug_warning +#define gaim_debug_error purple_debug_error +#define gaim_debug_fatal purple_debug_fatal +#define gaim_debug_set_enabled purple_debug_set_enabled +#define gaim_debug_is_enabled purple_debug_is_enabled +#define gaim_debug_set_ui_ops purple_debug_set_ui_ops +#define gaim_debug_get_ui_ops purple_debug_get_ui_ops +#define gaim_debug_init purple_debug_init +/* from desktopitem.h */ +#define GAIM_DESKTOP_ITEM_TYPE_NULL PURPLE_DESKTOP_ITEM_TYPE_NULL +#define GAIM_DESKTOP_ITEM_TYPE_OTHER PURPLE_DESKTOP_ITEM_TYPE_OTHER +#define GAIM_DESKTOP_ITEM_TYPE_APPLICATION PURPLE_DESKTOP_ITEM_TYPE_APPLICATION +#define GAIM_DESKTOP_ITEM_TYPE_LINK PURPLE_DESKTOP_ITEM_TYPE_LINK +#define GAIM_DESKTOP_ITEM_TYPE_FSDEVICE PURPLE_DESKTOP_ITEM_TYPE_FSDEVICE +#define GAIM_DESKTOP_ITEM_TYPE_MIME_TYPE PURPLE_DESKTOP_ITEM_TYPE_MIME_TYPE +#define GAIM_DESKTOP_ITEM_TYPE_DIRECTORY PURPLE_DESKTOP_ITEM_TYPE_DIRECTORY +#define GAIM_DESKTOP_ITEM_TYPE_SERVICE PURPLE_DESKTOP_ITEM_TYPE_SERVICE +#define GAIM_DESKTOP_ITEM_TYPE_SERVICE_TYPE PURPLE_DESKTOP_ITEM_TYPE_SERVICE_TYPE +#define GaimDesktopItemType PurpleDesktopItemType +#define GaimDesktopItem PurpleDesktopItem +#define GAIM_TYPE_DESKTOP_ITEM PURPLE_TYPE_DESKTOP_ITEM +#define gaim_desktop_item_get_type purple_desktop_item_get_type +/* ugh, i'm just copying these as strings, rather than pidginifying them */ +#define GAIM_DESKTOP_ITEM_ENCODING "Encoding" /* string */ +#define GAIM_DESKTOP_ITEM_VERSION "Version" /* numeric */ +#define GAIM_DESKTOP_ITEM_NAME "Name" /* localestring */ +#define GAIM_DESKTOP_ITEM_GENERIC_NAME "GenericName" /* localestring */ +#define GAIM_DESKTOP_ITEM_TYPE "Type" /* string */ +#define GAIM_DESKTOP_ITEM_FILE_PATTERN "FilePattern" /* regexp(s) */ +#define GAIM_DESKTOP_ITEM_TRY_EXEC "TryExec" /* string */ +#define GAIM_DESKTOP_ITEM_NO_DISPLAY "NoDisplay" /* boolean */ +#define GAIM_DESKTOP_ITEM_COMMENT "Comment" /* localestring */ +#define GAIM_DESKTOP_ITEM_EXEC "Exec" /* string */ +#define GAIM_DESKTOP_ITEM_ACTIONS "Actions" /* strings */ +#define GAIM_DESKTOP_ITEM_ICON "Icon" /* string */ +#define GAIM_DESKTOP_ITEM_MINI_ICON "MiniIcon" /* string */ +#define GAIM_DESKTOP_ITEM_HIDDEN "Hidden" /* boolean */ +#define GAIM_DESKTOP_ITEM_PATH "Path" /* string */ +#define GAIM_DESKTOP_ITEM_TERMINAL "Terminal" /* boolean */ +#define GAIM_DESKTOP_ITEM_TERMINAL_OPTIONS "TerminalOptions" /* string */ +#define GAIM_DESKTOP_ITEM_SWALLOW_TITLE "SwallowTitle" /* string */ +#define GAIM_DESKTOP_ITEM_SWALLOW_EXEC "SwallowExec" /* string */ +#define GAIM_DESKTOP_ITEM_MIME_TYPE "MimeType" /* regexp(s) */ +#define GAIM_DESKTOP_ITEM_PATTERNS "Patterns" /* regexp(s) */ +#define GAIM_DESKTOP_ITEM_DEFAULT_APP "DefaultApp" /* string */ +#define GAIM_DESKTOP_ITEM_DEV "Dev" /* string */ +#define GAIM_DESKTOP_ITEM_FS_TYPE "FSType" /* string */ +#define GAIM_DESKTOP_ITEM_MOUNT_POINT "MountPoint" /* string */ +#define GAIM_DESKTOP_ITEM_READ_ONLY "ReadOnly" /* boolean */ +#define GAIM_DESKTOP_ITEM_UNMOUNT_ICON "UnmountIcon" /* string */ +#define GAIM_DESKTOP_ITEM_SORT_ORDER "SortOrder" /* strings */ +#define GAIM_DESKTOP_ITEM_URL "URL" /* string */ +#define GAIM_DESKTOP_ITEM_DOC_PATH "X-GNOME-DocPath" /* string */ +#define gaim_desktop_item_new_from_file purple_desktop_item_new_from_file +#define gaim_desktop_item_get_entry_type purple_desktop_item_get_entry_type +#define gaim_desktop_item_get_string purple_desktop_item_get_string +#define gaim_desktop_item_copy purple_desktop_item_copy +#define gaim_desktop_item_unref purple_desktop_item_unref +#define GaimDnsQueryData PurpleDnsQueryData +#define GaimDnsQueryConnectFunction PurpleDnsQueryConnectFunction +#define gaim_dnsquery_a purple_dnsquery_a +#define gaim_dnsquery_destroy purple_dnsquery_destroy +#define gaim_dnsquery_init purple_dnsquery_init +#define gaim_dnsquery_uninit purple_dnsquery_uninit +#define gaim_dnsquery_set_ui_ops purple_dnsquery_set_ui_ops +#define gaim_dnsquery_get_host purple_dnsquery_get_host +#define gaim_dnsquery_get_port purple_dnsquery_get_port +#define GaimSrvResponse PurpleSrvResponse +#define GaimSrvQueryData PurpleSrvTxtQueryData +#define GaimSrvCallback PurpleSrvCallback +#define gaim_srv_resolve purple_srv_resolve +#define gaim_srv_cancel purple_srv_cancel +#define GAIM_INPUT_READ PURPLE_INPUT_READ +#define GAIM_INPUT_WRITE PURPLE_INPUT_WRITE +#define GaimInputCondition PurpleInputCondition +#define GaimInputFunction PurpleInputFunction +#define GaimEventLoopUiOps PurpleEventLoopUiOps +#define gaim_timeout_add purple_timeout_add +#define gaim_timeout_remove purple_timeout_remove +#define gaim_input_add purple_input_add +#define gaim_input_remove purple_input_remove +#define gaim_eventloop_set_ui_ops purple_eventloop_set_ui_ops +#define gaim_eventloop_get_ui_ops purple_eventloop_get_ui_ops +#define GaimXfer PurpleXfer +#define GAIM_XFER_UNKNOWN PURPLE_XFER_UNKNOWN +#define GAIM_XFER_SEND PURPLE_XFER_SEND +#define GAIM_XFER_RECEIVE PURPLE_XFER_RECEIVE +#define GaimXferType PurpleXferType +#define GAIM_XFER_STATUS_UNKNOWN PURPLE_XFER_STATUS_UNKNOWN +#define GAIM_XFER_STATUS_NOT_STARTED PURPLE_XFER_STATUS_NOT_STARTED +#define GAIM_XFER_STATUS_ACCEPTED PURPLE_XFER_STATUS_ACCEPTED +#define GAIM_XFER_STATUS_STARTED PURPLE_XFER_STATUS_STARTED +#define GAIM_XFER_STATUS_DONE PURPLE_XFER_STATUS_DONE +#define GAIM_XFER_STATUS_CANCEL_LOCAL PURPLE_XFER_STATUS_CANCEL_LOCAL +#define GAIM_XFER_STATUS_CANCEL_REMOTE PURPLE_XFER_STATUS_CANCEL_REMOTE +#define GaimXferStatusType PurpleXferStatusType +#define GaimXferUiOps PurpleXferUiOps +#define gaim_xfer_new purple_xfer_new +#define gaim_xfer_ref purple_xfer_ref +#define gaim_xfer_unref purple_xfer_unref +#define gaim_xfer_request purple_xfer_request +#define gaim_xfer_request_accepted purple_xfer_request_accepted +#define gaim_xfer_request_denied purple_xfer_request_denied +#define gaim_xfer_get_type purple_xfer_get_type +#define gaim_xfer_get_account purple_xfer_get_account +#define gaim_xfer_get_status purple_xfer_get_status +#define gaim_xfer_is_canceled purple_xfer_is_canceled +#define gaim_xfer_is_completed purple_xfer_is_completed +#define gaim_xfer_get_filename purple_xfer_get_filename +#define gaim_xfer_get_local_filename purple_xfer_get_local_filename +#define gaim_xfer_get_bytes_sent purple_xfer_get_bytes_sent +#define gaim_xfer_get_bytes_remaining purple_xfer_get_bytes_remaining +#define gaim_xfer_get_size purple_xfer_get_size +#define gaim_xfer_get_progress purple_xfer_get_progress +#define gaim_xfer_get_local_port purple_xfer_get_local_port +#define gaim_xfer_get_remote_ip purple_xfer_get_remote_ip +#define gaim_xfer_get_remote_port purple_xfer_get_remote_port +#define gaim_xfer_set_completed purple_xfer_set_completed +#define gaim_xfer_set_message purple_xfer_set_message +#define gaim_xfer_set_filename purple_xfer_set_filename +#define gaim_xfer_set_local_filename purple_xfer_set_local_filename +#define gaim_xfer_set_size purple_xfer_set_size +#define gaim_xfer_set_bytes_sent purple_xfer_set_bytes_sent +#define gaim_xfer_get_ui_ops purple_xfer_get_ui_ops +#define gaim_xfer_set_read_fnc purple_xfer_set_read_fnc +#define gaim_xfer_set_write_fnc purple_xfer_set_write_fnc +#define gaim_xfer_set_ack_fnc purple_xfer_set_ack_fnc +#define gaim_xfer_set_request_denied_fnc purple_xfer_set_request_denied_fnc +#define gaim_xfer_set_init_fnc purple_xfer_set_init_fnc +#define gaim_xfer_set_start_fnc purple_xfer_set_start_fnc +#define gaim_xfer_set_end_fnc purple_xfer_set_end_fnc +#define gaim_xfer_set_cancel_send_fnc purple_xfer_set_cancel_send_fnc +#define gaim_xfer_set_cancel_recv_fnc purple_xfer_set_cancel_recv_fnc +#define gaim_xfer_read purple_xfer_read +#define gaim_xfer_write purple_xfer_write +#define gaim_xfer_start purple_xfer_start +#define gaim_xfer_end purple_xfer_end +#define gaim_xfer_add purple_xfer_add +#define gaim_xfer_cancel_local purple_xfer_cancel_local +#define gaim_xfer_cancel_remote purple_xfer_cancel_remote +#define gaim_xfer_error purple_xfer_error +#define gaim_xfer_update_progress purple_xfer_update_progress +#define gaim_xfer_conversation_write purple_xfer_conversation_write +#define gaim_xfers_get_handle purple_xfers_get_handle +#define gaim_xfers_init purple_xfers_init +#define gaim_xfers_uninit purple_xfers_uninit +#define gaim_xfers_set_ui_ops purple_xfers_set_ui_ops +#define gaim_xfers_get_ui_ops purple_xfers_get_ui_ops +/* from gaim-client.h */ +#define gaim_init purple_init +#define GaimIdleUiOps PurpleIdleUiOps +#define gaim_idle_touch purple_idle_touch +#define gaim_idle_set purple_idle_set +#define gaim_idle_set_ui_ops purple_idle_set_ui_ops +#define gaim_idle_get_ui_ops purple_idle_get_ui_ops +#define gaim_idle_init purple_idle_init +#define gaim_idle_uninit purple_idle_uninit +#define GaimStoredImage PurpleStoredImage +#define gaim_imgstore_add(data, size, filename) \ + purple_imgstore_add_with_id(g_memdup(data, size), size, filename) +#define gaim_imgstore_get purple_imgstore_find_by_id +#define gaim_imgstore_get_data purple_imgstore_get_data +#define gaim_imgstore_get_size purple_imgstore_get_size +#define gaim_imgstore_get_filename purple_imgstore_get_filename +#define gaim_imgstore_ref purple_imgstore_ref_by_id +#define gaim_imgstore_unref purple_imgstore_unref_by_id +#define GaimLog PurpleLog +#define GaimLogLogger PurpleLogLogger +#define GaimLogCommonLoggerData PurpleLogCommonLoggerData +#define GaimLogSet PurpleLogSet +#define GAIM_LOG_IM PURPLE_LOG_IM +#define GAIM_LOG_CHAT PURPLE_LOG_CHAT +#define GAIM_LOG_SYSTEM PURPLE_LOG_SYSTEM +#define GaimLogType PurpleLogType +#define GAIM_LOG_READ_NO_NEWLINE PURPLE_LOG_READ_NO_NEWLINE +#define GaimLogReadFlags PurpleLogReadFlags +#define GaimLogSetCallback PurpleLogSetCallback +#define gaim_log_new purple_log_new +#define gaim_log_free purple_log_free +#define gaim_log_write purple_log_write +#define gaim_log_read purple_log_read +#define gaim_log_get_logs purple_log_get_logs +#define gaim_log_get_log_sets purple_log_get_log_sets +#define gaim_log_get_system_logs purple_log_get_system_logs +#define gaim_log_get_size purple_log_get_size +#define gaim_log_get_total_size purple_log_get_total_size +#define gaim_log_get_log_dir purple_log_get_log_dir +#define gaim_log_compare purple_log_compare +#define gaim_log_set_compare purple_log_set_compare +#define gaim_log_set_free purple_log_set_free +#define gaim_log_common_writer purple_log_common_writer +#define gaim_log_common_lister purple_log_common_lister +#define gaim_log_common_total_sizer purple_log_common_total_sizer +#define gaim_log_common_sizer purple_log_common_sizer +#define gaim_log_logger_new purple_log_logger_new +#define gaim_log_logger_free purple_log_logger_free +#define gaim_log_logger_add purple_log_logger_add +#define gaim_log_logger_remove purple_log_logger_remove +#define gaim_log_logger_set purple_log_logger_set +#define gaim_log_logger_get purple_log_logger_get +#define gaim_log_logger_get_options purple_log_logger_get_options +#define gaim_log_init purple_log_init +#define gaim_log_get_handle purple_log_get_handle +#define gaim_log_uninit purple_log_uninit +#define GaimMimeDocument PurpleMimeDocument +#define GaimMimePart PurpleMimePart +#define gaim_mime_document_new purple_mime_document_new +#define gaim_mime_document_free purple_mime_document_free +#define gaim_mime_document_parse purple_mime_document_parse +#define gaim_mime_document_parsen purple_mime_document_parsen +#define gaim_mime_document_write purple_mime_document_write +#define gaim_mime_document_get_fields purple_mime_document_get_fields +#define gaim_mime_document_get_field purple_mime_document_get_field +#define gaim_mime_document_set_field purple_mime_document_set_field +#define gaim_mime_document_get_parts purple_mime_document_get_parts +#define gaim_mime_part_new purple_mime_part_new +#define gaim_mime_part_get_fields purple_mime_part_get_fields +#define gaim_mime_part_get_field purple_mime_part_get_field +#define gaim_mime_part_get_field_decoded purple_mime_part_get_field_decoded +#define gaim_mime_part_set_field purple_mime_part_set_field +#define gaim_mime_part_get_data purple_mime_part_get_data +#define gaim_mime_part_get_data_decoded purple_mime_part_get_data_decoded +#define gaim_mime_part_get_length purple_mime_part_get_length +#define gaim_mime_part_set_data purple_mime_part_set_data +#define GaimNetworkListenData PurpleNetworkListenData +#define GaimNetworkListenCallback PurpleNetworkListenCallback +#define gaim_network_ip_atoi purple_network_ip_atoi +#define gaim_network_set_public_ip purple_network_set_public_ip +#define gaim_network_get_public_ip purple_network_get_public_ip +#define gaim_network_get_local_system_ip purple_network_get_local_system_ip +#define gaim_network_get_my_ip purple_network_get_my_ip +#define gaim_network_listen purple_network_listen +#define gaim_network_listen_range purple_network_listen_range +#define gaim_network_listen_cancel purple_network_listen_cancel +#define gaim_network_get_port_from_fd purple_network_get_port_from_fd +#define gaim_network_is_available purple_network_is_available +#define gaim_network_init purple_network_init +#define gaim_network_uninit purple_network_uninit +#define GaimNotifyUserInfoEntry PurpleNotifyUserInfoEntry +#define GaimNotifyUserInfo PurpleNotifyUserInfo +#define GaimNotifyCloseCallback PurpleNotifyCloseCallback +#define GAIM_NOTIFY_MESSAGE PURPLE_NOTIFY_MESSAGE +#define GAIM_NOTIFY_EMAIL PURPLE_NOTIFY_EMAIL +#define GAIM_NOTIFY_EMAILS PURPLE_NOTIFY_EMAILS +#define GAIM_NOTIFY_FORMATTED PURPLE_NOTIFY_FORMATTED +#define GAIM_NOTIFY_SEARCHRESULTS PURPLE_NOTIFY_SEARCHRESULTS +#define GAIM_NOTIFY_USERINFO PURPLE_NOTIFY_USERINFO +#define GAIM_NOTIFY_URI PURPLE_NOTIFY_URI +#define GaimNotifyType PurpleNotifyType +#define GAIM_NOTIFY_MSG_ERROR PURPLE_NOTIFY_MSG_ERROR +#define GAIM_NOTIFY_MSG_WARNING PURPLE_NOTIFY_MSG_WARNING +#define GAIM_NOTIFY_MSG_INFO PURPLE_NOTIFY_MSG_INFO +#define GaimNotifyMsgType PurpleNotifyMsgType +#define GAIM_NOTIFY_BUTTON_LABELED PURPLE_NOTIFY_BUTTON_LABELED +#define GAIM_NOTIFY_BUTTON_CONTINUE PURPLE_NOTIFY_BUTTON_CONTINUE +#define GAIM_NOTIFY_BUTTON_ADD PURPLE_NOTIFY_BUTTON_ADD +#define GAIM_NOTIFY_BUTTON_INFO PURPLE_NOTIFY_BUTTON_INFO +#define GAIM_NOTIFY_BUTTON_IM PURPLE_NOTIFY_BUTTON_IM +#define GAIM_NOTIFY_BUTTON_JOIN PURPLE_NOTIFY_BUTTON_JOIN +#define GAIM_NOTIFY_BUTTON_INVITE PURPLE_NOTIFY_BUTTON_INVITE +#define GaimNotifySearchButtonType PurpleNotifySearchButtonType +#define GaimNotifySearchResults PurpleNotifySearchResults +#define GAIM_NOTIFY_USER_INFO_ENTRY_PAIR PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR +#define GAIM_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK +#define GAIM_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER +#define GaimNotifyUserInfoEntryType PurpleNotifyUserInfoEntryType +#define GaimNotifySearchColumn PurpleNotifySearchColumn +#define GaimNotifySearchResultsCallback PurpleNotifySearchResultsCallback +#define GaimNotifySearchButton PurpleNotifySearchButton +#define GaimNotifyUiOps PurpleNotifyUiOps +#define gaim_notify_searchresults purple_notify_searchresults +#define gaim_notify_searchresults_free purple_notify_searchresults_free +#define gaim_notify_searchresults_new_rows purple_notify_searchresults_new_rows +#define gaim_notify_searchresults_button_add purple_notify_searchresults_button_add +#define gaim_notify_searchresults_button_add_labeled purple_notify_searchresults_button_add_labeled +#define gaim_notify_searchresults_new purple_notify_searchresults_new +#define gaim_notify_searchresults_column_new purple_notify_searchresults_column_new +#define gaim_notify_searchresults_column_add purple_notify_searchresults_column_add +#define gaim_notify_searchresults_row_add purple_notify_searchresults_row_add +#define gaim_notify_searchresults_get_rows_count purple_notify_searchresults_get_rows_count +#define gaim_notify_searchresults_get_columns_count purple_notify_searchresults_get_columns_count +#define gaim_notify_searchresults_row_get purple_notify_searchresults_row_get +#define gaim_notify_searchresults_column_get_title purple_notify_searchresults_column_get_title +#define gaim_notify_message purple_notify_message +#define gaim_notify_email purple_notify_email +#define gaim_notify_emails purple_notify_emails +#define gaim_notify_formatted purple_notify_formatted +#define gaim_notify_userinfo purple_notify_userinfo +#define gaim_notify_user_info_new purple_notify_user_info_new +#define gaim_notify_user_info_destroy purple_notify_user_info_destroy +#define gaim_notify_user_info_get_entries purple_notify_user_info_get_entries +#define gaim_notify_user_info_get_text_with_newline purple_notify_user_info_get_text_with_newline +#define gaim_notify_user_info_add_pair purple_notify_user_info_add_pair +#define gaim_notify_user_info_prepend_pair purple_notify_user_info_prepend_pair +#define gaim_notify_user_info_remove_entry purple_notify_user_info_remove_entry +#define gaim_notify_user_info_entry_new purple_notify_user_info_entry_new +#define gaim_notify_user_info_add_section_break purple_notify_user_info_add_section_break +#define gaim_notify_user_info_add_section_header purple_notify_user_info_add_section_header +#define gaim_notify_user_info_remove_last_item purple_notify_user_info_remove_last_item +#define gaim_notify_user_info_entry_get_label purple_notify_user_info_entry_get_label +#define gaim_notify_user_info_entry_set_label purple_notify_user_info_entry_set_label +#define gaim_notify_user_info_entry_get_value purple_notify_user_info_entry_get_value +#define gaim_notify_user_info_entry_set_value purple_notify_user_info_entry_set_value +#define gaim_notify_user_info_entry_get_type purple_notify_user_info_entry_get_type +#define gaim_notify_user_info_entry_set_type purple_notify_user_info_entry_set_type +#define gaim_notify_uri purple_notify_uri +#define gaim_notify_close purple_notify_close +#define gaim_notify_close_with_handle purple_notify_close_with_handle +#define gaim_notify_info purple_notify_info +#define gaim_notify_warning purple_notify_warning +#define gaim_notify_error purple_notify_error +#define gaim_notify_set_ui_ops purple_notify_set_ui_ops +#define gaim_notify_get_ui_ops purple_notify_get_ui_ops +#define gaim_notify_get_handle purple_notify_get_handle +#define gaim_notify_init purple_notify_init +#define gaim_notify_uninit purple_notify_uninit +#define gaim_ntlm_gen_type1 purple_ntlm_gen_type1 +#define gaim_ntlm_parse_type2 purple_ntlm_parse_type2 +#define gaim_ntlm_gen_type3 purple_ntlm_gen_type3 +#define GaimPlugin PurplePlugin +#define GaimPluginInfo PurplePluginInfo +#define GaimPluginUiInfo PurplePluginUiInfo +#define GaimPluginLoaderInfo PurplePluginLoaderInfo +#define GaimPluginAction PurplePluginAction +#define GaimPluginPriority PurplePluginPriority +#define GAIM_PLUGIN_UNKNOWN PURPLE_PLUGIN_UNKNOWN +#define GAIM_PLUGIN_STANDARD PURPLE_PLUGIN_STANDARD +#define GAIM_PLUGIN_LOADER PURPLE_PLUGIN_LOADER +#define GAIM_PLUGIN_PROTOCOL PURPLE_PLUGIN_PROTOCOL +#define GaimPluginType PurplePluginType +#define GAIM_PRIORITY_DEFAULT PURPLE_PRIORITY_DEFAULT +#define GAIM_PRIORITY_HIGHEST PURPLE_PRIORITY_HIGHEST +#define GAIM_PRIORITY_LOWEST PURPLE_PRIORITY_LOWEST +#define GAIM_PLUGIN_FLAG_INVISIBLE PURPLE_PLUGIN_FLAG_INVISIBLE +#define GAIM_PLUGIN_MAGIC PURPLE_PLUGIN_MAGIC +#define GAIM_PLUGIN_LOADER_INFO PURPLE_PLUGIN_LOADER_INFO +#define GAIM_PLUGIN_HAS_PREF_FRAME PURPLE_PLUGIN_HAS_PREF_FRAME +#define GAIM_PLUGIN_UI_INFO PURPLE_PLUGIN_UI_INFO +#define GAIM_PLUGIN_HAS_ACTIONS PURPLE_PLUGIN_HAS_ACTIONS +#define GAIM_PLUGIN_ACTIONS PURPLE_PLUGIN_ACTIONS +#define GAIM_INIT_PLUGIN PURPLE_INIT_PLUGIN +#define gaim_plugin_new purple_plugin_new +#define gaim_plugin_probe purple_plugin_probe +#define gaim_plugin_register purple_plugin_register +#define gaim_plugin_load purple_plugin_load +#define gaim_plugin_unload purple_plugin_unload +#define gaim_plugin_reload purple_plugin_reload +#define gaim_plugin_destroy purple_plugin_destroy +#define gaim_plugin_is_loaded purple_plugin_is_loaded +#define gaim_plugin_is_unloadable purple_plugin_is_unloadable +#define gaim_plugin_get_id purple_plugin_get_id +#define gaim_plugin_get_name purple_plugin_get_name +#define gaim_plugin_get_version purple_plugin_get_version +#define gaim_plugin_get_summary purple_plugin_get_summary +#define gaim_plugin_get_description purple_plugin_get_description +#define gaim_plugin_get_author purple_plugin_get_author +#define gaim_plugin_get_homepage purple_plugin_get_homepage +#define gaim_plugin_ipc_register purple_plugin_ipc_register +#define gaim_plugin_ipc_unregister purple_plugin_ipc_unregister +#define gaim_plugin_ipc_unregister_all purple_plugin_ipc_unregister_all +#define gaim_plugin_ipc_get_params purple_plugin_ipc_get_params +#define gaim_plugin_ipc_call purple_plugin_ipc_call +#define gaim_plugins_add_search_path purple_plugins_add_search_path +#define gaim_plugins_unload_all purple_plugins_unload_all +#define gaim_plugins_destroy_all purple_plugins_destroy_all +#define gaim_plugins_save_loaded purple_plugins_save_loaded +#define gaim_plugins_load_saved purple_plugins_load_saved +#define gaim_plugins_probe purple_plugins_probe +#define gaim_plugins_enabled purple_plugins_enabled +#define gaim_plugins_register_probe_notify_cb purple_plugins_register_probe_notify_cb +#define gaim_plugins_unregister_probe_notify_cb purple_plugins_unregister_probe_notify_cb +#define gaim_plugins_register_load_notify_cb purple_plugins_register_load_notify_cb +#define gaim_plugins_unregister_load_notify_cb purple_plugins_unregister_load_notify_cb +#define gaim_plugins_register_unload_notify_cb purple_plugins_register_unload_notify_cb +#define gaim_plugins_unregister_unload_notify_cb purple_plugins_unregister_unload_notify_cb +#define gaim_plugins_find_with_name purple_plugins_find_with_name +#define gaim_plugins_find_with_filename purple_plugins_find_with_filename +#define gaim_plugins_find_with_basename purple_plugins_find_with_basename +#define gaim_plugins_find_with_id purple_plugins_find_with_id +#define gaim_plugins_get_loaded purple_plugins_get_loaded +#define gaim_plugins_get_protocols purple_plugins_get_protocols +#define gaim_plugins_get_all purple_plugins_get_all +#define gaim_plugins_get_handle purple_plugins_get_handle +#define gaim_plugins_init purple_plugins_init +#define gaim_plugins_uninit purple_plugins_uninit +#define gaim_plugin_action_new purple_plugin_action_new +#define gaim_plugin_action_free purple_plugin_action_free +#define GaimPluginPrefFrame PurplePluginPrefFrame +#define GaimPluginPref PurplePluginPref +#define GAIM_STRING_FORMAT_TYPE_NONE PURPLE_STRING_FORMAT_TYPE_NONE +#define GAIM_STRING_FORMAT_TYPE_MULTILINE PURPLE_STRING_FORMAT_TYPE_MULTILINE +#define GAIM_STRING_FORMAT_TYPE_HTML PURPLE_STRING_FORMAT_TYPE_HTML +#define GaimStringFormatType PurpleStringFormatType +#define GAIM_PLUGIN_PREF_NONE PURPLE_PLUGIN_PREF_NONE +#define GAIM_PLUGIN_PREF_CHOICE PURPLE_PLUGIN_PREF_CHOICE +#define GAIM_PLUGIN_PREF_INFO PURPLE_PLUGIN_PREF_INFO +#define GAIM_PLUGIN_PREF_STRING_FORMAT PURPLE_PLUGIN_PREF_STRING_FORMAT +#define GaimPluginPrefType PurplePluginPrefType +#define gaim_plugin_pref_frame_new purple_plugin_pref_frame_new +#define gaim_plugin_pref_frame_destroy purple_plugin_pref_frame_destroy +#define gaim_plugin_pref_frame_add purple_plugin_pref_frame_add +#define gaim_plugin_pref_frame_get_prefs purple_plugin_pref_frame_get_prefs +#define gaim_plugin_pref_new purple_plugin_pref_new +#define gaim_plugin_pref_new_with_name purple_plugin_pref_new_with_name +#define gaim_plugin_pref_new_with_label purple_plugin_pref_new_with_label +#define gaim_plugin_pref_new_with_name_and_label purple_plugin_pref_new_with_name_and_label +#define gaim_plugin_pref_destroy purple_plugin_pref_destroy +#define gaim_plugin_pref_set_name purple_plugin_pref_set_name +#define gaim_plugin_pref_get_name purple_plugin_pref_get_name +#define gaim_plugin_pref_set_label purple_plugin_pref_set_label +#define gaim_plugin_pref_get_label purple_plugin_pref_get_label +#define gaim_plugin_pref_set_bounds purple_plugin_pref_set_bounds +#define gaim_plugin_pref_get_bounds purple_plugin_pref_get_bounds +#define gaim_plugin_pref_set_type purple_plugin_pref_set_type +#define gaim_plugin_pref_get_type purple_plugin_pref_get_type +#define gaim_plugin_pref_add_choice purple_plugin_pref_add_choice +#define gaim_plugin_pref_get_choices purple_plugin_pref_get_choices +#define gaim_plugin_pref_set_max_length purple_plugin_pref_set_max_length +#define gaim_plugin_pref_get_max_length purple_plugin_pref_get_max_length +#define gaim_plugin_pref_set_masked purple_plugin_pref_set_masked +#define gaim_plugin_pref_get_masked purple_plugin_pref_get_masked +#define gaim_plugin_pref_set_format_type purple_plugin_pref_set_format_type +#define gaim_plugin_pref_get_format_type purple_plugin_pref_get_format_type +#define GaimPounce PurplePounce +#define GAIM_POUNCE_NONE PURPLE_POUNCE_NONE +#define GAIM_POUNCE_SIGNON PURPLE_POUNCE_SIGNON +#define GAIM_POUNCE_SIGNOFF PURPLE_POUNCE_SIGNOFF +#define GAIM_POUNCE_AWAY PURPLE_POUNCE_AWAY +#define GAIM_POUNCE_AWAY_RETURN PURPLE_POUNCE_AWAY_RETURN +#define GAIM_POUNCE_IDLE PURPLE_POUNCE_IDLE +#define GAIM_POUNCE_IDLE_RETURN PURPLE_POUNCE_IDLE_RETURN +#define GAIM_POUNCE_TYPING PURPLE_POUNCE_TYPING +#define GAIM_POUNCE_TYPED PURPLE_POUNCE_TYPED +#define GAIM_POUNCE_TYPING_STOPPED PURPLE_POUNCE_TYPING_STOPPED +#define GAIM_POUNCE_MESSAGE_RECEIVED PURPLE_POUNCE_MESSAGE_RECEIVED +#define GaimPounceEvent PurplePounceEvent +#define GAIM_POUNCE_OPTION_NONE PURPLE_POUNCE_OPTION_NONE +#define GAIM_POUNCE_OPTION_AWAY PURPLE_POUNCE_OPTION_AWAY +#define GaimPounceOption PurplePounceOption +#define GaimPounceCb PurplePounceCb +#define gaim_pounce_new purple_pounce_new +#define gaim_pounce_destroy purple_pounce_destroy +#define gaim_pounce_destroy_all_by_account purple_pounce_destroy_all_by_account +#define gaim_pounce_set_events purple_pounce_set_events +#define gaim_pounce_set_options purple_pounce_set_options +#define gaim_pounce_set_pouncer purple_pounce_set_pouncer +#define gaim_pounce_set_pouncee purple_pounce_set_pouncee +#define gaim_pounce_set_save purple_pounce_set_save +#define gaim_pounce_action_register purple_pounce_action_register +#define gaim_pounce_action_set_enabled purple_pounce_action_set_enabled +#define gaim_pounce_action_set_attribute purple_pounce_action_set_attribute +#define gaim_pounce_set_data purple_pounce_set_data +#define gaim_pounce_get_events purple_pounce_get_events +#define gaim_pounce_get_options purple_pounce_get_options +#define gaim_pounce_get_pouncer purple_pounce_get_pouncer +#define gaim_pounce_get_pouncee purple_pounce_get_pouncee +#define gaim_pounce_get_save purple_pounce_get_save +#define gaim_pounce_action_is_enabled purple_pounce_action_is_enabled +#define gaim_pounce_action_get_attribute purple_pounce_action_get_attribute +#define gaim_pounce_get_data purple_pounce_get_data +#define gaim_pounce_execute purple_pounce_execute +#define gaim_find_pounce purple_find_pounce +#define gaim_pounces_load purple_pounces_load +#define gaim_pounces_register_handler purple_pounces_register_handler +#define gaim_pounces_unregister_handler purple_pounces_unregister_handler +#define gaim_pounces_get_all purple_pounces_get_all +#define gaim_pounces_get_handle purple_pounces_get_handle +#define gaim_pounces_init purple_pounces_init +#define gaim_pounces_uninit purple_pounces_uninit +#define GAIM_PREF_NONE PURPLE_PREF_NONE +#define GAIM_PREF_BOOLEAN PURPLE_PREF_BOOLEAN +#define GAIM_PREF_INT PURPLE_PREF_INT +#define GAIM_PREF_STRING PURPLE_PREF_STRING +#define GAIM_PREF_STRING_LIST PURPLE_PREF_STRING_LIST +#define GAIM_PREF_PATH PURPLE_PREF_PATH +#define GAIM_PREF_PATH_LIST PURPLE_PREF_PATH_LIST +#define GaimPrefType PurplePrefType +#define GaimPrefCallback PurplePrefCallback +#define gaim_prefs_get_handle purple_prefs_get_handle +#define gaim_prefs_init purple_prefs_init +#define gaim_prefs_uninit purple_prefs_uninit +#define gaim_prefs_add_none purple_prefs_add_none +#define gaim_prefs_add_bool purple_prefs_add_bool +#define gaim_prefs_add_int purple_prefs_add_int +#define gaim_prefs_add_string purple_prefs_add_string +#define gaim_prefs_add_string_list purple_prefs_add_string_list +#define gaim_prefs_add_path purple_prefs_add_path +#define gaim_prefs_add_path_list purple_prefs_add_path_list +#define gaim_prefs_remove purple_prefs_remove +#define gaim_prefs_rename purple_prefs_rename +#define gaim_prefs_rename_boolean_toggle purple_prefs_rename_boolean_toggle +#define gaim_prefs_destroy purple_prefs_destroy +#define gaim_prefs_set_generic purple_prefs_set_generic +#define gaim_prefs_set_bool purple_prefs_set_bool +#define gaim_prefs_set_int purple_prefs_set_int +#define gaim_prefs_set_string purple_prefs_set_string +#define gaim_prefs_set_string_list purple_prefs_set_string_list +#define gaim_prefs_set_path purple_prefs_set_path +#define gaim_prefs_set_path_list purple_prefs_set_path_list +#define gaim_prefs_exists purple_prefs_exists +#define gaim_prefs_get_type purple_prefs_get_type +#define gaim_prefs_get_bool purple_prefs_get_bool +#define gaim_prefs_get_int purple_prefs_get_int +#define gaim_prefs_get_string purple_prefs_get_string +#define gaim_prefs_get_string_list purple_prefs_get_string_list +#define gaim_prefs_get_path purple_prefs_get_path +#define gaim_prefs_get_path_list purple_prefs_get_path_list +#define gaim_prefs_connect_callback purple_prefs_connect_callback +#define gaim_prefs_disconnect_callback purple_prefs_disconnect_callback +#define gaim_prefs_disconnect_by_handle purple_prefs_disconnect_by_handle +#define gaim_prefs_trigger_callback purple_prefs_trigger_callback +#define gaim_prefs_load purple_prefs_load +#define gaim_prefs_update_old purple_prefs_update_old +#define GAIM_PRIVACY_ALLOW_ALL PURPLE_PRIVACY_ALLOW_ALL +#define GAIM_PRIVACY_DENY_ALL PURPLE_PRIVACY_DENY_ALL +#define GAIM_PRIVACY_ALLOW_USERS PURPLE_PRIVACY_ALLOW_USERS +#define GAIM_PRIVACY_DENY_USERS PURPLE_PRIVACY_DENY_USERS +#define GAIM_PRIVACY_ALLOW_BUDDYLIST PURPLE_PRIVACY_ALLOW_BUDDYLIST +#define GaimPrivacyType PurplePrivacyType +#define GaimPrivacyUiOps PurplePrivacyUiOps +#define gaim_privacy_permit_add purple_privacy_permit_add +#define gaim_privacy_permit_remove purple_privacy_permit_remove +#define gaim_privacy_deny_add purple_privacy_deny_add +#define gaim_privacy_deny_remove purple_privacy_deny_remove +#define gaim_privacy_allow purple_privacy_allow +#define gaim_privacy_deny purple_privacy_deny +#define gaim_privacy_check purple_privacy_check +#define gaim_privacy_set_ui_ops purple_privacy_set_ui_ops +#define gaim_privacy_get_ui_ops purple_privacy_get_ui_ops +#define gaim_privacy_init purple_privacy_init +#define GAIM_PROXY_USE_GLOBAL PURPLE_PROXY_USE_GLOBAL +#define GAIM_PROXY_NONE PURPLE_PROXY_NONE +#define GAIM_PROXY_HTTP PURPLE_PROXY_HTTP +#define GAIM_PROXY_SOCKS4 PURPLE_PROXY_SOCKS4 +#define GAIM_PROXY_SOCKS5 PURPLE_PROXY_SOCKS5 +#define GAIM_PROXY_USE_ENVVAR PURPLE_PROXY_USE_ENVVAR +#define GaimProxyType PurpleProxyType +#define GaimProxyInfo PurpleProxyInfo +#define GaimProxyConnectData PurpleProxyConnectData +#define GaimProxyConnectFunction PurpleProxyConnectFunction +#define gaim_proxy_info_new purple_proxy_info_new +#define gaim_proxy_info_destroy purple_proxy_info_destroy +#define gaim_proxy_info_set_type purple_proxy_info_set_type +#define gaim_proxy_info_set_host purple_proxy_info_set_host +#define gaim_proxy_info_set_port purple_proxy_info_set_port +#define gaim_proxy_info_set_username purple_proxy_info_set_username +#define gaim_proxy_info_set_password purple_proxy_info_set_password +#define gaim_proxy_info_get_type purple_proxy_info_get_type +#define gaim_proxy_info_get_host purple_proxy_info_get_host +#define gaim_proxy_info_get_port purple_proxy_info_get_port +#define gaim_proxy_info_get_username purple_proxy_info_get_username +#define gaim_proxy_info_get_password purple_proxy_info_get_password +#define gaim_global_proxy_get_info purple_global_proxy_get_info +#define gaim_proxy_get_handle purple_proxy_get_handle +#define gaim_proxy_init purple_proxy_init +#define gaim_proxy_uninit purple_proxy_uninit +#define gaim_proxy_get_setup purple_proxy_get_setup +#define gaim_proxy_connect purple_proxy_connect +#define gaim_proxy_connect_socks5 purple_proxy_connect_socks5 +#define gaim_proxy_connect_cancel purple_proxy_connect_cancel +#define gaim_proxy_connect_cancel_with_handle purple_proxy_connect_cancel_with_handle +#define GaimPluginProtocolInfo PurplePluginProtocolInfo +#define GAIM_ICON_SCALE_DISPLAY PURPLE_ICON_SCALE_DISPLAY +#define GAIM_ICON_SCALE_SEND PURPLE_ICON_SCALE_SEND +#define GaimIconScaleRules PurpleIconScaleRules +#define GaimBuddyIconSpec PurpleBuddyIconSpec +#define GaimProtocolOptions PurpleProtocolOptions +#define GAIM_IS_PROTOCOL_PLUGIN PURPLE_IS_PROTOCOL_PLUGIN +#define GAIM_PLUGIN_PROTOCOL_INFO PURPLE_PLUGIN_PROTOCOL_INFO +#define gaim_prpl_got_account_idle purple_prpl_got_account_idle +#define gaim_prpl_got_account_login_time purple_prpl_got_account_login_time +#define gaim_prpl_got_account_status purple_prpl_got_account_status +#define gaim_prpl_got_user_idle purple_prpl_got_user_idle +#define gaim_prpl_got_user_login_time purple_prpl_got_user_login_time +#define gaim_prpl_got_user_status purple_prpl_got_user_status +#define gaim_prpl_change_account_status purple_prpl_change_account_status +#define gaim_prpl_get_statuses purple_prpl_get_statuses +#define gaim_find_prpl purple_find_prpl +#define GAIM_DEFAULT_ACTION_NONE PURPLE_DEFAULT_ACTION_NONE +#define GAIM_REQUEST_INPUT PURPLE_REQUEST_INPUT +#define GAIM_REQUEST_CHOICE PURPLE_REQUEST_CHOICE +#define GAIM_REQUEST_ACTION PURPLE_REQUEST_ACTION +#define GAIM_REQUEST_FIELDS PURPLE_REQUEST_FIELDS +#define GAIM_REQUEST_FILE PURPLE_REQUEST_FILE +#define GAIM_REQUEST_FOLDER PURPLE_REQUEST_FOLDER +#define GaimRequestType PurpleRequestType +#define GAIM_REQUEST_FIELD_NONE PURPLE_REQUEST_FIELD_NONE +#define GAIM_REQUEST_FIELD_STRING PURPLE_REQUEST_FIELD_STRING +#define GAIM_REQUEST_FIELD_INTEGER PURPLE_REQUEST_FIELD_INTEGER +#define GAIM_REQUEST_FIELD_BOOLEAN PURPLE_REQUEST_FIELD_BOOLEAN +#define GAIM_REQUEST_FIELD_CHOICE PURPLE_REQUEST_FIELD_CHOICE +#define GAIM_REQUEST_FIELD_LIST PURPLE_REQUEST_FIELD_LIST +#define GAIM_REQUEST_FIELD_LABEL PURPLE_REQUEST_FIELD_LABEL +#define GAIM_REQUEST_FIELD_IMAGE PURPLE_REQUEST_FIELD_IMAGE +#define GAIM_REQUEST_FIELD_ACCOUNT PURPLE_REQUEST_FIELD_ACCOUNT +#define GaimRequestFieldType PurpleRequestFieldType +#define GaimRequestFields PurpleRequestFields +#define GaimRequestFieldGroup PurpleRequestFieldGroup +#define GaimRequestField PurpleRequestField +#define GaimRequestUiOps PurpleRequestUiOps +#define GaimRequestInputCb PurpleRequestInputCb +#define GaimRequestActionCb PurpleRequestActionCb +#define GaimRequestChoiceCb PurpleRequestChoiceCb +#define GaimRequestFieldsCb PurpleRequestFieldsCb +#define GaimRequestFileCb PurpleRequestFileCb +#define gaim_request_fields_new purple_request_fields_new +#define gaim_request_fields_destroy purple_request_fields_destroy +#define gaim_request_fields_add_group purple_request_fields_add_group +#define gaim_request_fields_get_groups purple_request_fields_get_groups +#define gaim_request_fields_exists purple_request_fields_exists +#define gaim_request_fields_get_required purple_request_fields_get_required +#define gaim_request_fields_is_field_required purple_request_fields_is_field_required +#define gaim_request_fields_all_required_filled purple_request_fields_all_required_filled +#define gaim_request_fields_get_field purple_request_fields_get_field +#define gaim_request_fields_get_string purple_request_fields_get_string +#define gaim_request_fields_get_integer purple_request_fields_get_integer +#define gaim_request_fields_get_bool purple_request_fields_get_bool +#define gaim_request_fields_get_choice purple_request_fields_get_choice +#define gaim_request_fields_get_account purple_request_fields_get_account +#define gaim_request_field_group_new purple_request_field_group_new +#define gaim_request_field_group_destroy purple_request_field_group_destroy +#define gaim_request_field_group_add_field purple_request_field_group_add_field +#define gaim_request_field_group_get_title purple_request_field_group_get_title +#define gaim_request_field_group_get_fields purple_request_field_group_get_fields +#define gaim_request_field_new purple_request_field_new +#define gaim_request_field_destroy purple_request_field_destroy +#define gaim_request_field_set_label purple_request_field_set_label +#define gaim_request_field_set_visible purple_request_field_set_visible +#define gaim_request_field_set_type_hint purple_request_field_set_type_hint +#define gaim_request_field_set_required purple_request_field_set_required +#define gaim_request_field_get_type purple_request_field_get_type +#define gaim_request_field_get_id purple_request_field_get_id +#define gaim_request_field_get_label purple_request_field_get_label +#define gaim_request_field_is_visible purple_request_field_is_visible +#define gaim_request_field_get_type_hint purple_request_field_get_type_hint +#define gaim_request_field_is_required purple_request_field_is_required +#define gaim_request_field_string_new purple_request_field_string_new +#define gaim_request_field_string_set_default_value \ + purple_request_field_string_set_default_value +#define gaim_request_field_string_set_value purple_request_field_string_set_value +#define gaim_request_field_string_set_masked purple_request_field_string_set_masked +#define gaim_request_field_string_set_editable purple_request_field_string_set_editable +#define gaim_request_field_string_get_default_value \ + purple_request_field_string_get_default_value +#define gaim_request_field_string_get_value purple_request_field_string_get_value +#define gaim_request_field_string_is_multiline purple_request_field_string_is_multiline +#define gaim_request_field_string_is_masked purple_request_field_string_is_masked +#define gaim_request_field_string_is_editable purple_request_field_string_is_editable +#define gaim_request_field_int_new purple_request_field_int_new +#define gaim_request_field_int_set_default_value \ + purple_request_field_int_set_default_value +#define gaim_request_field_int_set_value purple_request_field_int_set_value +#define gaim_request_field_int_get_default_value \ + purple_request_field_int_get_default_value +#define gaim_request_field_int_get_value purple_request_field_int_get_value +#define gaim_request_field_bool_new purple_request_field_bool_new +#define gaim_request_field_bool_set_default_value \ + purple_request_field_book_set_default_value +#define gaim_request_field_bool_set_value purple_request_field_bool_set_value +#define gaim_request_field_bool_get_default_value \ + purple_request_field_bool_get_default_value +#define gaim_request_field_bool_get_value purple_request_field_bool_get_value +#define gaim_request_field_choice_new purple_request_field_choice_new +#define gaim_request_field_choice_add purple_request_field_choice_add +#define gaim_request_field_choice_set_default_value \ + purple_request_field_choice_set_default_value +#define gaim_request_field_choice_set_value purple_request_field_choice_set_value +#define gaim_request_field_choice_get_default_value \ + purple_request_field_choice_get_default_value +#define gaim_request_field_choice_get_value purple_request_field_choice_get_value +#define gaim_request_field_choice_get_labels purple_request_field_choice_get_labels +#define gaim_request_field_list_new purple_request_field_list_new +#define gaim_request_field_list_set_multi_select purple_request_field_list_set_multi_select +#define gaim_request_field_list_get_multi_select purple_request_field_list_get_multi_select +#define gaim_request_field_list_get_data purple_request_field_list_get_data +#define gaim_request_field_list_add purple_request_field_list_add +#define gaim_request_field_list_add_selected purple_request_field_list_add_selected +#define gaim_request_field_list_clear_selected purple_request_field_list_clear_selected +#define gaim_request_field_list_set_selected purple_request_field_list_set_selected +#define gaim_request_field_list_is_selected purple_request_field_list_is_selected +#define gaim_request_field_list_get_selected purple_request_field_list_get_selected +#define gaim_request_field_list_get_items purple_request_field_list_get_items +#define gaim_request_field_label_new purple_request_field_label_new +#define gaim_request_field_image_new purple_request_field_image_new +#define gaim_request_field_image_set_scale purple_request_field_image_set_scale +#define gaim_request_field_image_get_buffer purple_request_field_image_get_buffer +#define gaim_request_field_image_get_size purple_request_field_image_get_size +#define gaim_request_field_image_get_scale_x purple_request_field_image_get_scale_x +#define gaim_request_field_image_get_scale_y purple_request_field_image_get_scale_y +#define gaim_request_field_account_new purple_request_field_account_new +#define gaim_request_field_account_set_default_value purple_request_field_account_set_default_value +#define gaim_request_field_account_set_value purple_request_field_account_set_value +#define gaim_request_field_account_set_show_all purple_request_field_account_set_show_all +#define gaim_request_field_account_set_filter purple_request_field_account_set_filter +#define gaim_request_field_account_get_default_value purple_request_field_account_get_default_value +#define gaim_request_field_account_get_value purple_request_field_account_get_value +#define gaim_request_field_account_get_show_all purple_request_field_account_get_show_all +#define gaim_request_field_account_get_filter purple_request_field_account_get_filter +#define gaim_request_input purple_request_input +#define gaim_request_choice purple_request_choice +#define gaim_request_choice_varg purple_request_choice_varg +#define gaim_request_action purple_request_action +#define gaim_request_action_varg purple_request_action_varg +#define gaim_request_fields(handle, title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb, user_data) purple_request_fields(handle, title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb, NULL, NULL, NULL, user_data) +#define gaim_request_close purple_request_close +#define gaim_request_close_with_handle purple_request_close_with_handle +#define gaim_request_yes_no purple_request_yes_no +#define gaim_request_ok_cancel purple_request_ok_cancel +#define gaim_request_accept_cancel purple_request_accept_cancel +#define gaim_request_file purple_request_file +#define gaim_request_folder purple_request_folder +#define gaim_request_set_ui_ops purple_request_set_ui_ops +#define gaim_request_get_ui_ops purple_request_get_ui_ops +#define GaimRoomlist PurpleRoomlist +#define GaimRoomlistRoom PurpleRoomlistRoom +#define GaimRoomlistField PurpleRoomlistField +#define GaimRoomlistUiOps PurpleRoomlistUiOps +#define GAIM_ROOMLIST_ROOMTYPE_CATEGORY PURPLE_ROOMLIST_ROOMTYPE_CATEGORY +#define GAIM_ROOMLIST_ROOMTYPE_ROOM PURPLE_ROOMLIST_ROOMTYPE_ROOM +#define GaimRoomlistRoomType PurpleRoomlistRoomType +#define GAIM_ROOMLIST_FIELD_BOOL PURPLE_ROOMLIST_BOOL +#define GAIM_ROOMLIST_FIELD_INT PURPLE_ROOMLIST_INT +#define GAIM_ROOMLIST_FIELD_STRING PURPLE_ROOMLIST_STRING +#define GaimRoomlistFieldType PurpleRoomlistFieldType +#define gaim_roomlist_show_with_account purple_roomlist_show_with_account +#define gaim_roomlist_new purple_roomlist_new +#define gaim_roomlist_ref purple_roomlist_ref +#define gaim_roomlist_unref purple_roomlist_unref +#define gaim_roomlist_set_fields purple_roomlist_set_fields +#define gaim_roomlist_set_in_progress purple_roomlist_set_in_progress +#define gaim_roomlist_get_in_progress purple_roomlist_get_in_progress +#define gaim_roomlist_room_add purple_roomlist_room_add +#define gaim_roomlist_get_list purple_roomlist_get_list +#define gaim_roomlist_cancel_get_list purple_roomlist_cancel_get_list +#define gaim_roomlist_expand_category purple_roomlist_expand_category +#define gaim_roomlist_room_new purple_roomlist_room_new +#define gaim_roomlist_room_add_field purple_roomlist_room_add_field +#define gaim_roomlist_room_join purple_roomlist_room_join +#define gaim_roomlist_field_new purple_roomlist_field_new +#define gaim_roomlist_set_ui_ops purple_roomlist_set_ui_ops +#define gaim_roomlist_get_ui_ops purple_roomlist_get_ui_ops +/* from savedstatuses.h */ +#define GaimSavedStatus PurpleSavedStatus +#define GaimSavedStatusSub PurpleSavedStatusSub +#define gaim_savedstatus_new purple_savedstatus_new +#define gaim_savedstatus_set_title purple_savedstatus_set_title +#define gaim_savedstatus_set_type purple_savedstatus_set_type +#define gaim_savedstatus_set_message purple_savedstatus_set_message +#define gaim_savedstatus_set_substatus purple_savedstatus_set_substatus +#define gaim_savedstatus_unset_substatus purple_savedstatus_unset_substatus +#define gaim_savedstatus_delete purple_savedstatus_delete +#define gaim_savedstatuses_get_all purple_savedstatuses_get_all +#define gaim_savedstatuses_get_popular purple_savedstatuses_get_popular +#define gaim_savedstatus_get_current purple_savedstatus_get_current +#define gaim_savedstatus_get_default purple_savedstatus_get_default +#define gaim_savedstatus_get_idleaway purple_savedstatus_get_idleaway +#define gaim_savedstatus_is_idleaway purple_savedstatus_is_idleaway +#define gaim_savedstatus_set_idleaway purple_savedstatus_set_idleaway +#define gaim_savedstatus_get_startup purple_savedstatus_get_startup +#define gaim_savedstatus_find purple_savedstatus_find +#define gaim_savedstatus_find_by_creation_time purple_savedstatus_find_by_creation_time +#define gaim_savedstatus_find_transient_by_type_and_message \ + purple_savedstatus_find_transient_by_type_and_message +#define gaim_savedstatus_is_transient purple_savedstatus_is_transient +#define gaim_savedstatus_get_title purple_savedstatus_get_title +#define gaim_savedstatus_get_type purple_savedstatus_get_type +#define gaim_savedstatus_get_message purple_savedstatus_get_message +#define gaim_savedstatus_get_creation_time purple_savedstatus_get_creation_time +#define gaim_savedstatus_has_substatuses purple_savedstatus_has_substatuses +#define gaim_savedstatus_get_substatus purple_savedstatus_get_substatus +#define gaim_savedstatus_substatus_get_type purple_savedstatus_substatus_get_type +#define gaim_savedstatus_substatus_get_message purple_savedstatus_substatus_get_message +#define gaim_savedstatus_activate purple_savedstatus_activate +#define gaim_savedstatus_activate_for_account purple_savedstatus_activate_for_account +#define gaim_savedstatuses_get_handle purple_savedstatuses_get_handle +#define gaim_savedstatuses_init purple_savedstatuses_init +#define gaim_savedstatuses_uninit purple_savedstatuses_uninit +#define GAIM_CALLBACK PURPLE_CALLBACK +#define GaimCallback PurpleCallback +#define GaimSignalMarshalFunc PurpleSignalMarshalFunc +#define GAIM_SIGNAL_PRIORITY_DEFAULT PURPLE_SIGNAL_PRIORITY_DEFAULT +#define GAIM_SIGNAL_PRIORITY_HIGHEST PURPLE_SIGNAL_PRIORITY_HIGHEST +#define GAIM_SIGNAL_PRIORITY_LOWEST PURPLE_SIGNAL_PRIORITY_LOWEST +#define gaim_signal_register purple_signal_register +#define gaim_signal_unregister purple_signal_unregister +#define gaim_signals_unregister_by_instance purple_signals_unregister_by_instance +#define gaim_signal_get_values purple_signal_get_values +#define gaim_signal_connect_priority purple_signal_connect_priority +#define gaim_signal_connect purple_signal_connect +#define gaim_signal_connect_priority_vargs purple_signal_connect_priority_vargs +#define gaim_signal_connect_vargs purple_signal_connect_vargs +#define gaim_signal_disconnect purple_signal_disconnect +#define gaim_signals_disconnect_by_handle purple_signals_disconnect_by_handle +#define gaim_signal_emit purple_signal_emit +#define gaim_signal_emit_vargs purple_signal_emit_vargs +#define gaim_signal_emit_return_1 purple_signal_emit_vargs +#define gaim_signal_emit_vargs_return_1 purple_signal_emit_vargs_return_1 +#define gaim_signals_init purple_signals_init +#define gaim_signals_uninit purple_signals_uninit +#define gaim_marshal_VOID \ +#define gaim_marshal_VOID__INT \ + purple_marshal_VOID__INT +#define gaim_marshal_VOID__INT_INT \ + purple_marshal_VOID_INT_INT +#define gaim_marshal_VOID__POINTER \ + purple_marshal_VOID__POINTER +#define gaim_marshal_VOID__POINTER_UINT \ + purple_marshal_VOID__POINTER_UINT +#define gaim_marshal_VOID__POINTER_INT_INT \ + purple_marshal_VOID__POINTER_INT_INT +#define gaim_marshal_VOID__POINTER_POINTER \ + purple_marshal_VOID__POINTER_POINTER +#define gaim_marshal_VOID__POINTER_POINTER_UINT \ + purple_marshal_VOID__POINTER_POINTER_UINT +#define gaim_marshal_VOID__POINTER_POINTER_UINT_UINT \ + purple_marshal_VOID__POINTER_POINTER_UINT_UINT +#define gaim_marshal_VOID__POINTER_POINTER_POINTER \ + purple_marshal_VOID__POINTER_POINTER_POINTER +#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER \ + purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER +#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER \ + purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER +#define gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT \ + purple_marshal_VOID__POINTER_POINTER_POINTER_UINT +#define gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT \ + purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT +#define gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT \ + purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT +#define gaim_marshal_INT__INT \ + purple_marshal_INT__INT +#define gaim_marshal_INT__INT_INT \ + purple_marshal_INT__INT_INT +#define gaim_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER \ + purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER +#define gaim_marshal_BOOLEAN__POINTER \ + purple_marshal_BOOLEAN__POINTER +#define gaim_marshal_BOOLEAN__POINTER_POINTER \ + purple_marshal_BOOLEAN__POINTER_POINTER +#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER \ + purple_marshal_BOOLEAN__POINTER_POINTER_POINTER +#define gaim_marshal_BOOLEAN__POINTER_POINTER_UINT \ + purple_marshal_BOOLEAN__POINTER_POINTER_UINT +#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT \ + purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT +#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER \ + purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER +#define gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER \ + purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER +#define gaim_marshal_BOOLEAN__INT_POINTER \ + purple_marshal_BOOLEAN__INT_POINTER +#define gaim_marshal_POINTER__POINTER_INT \ + purple_marshal_POINTER__POINTER_INT +#define gaim_marshal_POINTER__POINTER_INT64 \ + purple_marshal_POINTER__POINTER_INT64 +#define gaim_marshal_POINTER__POINTER_INT_BOOLEAN \ + purple_marshal_POINTER__POINTER_INT_BOOLEAN +#define gaim_marshal_POINTER__POINTER_INT64_BOOLEAN \ + purple_marshal_POINTER__POINTER_INT64_BOOLEAN +#define gaim_marshal_POINTER__POINTER_POINTER \ + purple_marshal_POINTER__POINTER_POINTER +#define GAIM_SOUND_BUDDY_ARRIVE PURPLE_SOUND_BUDDY_ARRIVE +#define GAIM_SOUND_BUDDY_LEAVE PURPLE_SOUND_BUDDY_LEAVE +#define GAIM_SOUND_RECEIVE PURPLE_SOUND_RECEIVE +#define GAIM_SOUND_FIRST_RECEIVE PURPLE_SOUND_FIRST_RECEIVE +#define GAIM_SOUND_SEND PURPLE_SOUND_SEND +#define GAIM_SOUND_CHAT_JOIN PURPLE_SOUND_CHAT_JOIN +#define GAIM_SOUND_CHAT_LEAVE PURPLE_SOUND_CHAT_LEAVE +#define GAIM_SOUND_CHAT_YOU_SAY PURPLE_SOUND_CHAT_YOU_SAY +#define GAIM_SOUND_CHAT_SAY PURPLE_SOUND_CHAT_SAY +#define GAIM_SOUND_POUNCE_DEFAULT PURPLE_SOUND_POUNCE_DEFAULT +#define GAIM_SOUND_CHAT_NICK PURPLE_SOUND_CHAT_NICK +#define GAIM_NUM_SOUNDS PURPLE_NUM_SOUNDS +#define GaimSoundEventID PurpleSoundEventID +#define GaimSoundUiOps PurpleSoundUiOps +#define gaim_sound_play_file purple_sound_play_file +#define gaim_sound_play_event purple_sound_play_event +#define gaim_sound_set_ui_ops purple_sound_set_ui_ops +#define gaim_sound_get_ui_ops purple_sound_get_ui_ops +#define gaim_sound_init purple_sound_init +#define gaim_sound_uninit purple_sound_uninit +#define gaim_sounds_get_handle purple_sounds_get_handle +#define GAIM_SSL_DEFAULT_PORT PURPLE_SSL_DEFAULT_PORT +#define GAIM_SSL_HANDSHAKE_FAILED PURPLE_SSL_HANDSHAKE_FAILED +#define GAIM_SSL_CONNECT_FAILED PURPLE_SSL_CONNECT_FAILED +#define GaimSslErrorType PurpleSslErrorType +#define GaimSslConnection PurpleSslConnection +#define GaimSslInputFunction PurpleSslInputFunction +#define GaimSslErrorFunction PurpleSslErrorFunction +#define GaimSslOps PurpleSslOps +#define gaim_ssl_is_supported purple_ssl_is_supported +#define gaim_ssl_connect purple_ssl_connect +#define gaim_ssl_connect_fd purple_ssl_connect_fd +#define gaim_ssl_input_add purple_ssl_input_add +#define gaim_ssl_close purple_ssl_close +#define gaim_ssl_read purple_ssl_read +#define gaim_ssl_write purple_ssl_write +#define gaim_ssl_set_ops purple_ssl_set_ops +#define gaim_ssl_get_ops purple_ssl_get_ops +#define gaim_ssl_init purple_ssl_init +#define gaim_ssl_uninit purple_ssl_uninit +#define GaimStatusType PurpleStatusType +#define GaimStatusAttr PurpleStatusAttr +#define GaimPresence PurplePresence +#define GaimStatus PurpleStatus +#define GAIM_PRESENCE_CONTEXT_UNSET PURPLE_PRESENCE_CONTEXT_UNSET +#define GAIM_PRESENCE_CONTEXT_ACCOUNT PURPLE_PRESENCE_CONTEXT_ACCOUNT +#define GAIM_PRESENCE_CONTEXT_CONV PURPLE_PRESENCE_CONTEXT_CONV +#define GAIM_PRESENCE_CONTEXT_BUDDY PURPLE_PRESENCE_CONTEXT_BUDDY +#define GaimPresenceContext PurplePresenceContext +#define GAIM_STATUS_UNSET PURPLE_STATUS_UNSET +#define GAIM_STATUS_OFFLINE PURPLE_STATUS_OFFLINE +#define GAIM_STATUS_AVAILABLE PURPLE_STATUS_AVAILABLE +#define GAIM_STATUS_UNAVAILABLE PURPLE_STATUS_UNAVAILABLE +#define GAIM_STATUS_INVISIBLE PURPLE_STATUS_INVISIBLE +#define GAIM_STATUS_AWAY PURPLE_STATUS_AWAY +#define GAIM_STATUS_EXTENDED_AWAY PURPLE_STATUS_EXTENDED_AWAY +#define GAIM_STATUS_MOBILE PURPLE_STATUS_MOBILE +#define GAIM_STATUS_NUM_PRIMITIVES PURPLE_STATUS_NUM_PRIMITIVES +#define GaimStatusPrimitive PurpleStatusPrimitive +#define gaim_primitive_get_id_from_type purple_primitive_get_id_from_type +#define gaim_primitive_get_name_from_type purple_primitive_get_name_from_type +#define gaim_primitive_get_type_from_id purple_primitive_get_type_from_id +#define gaim_status_type_new_full purple_status_type_new_full +#define gaim_status_type_new purple_status_type_new +#define gaim_status_type_new_with_attrs purple_status_type_new_with_attrs +#define gaim_status_type_destroy purple_status_type_destroy +#define gaim_status_type_set_primary_attr purple_status_type_set_primary_attr +#define gaim_status_type_add_attr purple_status_type_add_attr +#define gaim_status_type_add_attrs purple_status_type_add_attrs +#define gaim_status_type_add_attrs_vargs purple_status_type_add_attrs_vargs +#define gaim_status_type_get_primitive purple_status_type_get_primitive +#define gaim_status_type_get_id purple_status_type_get_id +#define gaim_status_type_get_name purple_status_type_get_name +#define gaim_status_type_is_saveable purple_status_type_is_saveable +#define gaim_status_type_is_user_settable purple_status_type_is_user_settable +#define gaim_status_type_is_independent purple_status_type_is_independent +#define gaim_status_type_is_exclusive purple_status_type_is_exclusive +#define gaim_status_type_is_available purple_status_type_is_available +#define gaim_status_type_get_primary_attr purple_status_type_get_primary_attr +#define gaim_status_type_get_attr purple_status_type_get_attr +#define gaim_status_type_get_attrs purple_status_type_get_attrs +#define gaim_status_type_find_with_id purple_status_type_find_with_id +#define gaim_status_attr_new purple_status_attr_new +#define gaim_status_attr_destroy purple_status_attr_destroy +#define gaim_status_attr_get_id purple_status_attr_get_id +#define gaim_status_attr_get_name purple_status_attr_get_name +#define gaim_status_attr_get_value purple_status_attr_get_value +#define gaim_status_new purple_status_new +#define gaim_status_destroy purple_status_destroy +#define gaim_status_set_active purple_status_set_active +#define gaim_status_set_active_with_attrs purple_status_set_active_with_attrs +#define gaim_status_set_active_with_attrs_list purple_status_set_active_with_attrs_list +#define gaim_status_set_attr_boolean purple_status_set_attr_boolean +#define gaim_status_set_attr_int purple_status_set_attr_int +#define gaim_status_set_attr_string purple_status_set_attr_string +#define gaim_status_get_type purple_status_get_type +#define gaim_status_get_presence purple_status_get_presence +#define gaim_status_get_id purple_status_get_id +#define gaim_status_get_name purple_status_get_name +#define gaim_status_is_independent purple_status_is_independent +#define gaim_status_is_exclusive purple_status_is_exclusive +#define gaim_status_is_available purple_status_is_available +#define gaim_status_is_active purple_status_is_active +#define gaim_status_is_online purple_status_is_online +#define gaim_status_get_attr_value purple_status_get_attr_value +#define gaim_status_get_attr_boolean purple_status_get_attr_boolean +#define gaim_status_get_attr_int purple_status_get_attr_int +#define gaim_status_get_attr_string purple_status_get_attr_string +#define gaim_status_compare purple_status_compare +#define gaim_presence_new purple_presence_new +#define gaim_presence_new_for_account purple_presence_new_for_account +#define gaim_presence_new_for_conv purple_presence_new_for_conv +#define gaim_presence_new_for_buddy purple_presence_new_for_buddy +#define gaim_presence_destroy purple_presence_destroy +#define gaim_presence_add_status purple_presence_add_status +#define gaim_presence_add_list purple_presence_add_list +#define gaim_presence_set_status_active purple_presence_set_status_active +#define gaim_presence_switch_status purple_presence_switch_status +#define gaim_presence_set_idle purple_presence_set_idle +#define gaim_presence_set_login_time purple_presence_set_login_time +#define gaim_presence_get_context purple_presence_get_context +#define gaim_presence_get_account purple_presence_get_account +#define gaim_presence_get_conversation purple_presence_get_conversation +#define gaim_presence_get_chat_user purple_presence_get_chat_user +#define gaim_presence_get_statuses purple_presence_get_statuses +#define gaim_presence_get_status purple_presence_get_status +#define gaim_presence_get_active_status purple_presence_get_active_status +#define gaim_presence_is_available purple_presence_is_available +#define gaim_presence_is_online purple_presence_is_online +#define gaim_presence_is_status_active purple_presence_is_status_active +#define gaim_presence_is_status_primitive_active \ + purple_presence_is_status_primitive_active +#define gaim_presence_is_idle purple_presence_is_idle +#define gaim_presence_get_idle_time purple_presence_get_idle_time +#define gaim_presence_get_login_time purple_presence_get_login_time +#define gaim_presence_compare purple_presence_compare +#define gaim_status_get_handle purple_status_get_handle +#define gaim_status_init purple_status_init +#define gaim_status_uninit purple_status_uninit +#define GaimStringref PurpleStringref +#define gaim_stringref_new purple_stringref_new +#define gaim_stringref_new_noref purple_stringref_new_noref +#define gaim_stringref_printf purple_stringref_printf +#define gaim_stringref_ref purple_stringref_ref +#define gaim_stringref_unref purple_stringref_unref +#define gaim_stringref_value purple_stringref_value +#define gaim_stringref_cmp purple_stringref_cmp +#define gaim_stringref_len purple_stringref_len +#define GaimStunNatDiscovery PurpleStunNatDiscovery +#define GAIM_STUN_STATUS_UNDISCOVERED PURPLE_STUN_STATUS_UNDISCOVERED +#define GAIM_STUN_STATUS_UNKNOWN PURPLE_STUN_STATUS_UNKNOWN +#define GAIM_STUN_STATUS_DISCOVERING PURPLE_STUN_STATUS_DISCOVERING +#define GAIM_STUN_STATUS_DISCOVERED PURPLE_STUN_STATUS_DISCOVERED +#define GaimStunStatus PurpleStunStatus +#define GAIM_STUN_NAT_TYPE_PUBLIC_IP PURPLE_STUN_NAT_TYPE_PUBLIC_IP +#define GAIM_STUN_NAT_TYPE_UNKNOWN_NAT PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT +#define GAIM_STUN_NAT_TYPE_FULL_CONE PURPLE_STUN_NAT_TYPE_FULL_CONE +#define GAIM_STUN_NAT_TYPE_RESTRICTED_CONE PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE +#define GAIM_STUN_NAT_TYPE_PORT_RESTRICTED_CONE PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE +#define GAIM_STUN_NAT_TYPE_SYMMETRIC PURPLE_STUN_NAT_TYPE_SYMMETRIC +#define GaimStunNatType PurpleStunNatType +/* why didn't this have a Gaim prefix before? */ +#define StunCallback PurpleStunCallback +#define gaim_stun_discover purple_stun_discover +#define gaim_stun_init purple_stun_init +/* suggested rename: PurpleUPnpMappingHandle */ +#define UPnPMappingAddRemove PurpleUPnPMappingAddRemove +#define GaimUPnPCallback PurpleUPnPCallback +#define gaim_upnp_discover purple_upnp_discover +#define gaim_upnp_get_public_ip purple_upnp_get_public_ip +#define gaim_upnp_cancel_port_mapping purple_upnp_cancel_port_mapping +#define gaim_upnp_set_port_mapping purple_upnp_set_port_mapping +#define gaim_upnp_remove_port_mapping purple_upnp_remove_port_mapping +#define GaimUtilFetchUrlData PurpleUtilFetchUrlData +#define GaimMenuAction PurpleMenuAction +#define GaimInfoFieldFormatCallback PurpleIntoFieldFormatCallback +#define GaimKeyValuePair PurpleKeyValuePair +#define gaim_menu_action_new purple_menu_action_new +#define gaim_menu_action_free purple_menu_action_free +#define gaim_base16_encode purple_base16_encode +#define gaim_base16_decode purple_base16_decode +#define gaim_base64_encode purple_base64_encode +#define gaim_base64_decode purple_base64_decode +#define gaim_quotedp_decode purple_quotedp_decode +#define gaim_mime_decode_field purple_mime_deco_field +#define gaim_utf8_strftime purple_utf8_strftime +#define gaim_date_format_short purple_date_format_short +#define gaim_date_format_long purple_date_format_long +#define gaim_date_format_full purple_date_format_full +#define gaim_time_format purple_time_format +#define gaim_time_build purple_time_build +#define GAIM_NO_TZ_OFF PURPLE_NO_TZ_OFF +#define gaim_str_to_time purple_str_to_time +#define gaim_markup_find_tag purple_markup_find_tag +#define gaim_markup_extract_info_field purple_markup_extract_info_field +#define gaim_markup_html_to_xhtml purple_markup_html_to_xhtml +#define gaim_markup_strip_html purple_markup_strip_html +#define gaim_markup_linkify purple_markup_linkify +#define gaim_markup_slice purple_markup_slice +#define gaim_markup_get_tag_name purple_markup_get_tag_name +#define gaim_unescape_html purple_unescape_html +#define gaim_home_dir purple_home_dir +#define gaim_user_dir purple_user_dir +#define gaim_util_set_user_dir purple_util_set_user_dir +#define gaim_build_dir purple_build_dir +#define gaim_util_write_data_to_file purple_util_write_data_to_file +#define gaim_util_read_xml_from_file purple_util_read_xml_from_file +#define gaim_mkstemp purple_mkstemp +#define gaim_program_is_valid purple_program_is_valid +#define gaim_running_gnome purple_running_gnome +#define gaim_running_kde purple_running_kde +#define gaim_running_osx purple_running_osx +#define gaim_fd_get_ip purple_fd_get_ip +#define gaim_normalize purple_normalize +#define gaim_normalize_nocase purple_normalize_nocase +#define gaim_strdup_withhtml purple_strdup_withhtml +#define gaim_str_has_prefix purple_str_has_prefix +#define gaim_str_has_suffix purple_str_has_suffix +#define gaim_str_add_cr purple_str_add_cr +#define gaim_str_strip_char purple_str_strip_char +#define gaim_util_chrreplace purple_util_chrreplace +#define gaim_strreplace purple_strreplace +#define gaim_utf8_ncr_encode purple_utf8_ncr_encode +#define gaim_utf8_ncr_decode purple_utf8_ncr_decode +#define gaim_strcasereplace purple_strcasereplace +#define gaim_strcasestr purple_strcasestr +#define gaim_str_size_to_units purple_str_size_to_units +#define gaim_str_seconds_to_string purple_str_seconds_to_string +#define gaim_str_binary_to_ascii purple_str_binary_to_ascii +#define gaim_got_protocol_handler_uri purple_got_protocol_handler_uri +#define gaim_url_parse purple_url_parse +#define GaimUtilFetchUrlCallback PurpleUtilFetchUrlCallback +#define gaim_util_fetch_url purple_util_fetch_url +#define gaim_util_fetch_url_request purple_util_fetch_url_request +#define gaim_util_fetch_url_cancel purple_util_fetch_url_cancel +#define gaim_url_decode purple_url_decode +#define gaim_url_encode purple_url_encode +#define gaim_email_is_valid purple_email_is_valid +#define gaim_uri_list_extract_uris purple_uri_list_extract_uris +#define gaim_uri_list_extract_filenames purple_uri_list_extract_filenames +#define gaim_utf8_try_convert purple_utf8_try_convert +#define gaim_utf8_salvage purple_utf8_salvage +#define gaim_utf8_strcasecmp purple_utf8_strcasecmp +#define gaim_utf8_has_word purple_utf8_has_word +#define gaim_print_utf8_to_console purple_print_utf8_to_console +#define gaim_message_meify purple_message_meify +#define gaim_text_strip_mnemonic purple_text_strip_mnemonic +#define gaim_unescape_filename purple_unescape_filename +#define gaim_escape_filename purple_escape_filename +#define GAIM_TYPE_UNKNOWN PURPLE_TYPE_UNKNOWN +#define GAIM_TYPE_SUBTYPE PURPLE_TYPE_SUBTYPE +#define GAIM_TYPE_CHAR PURPLE_TYPE_CHAR +#define GAIM_TYPE_UCHAR PURPLE_TYPE_UCHAR +#define GAIM_TYPE_BOOLEAN PURPLE_TYPE_BOOLEAN +#define GAIM_TYPE_SHORT PURPLE_TYPE_SHORT +#define GAIM_TYPE_USHORT PURPLE_TYPE_USHORT +#define GAIM_TYPE_INT PURPLE_TYPE_INT +#define GAIM_TYPE_UINT PURPLE_TYPE_UINT +#define GAIM_TYPE_LONG PURPLE_TYPE_LONG +#define GAIM_TYPE_ULONG PURPLE_TYPE_ULONG +#define GAIM_TYPE_INT64 PURPLE_TYPE_INT64 +#define GAIM_TYPE_UINT64 PURPLE_TYPE_UINT64 +#define GAIM_TYPE_STRING PURPLE_TYPE_STRING +#define GAIM_TYPE_OBJECT PURPLE_TYPE_OBJECT +#define GAIM_TYPE_POINTER PURPLE_TYPE_POINTER +#define GAIM_TYPE_ENUM PURPLE_TYPE_ENUM +#define GAIM_TYPE_BOXED PURPLE_TYPE_BOXED +#define GaimType PurpleType +#define GAIM_SUBTYPE_UNKNOWN PURPLE_SUBTYPE_UNKNOWN +#define GAIM_SUBTYPE_ACCOUNT PURPLE_SUBTYPE_ACCOUNT +#define GAIM_SUBTYPE_BLIST PURPLE_SUBTYPE_BLIST +#define GAIM_SUBTYPE_BLIST_BUDDY PURPLE_SUBTYPE_BLIST_BUDDY +#define GAIM_SUBTYPE_BLIST_GROUP PURPLE_SUBTYPE_BLIST_GROUP +#define GAIM_SUBTYPE_BLIST_CHAT PURPLE_SUBTYPE_BLIST_CHAT +#define GAIM_SUBTYPE_BUDDY_ICON PURPLE_SUBTYPE_BUDDY_ICON +#define GAIM_SUBTYPE_CONNECTION PURPLE_SUBTYPE_CONNECTION +#define GAIM_SUBTYPE_CONVERSATION PURPLE_SUBTYPE_CONVERSATION +#define GAIM_SUBTYPE_PLUGIN PURPLE_SUBTYPE_PLUGIN +#define GAIM_SUBTYPE_BLIST_NODE PURPLE_SUBTYPE_BLIST_NODE +#define GAIM_SUBTYPE_CIPHER PURPLE_SUBTYPE_CIPHER +#define GAIM_SUBTYPE_STATUS PURPLE_SUBTYPE_STATUS +#define GAIM_SUBTYPE_LOG PURPLE_SUBTYPE_LOG +#define GAIM_SUBTYPE_XFER PURPLE_SUBTYPE_XFER +#define GAIM_SUBTYPE_SAVEDSTATUS PURPLE_SUBTYPE_SAVEDSTATUS +#define GAIM_SUBTYPE_XMLNODE PURPLE_SUBTYPE_XMLNODE +#define GAIM_SUBTYPE_USERINFO PURPLE_SUBTYPE_USERINFO +#define GaimSubType PurpleSubType +#define GaimValue PurpleValue +#define gaim_value_new purple_value_new +#define gaim_value_new_outgoing purple_value_new_outgoing +#define gaim_value_destroy purple_value_destroy +#define gaim_value_dup purple_value_dup +#define gaim_value_purple_buddy_icon_get_extensionget_type purple_value_get_type +#define gaim_value_get_subtype purple_value_get_subtype +#define gaim_value_get_specific_type purple_value_get_specific_type +#define gaim_value_is_outgoing purple_value_is_outgoing +#define gaim_value_set_char purple_value_set_char +#define gaim_value_set_uchar purple_value_set_uchar +#define gaim_value_set_boolean purple_value_set_boolean +#define gaim_value_set_short purple_value_set_short +#define gaim_value_set_ushort purple_value_set_ushort +#define gaim_value_set_int purple_value_set_int +#define gaim_value_set_uint purple_value_set_uint +#define gaim_value_set_long purple_value_set_long +#define gaim_value_set_ulong purple_value_set_ulong +#define gaim_value_set_int64 purple_value_set_int64 +#define gaim_value_set_uint64 purple_value_set_uint64 +#define gaim_value_set_string purple_value_set_string +#define gaim_value_set_object purple_value_set_object +#define gaim_value_set_pointer purple_value_set_pointer +#define gaim_value_set_enum purple_value_set_enum +#define gaim_value_set_boxed purple_value_set_boxed +#define gaim_value_get_char purple_value_get_char +#define gaim_value_get_uchar purple_value_get_uchar +#define gaim_value_get_boolean purple_value_get_boolean +#define gaim_value_get_short purple_value_get_short +#define gaim_value_get_ushort purple_value_get_ushort +#define gaim_value_get_int purple_value_get_int +#define gaim_value_get_uint purple_value_get_uint +#define gaim_value_get_long purple_value_get_long +#define gaim_value_get_ulong purple_value_get_ulong +#define gaim_value_get_int64 purple_value_get_int64 +#define gaim_value_get_uint64 purple_value_get_uint64 +#define gaim_value_get_string purple_value_get_string +#define gaim_value_get_object purple_value_get_object +#define gaim_value_get_pointer purple_value_get_pointer +#define gaim_value_get_enum purple_value_get_enum +#define gaim_value_get_boxed purple_value_get_boxed +#define GAIM_MAJOR_VERSION PURPLE_MAJOR_VERSION +#define GAIM_MINOR_VERSION PURPLE_MINOR_VERSION +#define GAIM_MICRO_VERSION PURPLE_MICRO_VERSION +#define GAIM_VERSION_CHECK PURPLE_VERSION_CHECK +#define GaimWhiteboardPrplOps PurpleWhiteboardPrplOps +#define GaimWhiteboard PurpleWhiteboard +#define GaimWhiteboardUiOps PurpleWhiteboardUiOps +#define gaim_whiteboard_set_ui_ops purple_whiteboard_set_ui_ops +#define gaim_whiteboard_set_prpl_ops purple_whiteboard_set_prpl_ops +#define gaim_whiteboard_create purple_whiteboard_create +#define gaim_whiteboard_destroy purple_whiteboard_destroy +#define gaim_whiteboard_start purple_whiteboard_start +#define gaim_whiteboard_get_session purple_whiteboard_get_session +#define gaim_whiteboard_draw_list_destroy purple_whiteboard_draw_list_destroy +#define gaim_whiteboard_get_dimensions purple_whiteboard_get_dimensions +#define gaim_whiteboard_set_dimensions purple_whiteboard_set_dimensions +#define gaim_whiteboard_draw_point purple_whiteboard_draw_point +#define gaim_whiteboard_send_draw_list purple_whiteboard_send_draw_list +#define gaim_whiteboard_draw_line purple_whiteboard_draw_line +#define gaim_whiteboard_clear purple_whiteboard_clear +#define gaim_whiteboard_send_clear purple_whiteboard_send_clear +#define gaim_whiteboard_send_brush purple_whiteboard_send_brush +#define gaim_whiteboard_get_brush purple_whiteboard_get_brush +#define gaim_whiteboard_set_brush purple_whiteboard_set_brush +/* for static plugins */ +#define gaim_init_ssl_plugin purple_init_ssl_plugin +#define gaim_init_ssl_openssl_plugin purple_init_ssl_openssl_plugin +#define gaim_init_ssl_gnutls_plugin purple_init_ssl_gnutls_plugin +#define gaim_init_gg_plugin purple_init_gg_plugin +#define gaim_init_jabber_plugin purple_init_jabber_plugin +#define gaim_init_sametime_plugin purple_init_sametime_plugin +#define gaim_init_msn_plugin purple_init_msn_plugin +#define gaim_init_novell_plugin purple_init_novell_plugin +#define gaim_init_qq_plugin purple_init_qq_plugin +#define gaim_init_simple_plugin purple_init_simple_plugin +#define gaim_init_yahoo_plugin purple_init_yahoo_plugin +#define gaim_init_zephyr_plugin purple_init_zephyr_plugin +#define gaim_init_aim_plugin purple_init_aim_plugin +#define gaim_init_icq_plugin purple_init_icq_plugin +#endif /* _GAIM_COMPAT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/gg.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,72 @@
+ * Copyright (C) 2005 Bartosz Oler <bartosz@bzimage.us> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define PUBDIR_RESULTS_MAX 20 +typedef void (*GGPTokenCallback)(PurpleConnection *); + struct gg_session *session; + GList *pending_richtext_messages; + GHashTable *pending_images; + gboolean status_broadcasting; //When TRUE status is visible to all, when FALSE status is visible only to friends. +#endif /* _PURPLE_GG_H */ +/* vim: set ts=8 sts=0 sw=8 noet: */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/group.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,109 @@
+ * @file group.h Group functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnGroup MsnGroup; +#define MSN_INDIVIDUALS_GROUP_ID "1983" +#define MSN_INDIVIDUALS_GROUP_NAME _("Other Contacts") +#define MSN_NON_IM_GROUP_ID "email" +#define MSN_NON_IM_GROUP_NAME _("Non-IM Contacts") + MsnSession *session; /**< The MSN session. */ + char *id; /**< The group ID. */ + char *name; /**< The name of the group. */ +/************************************************************************** + **************************************************************************/ + * Creates a new group structure. + * @param session The MSN session. + * @param id The group ID. + * @param name The name of the group. + * @return A new group structure. +MsnGroup *msn_group_new(MsnUserList *userlist, const char *id, const char *name); + * Destroys a group structure. + * @param group The group to destroy. +void msn_group_destroy(MsnGroup *group); + * Sets the ID for a group. + * @param group The group. +void msn_group_set_id(MsnGroup *group, const char *id); + * Sets the name for a group. + * @param group The group. + * @param name The name. +void msn_group_set_name(MsnGroup *group, const char *name); + * Returns the ID for a group. + * @param group The group. +char* msn_group_get_id(const MsnGroup *group); + * Returns the name for a group. + * @param group The group. +const char *msn_group_get_name(const MsnGroup *group); +#endif /* MSN_GROUP_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/history.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,50 @@
+ * @file history.h MSN history functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnHistory MsnHistory; +#include "transaction.h" +#define MSN_NS_HIST_ELEMS 0x300 +#define MSN_SB_HIST_ELEMS 0x30 +MsnHistory *msn_history_new(void); +void msn_history_destroy(MsnHistory *history); +MsnTransaction *msn_history_find(MsnHistory *history, unsigned int triId); +void msn_history_add(MsnHistory *history, MsnTransaction *trans); +#endif /* MSN_HISTORY_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/httpconn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,112 @@
+ * @file httpconn.h HTTP connection + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnHttpConn MsnHttpConn; + MsnSession *session; /**< The MSN Session. */ + MsnServConn *servconn; /**< The connection object. */ + PurpleProxyConnectData *connect_data; + char *full_session_id; /**< The full session id. */ + char *session_id; /**< The trimmed session id. */ + int timer; /**< The timer for polling. */ + gboolean waiting_response; /**< The flag that states if we are waiting + a response from the server. */ + gboolean connected; /**< The flag that states if the connection is on. */ + gboolean virgin; /**< The flag that states if this connection + should specify the host (not gateway) to + char *host; /**< The HTTP gateway host. */ + GList *queue; /**< The queue of data chunks to write. */ + int fd; /**< The connection's file descriptor. */ + guint inpa; /**< The connection's input handler. */ + char *rx_buf; /**< The receive buffer. */ + int rx_len; /**< The receive buffer length. */ + PurpleCircBuffer *tx_buf; + * Creates a new HTTP connection object. + * @param servconn The connection object. + * @return The new object. +MsnHttpConn *msn_httpconn_new(MsnServConn *servconn); + * Destroys an HTTP connection object. + * @param httpconn The HTTP connection object. +void msn_httpconn_destroy(MsnHttpConn *httpconn); + * Writes a chunk of data to the HTTP connection. + * @param servconn The server connection. + * @param data The data to write. + * @param data_len The size of the data to write. + * @return The number of bytes written. +gssize msn_httpconn_write(MsnHttpConn *httpconn, const char *data, size_t data_len); + * Connects the HTTP connection object to a host. + * @param httpconn The HTTP connection object. + * @param host The host to connect to. + * @param port The port to connect to. +gboolean msn_httpconn_connect(MsnHttpConn *httpconn, + const char *host, int port); + * Disconnects the HTTP connection object. + * @param httpconn The HTTP connection object. +void msn_httpconn_disconnect(MsnHttpConn *httpconn); +#endif /* MSN_HTTPCONN_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/idle.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,104 @@
+ * @file idle.h Idle API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + time_t (*get_time_idle)(void); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/**************************************************************************/ + * Touch our idle tracker. This signifies that the user is + * 'active'. The conversation code calls this when the + * user sends an IM, for example. +void purple_idle_touch(void); + * Fake our idle time by setting the time at which our + * accounts purportedly became idle. This is used by + * the I'dle Mak'er plugin. +void purple_idle_set(time_t time); +/**************************************************************************/ +/** @name Idle Subsystem */ +/**************************************************************************/ + * Sets the UI operations structure to be used for idle reporting. + * @param ops The UI operations structure. +void purple_idle_set_ui_ops(PurpleIdleUiOps *ops); + * Returns the UI operations structure used for idle reporting. + * @return The UI operations structure in use. +PurpleIdleUiOps *purple_idle_get_ui_ops(void); + * Initializes the idle system. +void purple_idle_init(void); + * Uninitializes the idle system. +void purple_idle_uninit(void); +#endif /* _PURPLE_IDLE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/imgstore.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,230 @@
+ * @file imgstore.h IM Image Store API + * @see @ref imgstore-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_IMGSTORE_H_ +#define _PURPLE_IMGSTORE_H_ + * A set of utility functions that provide a reference-counted immutable + * wrapper around an image's data and filename. These functions do not + * cache any data to disk. +typedef struct _PurpleStoredImage PurpleStoredImage; + * Create a new PurpleStoredImage. + * Despite the name of this function, the image is NOT added to the image + * store and no ID is assigned. If you need to reference the image by an + * ID, use purple_imgstore_add_with_id() instead. + * The caller owns a reference to this image and must dereference it with + * purple_imgstore_unref() for it to be freed. + * @param data Pointer to the image data, which the imgstore will take + * ownership of and free as appropriate. If you want a + * copy of the data, make it before calling this function. + * @param size Image data's size. + * @param filename Filename associated with image. This is for your + * convenience. It could be the full path to the + * image or, more commonly, the filename of the image + * without any directory information. It can also be + * NULL, if you don't need to keep track of a filename. + * @return The stored image, or NULL if the image was not added (because of +purple_imgstore_add(gpointer data, size_t size, const char *filename); + * Create a PurpleStoredImage using purple_imgstore_add() by reading the + * given filename from disk. + * The image is not added to the image store and no ID is assigned. If you + * need to reference the image by an ID, use purple_imgstore_add_with_id() + * The caller owns a reference to this image and must dereference it with + * purple_imgstore_unref() for it to be freed. + * @param path The path to the image. + * @return The stored image, or NULL if the image was not added (because of +purple_imgstore_new_from_file(const char *path); + * Create a PurpleStoredImage using purple_imgstore_add() and add the + * image to the image store. A unique ID will be assigned to the image. + * The caller owns a reference to the image and must dereference it with + * purple_imgstore_unref() or purple_imgstore_unref_by_id() for it to be + * @param data Pointer to the image data, which the imgstore will take + * ownership of and free as appropriate. If you want a + * copy of the data, make it before calling this function. + * @param size Image data's size. + * @param filename Filename associated with image. This is for your + * convenience. It could be the full path to the + * image or, more commonly, the filename of the image + * without any directory information. It can also be + * NULL, if you don't need to keep track of a filename. + * @return ID for the image. This is a unique number that can be used + * within libpurple to reference the image. 0 is returned if the + * image was not added (because of empty data or size). +int purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename); + * Retrieve an image from the store. The caller does not own a + * reference to the image. + * @param id The ID for the image. + * @return A pointer to the requested image, or NULL if it was not found. +PurpleStoredImage *purple_imgstore_find_by_id(int id); + * Retrieves a pointer to the image's data. + * @param img The Image. + * @return A pointer to the data, which must not + * be freed or modified. +gconstpointer purple_imgstore_get_data(PurpleStoredImage *img); + * Retrieves the length of the image's data. + * @param img The Image. + * @return The size of the data that the pointer returned by + * purple_imgstore_get_data points to. +size_t purple_imgstore_get_size(PurpleStoredImage *img); + * Retrieves a pointer to the image's filename. + * @param img The image. + * @return A pointer to the filename, which must not + * be freed or modified. +const char *purple_imgstore_get_filename(const PurpleStoredImage *img); + * Looks at the magic numbers of the image data (the first few bytes) + * and returns an extension corresponding to the image's file type. + * @param img The image. + * @return The image's extension (for example "png") or "icon" +const char *purple_imgstore_get_extension(PurpleStoredImage *img); + * Increment the reference count. + * @param img The image. +purple_imgstore_ref(PurpleStoredImage *img); + * Decrement the reference count. + * If the reference count reaches zero, the image will be freed. + * @param img The image. + * @return @a img or @c NULL if the reference count reached zero. +purple_imgstore_unref(PurpleStoredImage *img); + * Increment the reference count using an ID. + * This is a convience wrapper for purple_imgstore_find_by_id() and + * purple_imgstore_ref(), so if you have a PurpleStoredImage, it'll + * be more efficient to call purple_imgstore_ref() directly. + * @param id The ID for the image. +void purple_imgstore_ref_by_id(int id); + * Decrement the reference count using an ID. + * This is a convience wrapper for purple_imgstore_find_by_id() and + * purple_imgstore_unref(), so if you have a PurpleStoredImage, it'll + * be more efficient to call purple_imgstore_unref() directly. + * @param id The ID for the image. +void purple_imgstore_unref_by_id(int id); + * Returns the image store subsystem handle. + * @return The subsystem handle. +void *purple_imgstore_get_handle(void); + * Initializes the image store subsystem. +void purple_imgstore_init(void); + * Uninitializes the image store subsystem. +void purple_imgstore_uninit(void); +#endif /* _PURPLE_IMGSTORE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/internal.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,229 @@
+ * @file internal.h Internal definitions and includes + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_INTERNAL_H_ +#define _PURPLE_INTERNAL_H_ +/* for SIOCGIFCONF in SKYOS */ +#include <net/sockios.h> + * If we're using NLS, make sure gettext works. If not, then define + * dummy macros in place of the normal gettext macros. + * Also, the perl XS config.h file sometimes defines _ So we need to + * make sure _ isn't already defined before trying to define it. + * The Singular/Plural/Number ngettext dummy definition below was + * taken from an email to the texinfo mailing list by Manuel Guerrero. + * Thank you Manuel, and thank you Alex's good friend Google. +# define _(String) ((const char *)dgettext(PACKAGE, String)) +# define N_(String) gettext_noop (String) +# define N_(String) (String) +# define N_(String) (String) +# define _(String) ((const char *)String) +# define ngettext(Singular, Plural, Number) ((Number == 1) ? ((const char *)Singular) : ((const char *)Plural)) +# define dngettext(Domain, Singular, Plural, Number) ((Number == 1) ? ((const char *)Singular) : ((const char *)Plural)) +/* The above should normally be the same as BUF_LEN, + * but just so we're explicitly asking for the max message +#define BUF_LONG BUF_LEN * 2 +#ifdef HAVE_LANGINFO_CODESET +# include <netinet/in.h> +# include <sys/socket.h> +# include <sys/utsname.h> +# define HOST_NAME_MAX 255 +/* This wasn't introduced until Glib 2.14 :( */ +# if GLIB_SIZEOF_LONG == 8 +# define G_MAXSSIZE ((gssize) 0x7fffffffffffffff) +# define G_MAXSSIZE ((gssize) 0x7fffffff) +#include <glib/gstdio.h> +# define PURPLE_TIME_T_MODIFIER "lu" +#elif SIZEOF_TIME_T == 8 +# define PURPLE_TIME_T_MODIFIER "zu" +#error Unknown size of time_t +#include <glib-object.h> +/* Safer ways to work with static buffers. When using non-static + * buffers, either use g_strdup_* functions (preferred) or use + * g_strlcpy/g_strlcpy directly. */ +#define purple_strlcpy(dest, src) g_strlcpy(dest, src, sizeof(dest)) +#define purple_strlcat(dest, src) g_strlcat(dest, src, sizeof(dest)) +#define PURPLE_WEBSITE "http://pidgin.im/" +#define PURPLE_DEVEL_WEBSITE "http://developer.pidgin.im/" +/* INTERNAL FUNCTIONS */ +/* This is for the accounts code to notify the buddy icon code that + * it's done loading. We may want to replace this with a signal. */ +_purple_buddy_icons_account_loaded_cb(void); +/* This is for the buddy list to notify the buddy icon code that + * it's done loading. We may want to replace this with a signal. */ +_purple_buddy_icons_blist_loaded_cb(void); +/* This is for the purple_core_migrate() code to tell the buddy + * icon subsystem about the old icons directory so it can + * migrate any icons in use. */ +_purple_buddy_icon_set_old_icons_dir(const char *dirname); + * Creates a connection to the specified account and either connects + * or attempts to register a new account. If you are logging in, + * the connection uses the current active status for this account. + * So if you want to sign on as "away," for example, you need to + * have called purple_account_set_status(account, "away"). + * (And this will call purple_account_connect() automatically). + * @note This function should only be called by purple_account_connect() + * in account.c. If you're trying to sign on an account, use that + * @param account The account the connection should be connecting to. + * @param regist Whether we are registering a new account or just + * trying to do a normal signon. + * @param password The password to use. +void _purple_connection_new(PurpleAccount *account, gboolean regist, + * Tries to unregister the account on the server. If the account is not + * connected, also creates a new connection. + * @note This function should only be called by purple_account_unregister() + * @param account The account to unregister + * @param password The password to use. + * @param cb Optional callback to be called when unregistration is complete + * @param user_data user data to pass to the callback +void _purple_connection_new_unregister(PurpleAccount *account, const char *password, + PurpleAccountUnregistrationCb cb, void *user_data); + * Disconnects and destroys a PurpleConnection. + * @note This function should only be called by purple_account_disconnect() + * in account.c. If you're trying to sign off an account, use that + * @param gc The purple connection to destroy. +void _purple_connection_destroy(PurpleConnection *gc); +#endif /* _PURPLE_INTERNAL_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/iq.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,116 @@
+ * @file iq.h JabberID handlers + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_IQ_H_ +#define PURPLE_JABBER_IQ_H_ +typedef struct _JabberIq JabberIq; + * A JabberIqHandler is called to process an incoming IQ stanza. + * Handlers typically process unsolicited incoming GETs or SETs for their + * registered namespace, but may be called to handle the results of a + * GET or SET that we generated if no JabberIqCallback was generated + * The handler may be called for the results of a GET or SET (RESULT or ERROR) + * if the generating function did not register a JabberIqCallback. + * @param js The JabberStream object. + * @param from The remote entity (the from attribute on the <iq/> stanza) + * @param type The IQ type. + * @param id The IQ id (the id attribute on the <iq/> stanza) + * @param child The child element of the <iq/> stanza that matches the name + * and namespace registered with jabber_iq_register_handler. + * @see jabber_iq_register_handler() + * @see JabberIqCallback +typedef void (JabberIqHandler)(JabberStream *js, const char *from, + JabberIqType type, const char *id, + * A JabberIqCallback is called to process the results of a GET or SET that + * we send to a remote entity. The callback is matched based on the id + * of the incoming stanza (which matches the one on the initial stanza). + * @param js The JabberStream object. + * @param from The remote entity (the from attribute on the <iq/> stanza) + * @param type The IQ type. The only possible values are JABBER_IQ_RESULT + * @param id The IQ id (the id attribute on the <iq/> stanza) + * @param packet The <iq/> stanza + * @param data The callback data passed to jabber_iq_set_callback() + * @see jabber_iq_set_callback() +typedef void (JabberIqCallback)(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *packet, gpointer data); + JabberIqCallback *callback; + gpointer callback_data; +JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type); +JabberIq *jabber_iq_new_query(JabberStream *js, JabberIqType type, +void jabber_iq_parse(JabberStream *js, xmlnode *packet); +void jabber_iq_remove_callback_by_id(JabberStream *js, const char *id); +void jabber_iq_set_callback(JabberIq *iq, JabberIqCallback *cb, gpointer data); +void jabber_iq_set_id(JabberIq *iq, const char *id); +void jabber_iq_send(JabberIq *iq); +void jabber_iq_free(JabberIq *iq); +void jabber_iq_init(void); +void jabber_iq_uninit(void); +void jabber_iq_register_handler(const char *node, const char *xmlns, + JabberIqHandler *func); +/* Connected to namespace-handler registration signals */ +void jabber_iq_signal_register(const gchar *node, const gchar *xmlns); +void jabber_iq_signal_unregister(const gchar *node, const gchar *xmlns); +#endif /* PURPLE_JABBER_IQ_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/irc.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,224 @@
+ * Copyright (C) 2003, 2012 Ethan Blanton <elb@pidgin.im> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define IRC_DEFAULT_SERVER "irc.freenode.net" +#define IRC_DEFAULT_PORT 6667 +#define IRC_DEFAULT_SSL_PORT 994 +#define IRC_DEFAULT_CHARSET "UTF-8" +#define IRC_DEFAULT_AUTODETECT FALSE +#define IRC_DEFAULT_ALIAS "purple" +#define IRC_DEFAULT_QUIT "Leaving." +#define IRC_INITIAL_BUFSIZE 1024 +#define IRC_NAMES_FLAG "irc-namelist" +enum { IRC_USEROPT_SERVER, IRC_USEROPT_PORT, IRC_USEROPT_CHARSET }; +enum irc_state { IRC_STATE_NEW, IRC_STATE_ESTABLISHED }; + PurpleAccount *account; + gboolean ison_outstanding; + GList *buddies_outstanding; + PurpleRoomlist *roomlist; + PurpleSslConnection *gsc; + PurpleCircBuffer *outbuf; + sasl_conn_t *sasl_conn; + const char *current_mech; + sasl_callback_t *sasl_cb; + gboolean new_online_status; +typedef int (*IRCCmdCallback) (struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_send(struct irc_conn *irc, const char *buf); +int irc_send_len(struct irc_conn *irc, const char *buf, int len); +gboolean irc_blist_timeout(struct irc_conn *irc); +gboolean irc_who_channel_timeout(struct irc_conn *irc); +void irc_buddy_query(struct irc_conn *irc); +char *irc_escape_privmsg(const char *text, gssize length); +char *irc_mirc2html(const char *string); +char *irc_mirc2txt(const char *string); +const char *irc_nick_skip_mode(struct irc_conn *irc, const char *string); +gboolean irc_ischannel(const char *string); +void irc_register_commands(void); +void irc_msg_table_build(struct irc_conn *irc); +void irc_parse_msg(struct irc_conn *irc, char *input); +char *irc_parse_ctcp(struct irc_conn *irc, const char *from, const char *to, const char *msg, int notice); +char *irc_format(struct irc_conn *irc, const char *format, ...); +void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_away(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_badmode(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_badnick(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_ban(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_banfull(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_banned(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_invite(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_inviteonly(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_ison(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_join(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_list(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_luser(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_mode(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_motd(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_names(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nick(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nickused(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nochan(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nonick(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nochangenick(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_nosend(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_notice(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_notop(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_ping(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_privmsg(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_topicinfo(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_who(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_cap(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_auth(struct irc_conn *irc, char *arg); +void irc_msg_authok(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_authtryagain(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_authfail(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_ignore(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_cmd_table_build(struct irc_conn *irc); +int irc_cmd_default(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_away(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_ctcp(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_ctcp_action(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_ctcp_version(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_invite(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_join(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_kick(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_list(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_mode(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_names(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_nick(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_op(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_privmsg(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_part(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_ping(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_quit(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_quote(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_query(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_remove(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_service(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_time(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_topic(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_wallops(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_whois(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +PurpleXfer *irc_dccsend_new_xfer(PurpleConnection *gc, const char *who); +void irc_dccsend_send_file(PurpleConnection *gc, const char *who, const char *file); +void irc_dccsend_recv(struct irc_conn *irc, const char *from, const char *msg); +#endif /* _PURPLE_IRC_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/jabber.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,423 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_H_ +#define PURPLE_JABBER_H_ +/* JABBER_CAP_XHTML = 1 << 0, */ +/* JABBER_CAP_COMPOSING = 1 << 1, */ + JABBER_CAP_SI = 1 << 2, + JABBER_CAP_SI_FILE_XFER = 1 << 3, + JABBER_CAP_BYTESTREAMS = 1 << 4, + JABBER_CAP_IBB = 1 << 5, + JABBER_CAP_CHAT_STATES = 1 << 6, + JABBER_CAP_IQ_SEARCH = 1 << 7, + JABBER_CAP_IQ_REGISTER = 1 << 8, + /* Google Talk extensions: + * http://code.google.com/apis/talk/jep_extensions/extensions.html + JABBER_CAP_GMAIL_NOTIFY = 1 << 9, + JABBER_CAP_GOOGLE_ROSTER = 1 << 10, + JABBER_CAP_PING = 1 << 11, + JABBER_CAP_ADHOC = 1 << 12, + JABBER_CAP_BLOCKING = 1 << 13, + JABBER_CAP_ITEMS = 1 << 14, + JABBER_CAP_ROSTER_VERSIONING = 1 << 15, + JABBER_CAP_RETRIEVED = 1 << 31 +typedef struct _JabberStream JabberStream; +#include <libxml/parser.h> +#include "mediamanager.h" +#define CAPS0115_NODE "http://pidgin.im/" +#define JABBER_DEFAULT_REQUIRE_TLS "require_starttls" +#define JABBER_DEFAULT_FT_PROXIES "proxy.eu.jabber.org" +/* Index into attention_types list */ + JABBER_STREAM_CONNECTING, + JABBER_STREAM_INITIALIZING, + JABBER_STREAM_INITIALIZING_ENCRYPTION, + JABBER_STREAM_AUTHENTICATING, + JABBER_STREAM_POST_AUTH, + JABBER_STREAM_CONNECTED + PurpleSrvTxtQueryData *srv_query_data; + xmlParserCtxt *context; + JabberSaslMech *auth_mech; + gpointer auth_mech_data; + * The header from the opening <stream/> tag. This being NULL is treated + * as a special condition in the parsing code (signifying the next + * stanza started is an opening stream tag), and its being missing on + * the stream header is treated as a fatal error. + JabberStreamState state; + * This boolean was added to eliminate a heinous bug where we would + * get into a loop with the server and move a buddy back and forth + * from one group to another. + * The sequence goes something like this: + * 1. Our resource and another resource both approve an authorization + * request at the exact same time. We put the buddy in group A and + * the other resource put the buddy in group B. + * 2. The server receives the roster add for group B and sends us a + * 3. We receive this roster push and modify our local blist. This + * triggers us to send a roster add for group B. + * 4. The server recieves our earlier roster add for group A and sends + * 5. We receive this roster push and modify our local blist. This + * triggers us to send a roster add for group A. + * 6. The server receives our earlier roster add for group B and sends + * (repeat steps 3 through 6 ad infinitum) + * This boolean is used to short-circuit the sending of a roster add + * when we receive a roster push. + * See these bug reports: + * http://trac.adiumx.com/ticket/8834 + * http://developer.pidgin.im/ticket/5484 + * http://developer.pidgin.im/ticket/6188 + gboolean currently_parsing_roster_push; + PurpleRoomlist *roomlist; + GList *user_directories; + GHashTable *iq_callbacks; + GList *oob_file_transfers; + /** When we last pinged the server, so we don't ping more + * often than once every minute. + PurpleSslConnection *gsc; + char *initial_avatar_hash; + GSList *pending_avatar_requests; + GSList *pending_buddy_info_requests; + PurpleCircBuffer *write_buffer; + JabberCapabilities server_caps; + sasl_callback_t *sasl_cb; + sasl_secret_t *sasl_secret; + const char *current_mech; + gboolean unregistration; + PurpleAccountUnregistrationCb unregistration_cb; + void *unregistration_user_data; + gboolean vcard_fetched; + /* Timer at login to push updated avatar */ + /* Entity Capabilities hash */ + /* does the local server support PEP? */ + /* A list of JabberAdHocCommands supported by the server */ + /* last presence update to check for differences */ + JabberBuddyState old_state; + /* same for user tune */ + /* A purple timeout tag for the keepalive */ + guint keepalive_timeout; + guint inactivity_timer; + PurpleSrvResponse *srv_rec; + PurpleBOSHConnection *bosh; + * This linked list contains PurpleUtilFetchUrlData structs + * for when we lookup buddy icons from a url + /* keep a hash table of JingleSessions */ + /* maybe this should only be present when USE_VV? */ + PurpleDnsQueryData *stun_query; + /* stuff for Google's relay handling */ + gchar *google_relay_token; + gchar *google_relay_host; + GList *google_relay_requests; /* the HTTP requests to get */ +typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *namespace); +typedef struct _JabberFeature + JabberFeatureEnabled *is_enabled; +typedef struct _JabberIdentity +typedef struct _JabberBytestreamsStreamhost { +} JabberBytestreamsStreamhost; +/* what kind of additional features as returned from disco#info are supported? */ +extern GList *jabber_features; +/* A sorted list of identities advertised. Use jabber_add_identity to add + * so it remains sorted. +extern GList *jabber_identities; +void jabber_stream_features_parse(JabberStream *js, xmlnode *packet); +void jabber_process_packet(JabberStream *js, xmlnode **packet); +void jabber_send(JabberStream *js, xmlnode *data); +void jabber_send_raw(JabberStream *js, const char *data, int len); +void jabber_send_signal_cb(PurpleConnection *pc, xmlnode **packet, +void jabber_stream_set_state(JabberStream *js, JabberStreamState state); +void jabber_register_parse(JabberStream *js, const char *from, + JabberIqType type, const char *id, xmlnode *query); +void jabber_register_start(JabberStream *js); +char *jabber_get_next_id(JabberStream *js); +/** Parse an error into a human-readable string and optionally a disconnect + * @param js the stream on which the error occurred. + * @param packet the error packet + * @param reason where to store the disconnection reason, or @c NULL if you + * don't care or you don't intend to close the connection. +char *jabber_parse_error(JabberStream *js, xmlnode *packet, PurpleConnectionError *reason); + * Add a feature to the list of features advertised via disco#info. If you + * call this while accounts are connected, Bad Things(TM) will happen because + * the Entity Caps hash will be out-of-date (which should be fixed :/) + * @param namespace The namespace of the feature + * @param cb A callback determining whether or not this feature + * will advertised; may be NULL. +void jabber_add_feature(const gchar *namespace, JabberFeatureEnabled cb); +void jabber_remove_feature(const gchar *namespace); +/** Adds an identity to this jabber library instance. For list of valid values + * visit the website of the XMPP Registrar + * (http://www.xmpp.org/registrar/disco-categories.html#client). + * Like with jabber_add_feature, if you call this while accounts are connected, + * Bad Things will happen. + * @param category the category of the identity. + * @param type the type of the identity. + * @param language the language localization of the name. Can be NULL. + * @param name the name of the identity. +void jabber_add_identity(const gchar *category, const gchar *type, const gchar *lang, const gchar *name); + * GCompareFunc for JabberIdentity structs. +gint jabber_identity_compare(gconstpointer a, gconstpointer b); + * Returns true if this connection is over a secure (SSL) stream. Use this + * instead of checking js->gsc because BOSH stores its PurpleSslConnection + * members in its own data structure. +gboolean jabber_stream_is_ssl(JabberStream *js); + * Restart the "we haven't sent anything in a while and should send + * something or the server will kick us off" timer (obviously + * called when sending something. It's exposed for BOSH.) +void jabber_stream_restart_inactivity_timer(JabberStream *js); +const char *jabber_list_icon(PurpleAccount *a, PurpleBuddy *b); +const char* jabber_list_emblem(PurpleBuddy *b); +char *jabber_status_text(PurpleBuddy *b); +void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full); +GList *jabber_status_types(PurpleAccount *account); +void jabber_login(PurpleAccount *account); +void jabber_close(PurpleConnection *gc); +void jabber_idle_set(PurpleConnection *gc, int idle); +void jabber_blocklist_parse_push(JabberStream *js, const char *from, + JabberIqType type, const char *id, +void jabber_request_block_list(JabberStream *js); +void jabber_add_deny(PurpleConnection *gc, const char *who); +void jabber_rem_deny(PurpleConnection *gc, const char *who); +void jabber_keepalive(PurpleConnection *gc); +void jabber_register_gateway(JabberStream *js, const char *gateway); +void jabber_register_account(PurpleAccount *account); +void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data); +gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code); +GList *jabber_attention_types(PurpleAccount *account); +void jabber_convo_closed(PurpleConnection *gc, const char *who); +PurpleChat *jabber_find_blist_chat(PurpleAccount *account, const char *name); +gboolean jabber_offline_message(const PurpleBuddy *buddy); +int jabber_prpl_send_raw(PurpleConnection *gc, const char *buf, int len); +GList *jabber_actions(PurplePlugin *plugin, gpointer context); +gboolean jabber_audio_enabled(JabberStream *js, const char *unused); +gboolean jabber_video_enabled(JabberStream *js, const char *unused); +gboolean jabber_initiate_media(PurpleAccount *account, const char *who, + PurpleMediaSessionType type); +PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who); +gboolean jabber_can_receive_file(PurpleConnection *gc, const gchar *who); +void jabber_plugin_init(PurplePlugin *plugin); +void jabber_plugin_uninit(PurplePlugin *plugin); +#endif /* PURPLE_JABBER_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/jutil.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,90 @@
+ * @file jutil.h utility functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_JUTIL_H_ +#define PURPLE_JABBER_JUTIL_H_ +typedef struct _JabberID { + JABBER_BUDDY_STATE_UNKNOWN = -2, + JABBER_BUDDY_STATE_ERROR = -1, + JABBER_BUDDY_STATE_UNAVAILABLE = 0, + JABBER_BUDDY_STATE_ONLINE, + JABBER_BUDDY_STATE_CHAT, + JABBER_BUDDY_STATE_AWAY, +JabberID* jabber_id_new(const char *str); +void jabber_id_free(JabberID *jid); +char *jabber_get_domain(const char *jid); +char *jabber_get_resource(const char *jid); +char *jabber_get_bare_jid(const char *jid); +char *jabber_id_get_bare_jid(const JabberID *jid); +gboolean jabber_jid_is_domain(const char *jid); +const char *jabber_normalize(const PurpleAccount *account, const char *in); +/* Returns true if JID is the bare JID of our server. */ +gboolean jabber_is_own_server(JabberStream *js, const char *jid); +/* Returns true if JID is the bare JID of our account. */ +gboolean jabber_is_own_account(JabberStream *js, const char *jid); +gboolean jabber_nodeprep_validate(const char *); +gboolean jabber_domain_validate(const char *); +gboolean jabber_resourceprep_validate(const char *); + * Apply the SASLprep profile of stringprep to the string passed in. + * @returns A newly allocated string containing the normalized version + * of the input, or NULL if an error occurred (the string could +char *jabber_saslprep(const char *); +/* state -> readable name */ +const char *jabber_buddy_state_get_name(JabberBuddyState state); +const char *jabber_buddy_state_get_status_id(JabberBuddyState state); +/* state -> show attr (for presence stanza) */ +const char *jabber_buddy_state_get_show(JabberBuddyState state); +JabberBuddyState jabber_buddy_status_id_get_state(const char *id); +/* show attr (presence stanza) -> state */ +JabberBuddyState jabber_buddy_show_get_state(const char *id); +char *jabber_calculate_data_hash(gconstpointer data, size_t len, + const gchar *hash_algo); +#endif /* PURPLE_JABBER_JUTIL_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/libgadu.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,2319 @@
+/* $Id: libgadu.h.in 1105 2011-05-25 21:34:50Z wojtekka $ */ + * (C) Copyright 2001-2009 Wojtek Kaniewski <wojtekka@irc.pl> + * Robert J. Woźny <speedy@ziew.org> + * Arkadiusz Miśkiewicz <arekm@pld-linux.org> + * Tomasz Chiliński <chilek@chilan.com> + * Piotr Wysocki <wysek@linux.bydg.org> + * Dawid Jarosz <dawjar@poczta.onet.pl> + * Jakub Zawadzki <darkjames@darkjames.ath.cx> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License Version + * 2.1 as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, + * \brief Główny plik nagłówkowy biblioteki +/* Defined if libgadu was compiled for bigendian machine. */ +#undef GG_CONFIG_BIGENDIAN +/* Defined if this machine has gethostbyname_r(). */ +#undef GG_CONFIG_HAVE_GETHOSTBYNAME_R +/* Defined if libgadu was compiled and linked with pthread support. */ +#undef GG_CONFIG_HAVE_PTHREAD +/* Defined if pthread resolver is the default one. */ +#undef GG_CONFIG_PTHREAD_DEFAULT +/* Defined if this machine has C99-compiliant vsnprintf(). */ +#undef GG_CONFIG_HAVE_C99_VSNPRINTF +/* Defined if this machine has va_copy(). */ +#undef GG_CONFIG_HAVE_VA_COPY +/* Defined if this machine has __va_copy(). */ +#undef GG_CONFIG_HAVE___VA_COPY +/* Defined if this machine supports long long. */ +#undef GG_CONFIG_HAVE_LONG_LONG +/* Defined if libgadu was compiled and linked with GnuTLS support. */ +#undef GG_CONFIG_HAVE_GNUTLS +/* Defined if libgadu was compiled and linked with OpenSSL support. */ +#undef GG_CONFIG_HAVE_OPENSSL +/* Defined if libgadu was compiled and linked with zlib support. */ +#undef GG_CONFIG_HAVE_ZLIB +/* Defined if uintX_t types are defined in <stdint.h>. */ +#undef GG_CONFIG_HAVE_STDINT_H +/* Defined if uintX_t types are defined in <inttypes.h>. */ +#undef GG_CONFIG_HAVE_INTTYPES_H +/* Defined if uintX_t types are defined in <sys/inttypes.h>. */ +#undef GG_CONFIG_HAVE_SYS_INTTYPES_H +/* Defined if uintX_t types are defined in <sys/int_types.h>. */ +#undef GG_CONFIG_HAVE_SYS_INT_TYPES_H +/* Defined if uintX_t types are defined in <sys/types.h>. */ +#undef GG_CONFIG_HAVE_SYS_TYPES_H +#ifdef GG_CONFIG_HAVE_OPENSSL +#include <openssl/ssl.h> +#ifdef GG_CONFIG_HAVE_STDINT_H +# ifdef GG_CONFIG_HAVE_INTTYPES_H +# ifdef GG_CONFIG_HAVE_SYS_INTTYPES_H +# include <sys/inttypes.h> +# ifdef GG_CONFIG_HAVE_SYS_INT_TYPES_H +# include <sys/int_types.h> +# ifdef GG_CONFIG_HAVE_SYS_TYPES_H +/* ISO C 9X: 7.18 Integer types <stdint.h> */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#if !defined(__CYGWIN__) && !defined(__SunOS) && !defined(_INCLUDE_HPUX_SOURCE) +#define __int8_t_defined +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +#endif /* __AC_STDINT_H */ + * Identyfikator połączenia bezpośredniego Gadu-Gadu 7.x. + * Identyfikator sesji multilogowania. + * Makro deklarujące pola wspólne dla struktur sesji. +#define gg_common_head(x) \ + int fd; /**< Obserwowany deskryptor */ \ + int check; /**< Informacja o żądaniu odczytu/zapisu (patrz \ref gg_check_t) */ \ + int state; /**< Aktualny stan połączenia (patrz \ref gg_state_t) */ \ + int error; /**< Kod błędu dla \c GG_STATE_ERROR (patrz \ref gg_error_t) */ \ + int type; /**< Rodzaj sesji (patrz \ref gg_session_t) */ \ + int id; /**< Identyfikator sesji */ \ + int timeout; /**< Czas pozostały do zakończenia stanu */ \ + int (*callback)(x*); /**< Funkcja zwrotna */ \ + void (*destroy)(x*); /**< Funkcja zwalniania zasobów */ + * Struktura wspólna dla wszystkich sesji i połączeń. Pozwala na proste + * rzutowanie niezależne od rodzaju połączenia. + gg_common_head(struct gg_common) + * Sposób rozwiązywania nazw serwerów. + GG_RESOLVER_DEFAULT = 0, /**< Domyślny sposób rozwiązywania nazw (jeden z poniższych) */ + GG_RESOLVER_FORK, /**< Rozwiązywanie nazw bazujące na procesach */ + GG_RESOLVER_PTHREAD, /**< Rozwiązywanie nazw bazujące na wątkach */ + GG_RESOLVER_CUSTOM, /**< Funkcje rozwiązywania nazw dostarczone przed aplikację */ + GG_RESOLVER_INVALID = -1 /**< Nieprawidłowy sposób rozwiązywania nazw (wynik \c gg_session_get_resolver) */ + * Rodzaj kodowania znaków. + GG_ENCODING_CP1250 = 0, /**< Kodowanie CP1250 */ + GG_ENCODING_UTF8, /**< Kodowanie UTF-8 */ + GG_ENCODING_INVALID = -1 /**< Nieprawidłowe kodowanie */ + * Tworzona przez funkcję \c gg_login(), zwalniana przez \c gg_free_session(). + gg_common_head(struct gg_session) + int async; /**< Flaga połączenia asynchronicznego */ + int pid; /**< Numer procesu rozwiązującego nazwę serwera */ + int port; /**< Port serwera */ + int seq; /**< Numer sekwencyjny ostatniej wiadomości */ + int last_pong; /**< Czas otrzymania ostatniej ramki utrzymaniowej */ + int last_event; /**< Czas otrzymania ostatniego pakietu */ + struct gg_event *event; /**< Zdarzenie po wywołaniu \c callback */ + uint32_t proxy_addr; /**< Adres serwera pośredniczącego */ + uint16_t proxy_port; /**< Port serwera pośredniczącego */ + uint32_t hub_addr; /**< Adres huba po rozwiązaniu nazwy */ + uint32_t server_addr; /**< Adres serwera otrzymany od huba */ + uint32_t client_addr; /**< Adres gniazda dla połączeń bezpośrednich */ + uint16_t client_port; /**< Port gniazda dla połączeń bezpośrednich */ + uint32_t external_addr; /**< Publiczny adres dla połączeń bezpośrednich */ + uint16_t external_port; /**< Publiczny port dla połączeń bezpośrednich */ + uin_t uin; /**< Własny numer Gadu-Gadu */ + char *password; /**< Hasło (zwalniane po użyciu) */ + int initial_status; /**< Początkowy status */ + int status; /**< Aktualny status */ + char *recv_buf; /**< Bufor na odbierany pakiety */ + int recv_done; /**< Liczba wczytanych bajtów pakietu */ + int recv_left; /**< Liczba pozostałych do wczytania bajtów pakietu */ + int protocol_version; /**< Wersja protokołu (bez flag) */ + char *client_version; /**< Wersja klienta */ + int last_sysmsg; /**< Numer ostatniej wiadomości systemowej */ + char *initial_descr; /**< Początkowy opis statusu */ + void *resolver; /**< Dane prywatne procesu lub wątku rozwiązującego nazwę serwera */ + char *header_buf; /**< Bufor na początek nagłówka pakietu */ + unsigned int header_done; /**< Liczba wczytanych bajtów nagłówka pakietu */ +#ifdef GG_CONFIG_HAVE_OPENSSL + SSL *ssl; /**< Struktura TLS */ + SSL_CTX *ssl_ctx; /**< Kontekst sesji TLS */ + void *ssl; /**< Struktura TLS */ + void *ssl_ctx; /**< Kontekst sesji TLS */ + int image_size; /**< Maksymalny rozmiar obsługiwanych obrazków w KiB */ + char *userlist_reply; /**< Bufor z odbieraną listą kontaktów */ + int userlist_blocks; /**< Liczba części listy kontaktów */ + struct gg_image_queue *images; /**< Lista wczytywanych obrazków */ + int hash_type; /**< Rodzaj funkcji skrótu hasła (\c GG_LOGIN_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1) */ + char *send_buf; /**< Bufor z danymi do wysłania */ + int send_left; /**< Liczba bajtów do wysłania */ + struct gg_dcc7 *dcc7_list; /**< Lista połączeń bezpośrednich skojarzonych z sesją */ + int soft_timeout; /**< Flaga mówiąca, że po przekroczeniu \c timeout należy wywołać \c gg_watch_fd() */ + int protocol_flags; /**< Flagi protokołu */ + gg_encoding_t encoding; /**< Rodzaj kodowania znaków */ + gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw serwerów */ + int (*resolver_start)(int *fd, void **private_data, const char *hostname); /**< Funkcja rozpoczynająca rozwiązywanie nazwy */ + void (*resolver_cleanup)(void **private_data, int force); /**< Funkcja zwalniająca zasoby po rozwiązaniu nazwy */ + int protocol_features; /**< Opcje protokołu */ + int status_flags; /**< Flagi statusu */ + int recv_msg_count; /**< Liczba odebranych wiadomości */ + * Tworzone przez \c gg_http_connect(), zwalniane przez \c gg_http_free(). + gg_common_head(struct gg_http) + int async; /**< Flaga połączenia asynchronicznego */ + int pid; /**< Identyfikator procesu rozwiązującego nazwę serwera */ + char *query; /**< Zapytanie HTTP */ + char *header; /**< Odebrany nagłówek */ + int header_size; /**< Rozmiar wczytanego nagłówka */ + char *body; /**< Odebrana strona */ + unsigned int body_size; /**< Rozmiar strony */ + void *data; /**< Dane prywatne usługi HTTP */ + char *user_data; /**< Dane prywatne użytkownika (nie są zwalniane) */ + void *resolver; /**< Dane prywatne procesu lub wątku rozwiązującego nazwę */ + unsigned int body_done; /**< Liczba odebranych bajtów strony */ + gg_resolver_t resolver_type; /**< Sposób rozwiązywania nazw serwerów */ + int (*resolver_start)(int *fd, void **private_data, const char *hostname); /**< Funkcja rozpoczynająca rozwiązywanie nazwy */ + void (*resolver_cleanup)(void **private_data, int force); /**< Funkcja zwalniająca zasoby po rozwiązaniu nazwy */ +#define GG_PACKED __attribute__ ((packed)) +#ifndef GG_IGNORE_DEPRECATED +#define GG_DEPRECATED __attribute__ ((deprecated)) +#define GG_MAX_PATH 276 /**< Maksymalny rozmiar nazwy pliku w strukturze \c gg_file_info */ + * Odpowiednik struktury WIN32_FIND_DATA z API WIN32. + * Wykorzystywana przy połączeniach bezpośrednich do wersji Gadu-Gadu 6.x. + uint32_t mode; /**< dwFileAttributes */ + uint32_t ctime[2]; /**< ftCreationTime */ + uint32_t atime[2]; /**< ftLastAccessTime */ + uint32_t mtime[2]; /**< ftLastWriteTime */ + uint32_t size_hi; /**< nFileSizeHigh */ + uint32_t size; /**< nFileSizeLow */ + uint32_t reserved0; /**< dwReserved0 */ + uint32_t reserved1; /**< dwReserved1 */ + unsigned char filename[GG_MAX_PATH - 14]; /**< cFileName */ + unsigned char short_filename[14]; /**< cAlternateFileName */ +} /** \cond ignore */ GG_PACKED /** \endcond */; + * Połączenie bezpośrednie do wersji Gadu-Gadu 6.x. + * Tworzone przez \c gg_dcc_socket_create(), \c gg_dcc_get_file(), + * \c gg_dcc_send_file() lub \c gg_dcc_voice_chat(), zwalniane przez + gg_common_head(struct gg_dcc) + struct gg_event *event; /**< Zdarzenie po wywołaniu \c callback */ + int active; /**< Flaga połączenia aktywnego (nieużywana) */ + int port; /**< Port gniazda nasłuchującego */ + uin_t uin; /**< Własny numer Gadu-Gadu */ + uin_t peer_uin; /**< Numer Gadu-Gadu drugiej strony połączenia */ + int file_fd; /**< deskryptor pliku */ + unsigned int offset; /**< Położenie w pliku */ + unsigned int chunk_size; + /**< Rozmiar kawałka pliku */ + unsigned int chunk_offset; + /**< Położenie w aktualnym kawałku pliku */ + struct gg_file_info file_info; + /**< Informacje o pliku */ + int established; /**< Flaga ustanowienia połączenia */ + char *voice_buf; /**< Bufor na pakiet połączenia głosowego */ + int incoming; /**< Flaga połączenia przychodzącego */ + char *chunk_buf; /**< Bufor na fragment danych */ + uint32_t remote_addr; /**< Adres drugiej strony */ + uint16_t remote_port; /**< Port drugiej strony */ +#define GG_DCC7_HASH_LEN 20 /**< Maksymalny rozmiar skrótu pliku w połączeniach bezpośrenich */ +#define GG_DCC7_FILENAME_LEN 255 /**< Maksymalny rozmiar nazwy pliku w połączeniach bezpośrednich */ +#define GG_DCC7_INFO_LEN 32 /**< Maksymalny rozmiar informacji o połączeniach bezpośrednich */ +#define GG_DCC7_INFO_HASH_LEN 32 /**< Maksymalny rozmiar skrótu ip informacji o połączeniach bezpośrednich */ + * Połączenie bezpośrednie od wersji Gadu-Gadu 7.x. + gg_common_head(struct gg_dcc7) + gg_dcc7_id_t cid; /**< Identyfikator połączenia */ + struct gg_event *event; /**< Struktura zdarzenia */ + uin_t uin; /**< Własny numer Gadu-Gadu */ + uin_t peer_uin; /**< Numer Gadu-Gadu drugiej strony połączenia */ + int file_fd; /**< Deskryptor przesyłanego pliku */ + unsigned int offset; /**< Aktualne położenie w przesyłanym pliku */ + unsigned int size; /**< Rozmiar przesyłanego pliku */ + unsigned char filename[GG_DCC7_FILENAME_LEN + 1]; + /**< Nazwa przesyłanego pliku */ + unsigned char hash[GG_DCC7_HASH_LEN]; + /**< Skrót SHA1 przesyłanego pliku */ + int dcc_type; /**< Rodzaj połączenia bezpośredniego */ + int established; /**< Flaga ustanowienia połączenia */ + int incoming; /**< Flaga połączenia przychodzącego */ + int reverse; /**< Flaga połączenia zwrotnego */ + uint32_t local_addr; /**< Adres lokalny */ + uint16_t local_port; /**< Port lokalny */ + uint32_t remote_addr; /**< Adres drugiej strony */ + uint16_t remote_port; /**< Port drugiej strony */ + struct gg_session *sess; + /**< Sesja do której przypisano połączenie */ + struct gg_dcc7 *next; /**< Następne połączenie w liście */ + int soft_timeout; /**< Flaga mówiąca, że po przekroczeniu \c timeout należy wywołać \c gg_dcc7_watch_fd() */ + int seek; /**< Flaga mówiąca, że można zmieniać położenie w wysyłanym pliku */ + void *resolver; /**< Dane prywatne procesu lub wątku rozwiązującego nazwę serwera */ + int relay; /**< Flaga mówiąca, że laczymy sie przez serwer */ + int relay_index; /**< Numer serwera pośredniczącego, do którego się łączymy */ + int relay_count; /**< Rozmiar listy serwerów pośredniczących */ + struct gg_dcc7_relay *relay_list; /**< Lista serwerów pośredniczących */ + GG_SESSION_GG = 1, /**< Połączenie z serwerem Gadu-Gadu */ + GG_SESSION_HTTP, /**< Połączenie HTTP */ + GG_SESSION_SEARCH, /**< Wyszukiwanie w katalogu publicznym (nieaktualne) */ + GG_SESSION_REGISTER, /**< Rejestracja nowego konta */ + GG_SESSION_REMIND, /**< Przypominanie hasła */ + GG_SESSION_PASSWD, /**< Zmiana hasła */ + GG_SESSION_CHANGE, /**< Zmiana informacji w katalogu publicznym (nieaktualne) */ + GG_SESSION_DCC, /**< Połączenie bezpośrednie (do wersji 6.x) */ + GG_SESSION_DCC_SOCKET, /**< Gniazdo nasłuchujące (do wersji 6.x) */ + GG_SESSION_DCC_SEND, /**< Wysyłanie pliku (do wersji 6.x) */ + GG_SESSION_DCC_GET, /**< Odbieranie pliku (do wersji 6.x) */ + GG_SESSION_DCC_VOICE, /**< Rozmowa głosowa (do wersji 6.x) */ + GG_SESSION_USERLIST_GET, /**< Import listy kontaktów z serwera (nieaktualne) */ + GG_SESSION_USERLIST_PUT, /**< Eksport listy kontaktów do serwera (nieaktualne) */ + GG_SESSION_UNREGISTER, /**< Usuwanie konta */ + GG_SESSION_USERLIST_REMOVE, /**< Usuwanie listy kontaktów z serwera (nieaktualne) */ + GG_SESSION_TOKEN, /**< Pobieranie tokenu */ + GG_SESSION_DCC7_SOCKET, /**< Gniazdo nasłuchujące (od wersji 7.x) */ + GG_SESSION_DCC7_SEND, /**< Wysyłanie pliku (od wersji 7.x) */ + GG_SESSION_DCC7_GET, /**< Odbieranie pliku (od wersji 7.x) */ + GG_SESSION_DCC7_VOICE, /**< Rozmowa głosowa (od wersji 7.x) */ + GG_SESSION_USER0 = 256, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER1, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER2, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER3, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER4, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER5, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER6, /**< Rodzaj zadeklarowany dla użytkownika */ + GG_SESSION_USER7 /**< Rodzaj zadeklarowany dla użytkownika */ + GG_STATE_IDLE = 0, /**< Nie dzieje się nic */ + GG_STATE_RESOLVING, /**< Oczekiwanie na rozwiązanie nazwy serwera */ + GG_STATE_CONNECTING, /**< Oczekiwanie na połączenie */ + GG_STATE_READING_DATA, /**< Oczekiwanie na dane */ + GG_STATE_ERROR, /**< Kod błędu w polu \c error */ + GG_STATE_CONNECTING_HUB, /**< Oczekiwanie na połączenie z hubem */ + GG_STATE_CONNECTING_GG, /**< Oczekiwanie na połączenie z serwerem */ + GG_STATE_READING_KEY, /**< Oczekiwanie na klucz */ + GG_STATE_READING_REPLY, /**< Oczekiwanie na odpowiedź serwera */ + GG_STATE_CONNECTED, /**< Połączono z serwerem */ + GG_STATE_SENDING_QUERY, /**< Wysłano zapytanie HTTP */ + GG_STATE_READING_HEADER, /**< Oczekiwanie na nagłówek HTTP */ + GG_STATE_PARSING, /**< Przetwarzanie danych */ + GG_STATE_DONE, /**< Połączenie zakończone */ + GG_STATE_LISTENING, /* czeka na połączenia */ + GG_STATE_READING_UIN_1, /* czeka na uin peera */ + GG_STATE_READING_UIN_2, /* czeka na swój uin */ + GG_STATE_SENDING_ACK, /* wysyła potwierdzenie dcc */ + GG_STATE_READING_ACK, /* czeka na potwierdzenie dcc */ + GG_STATE_READING_REQUEST, /* czeka na komendę */ + GG_STATE_SENDING_REQUEST, /* wysyła komendę */ + GG_STATE_SENDING_FILE_INFO, /* wysyła informacje o pliku */ + GG_STATE_READING_PRE_FILE_INFO, /* czeka na pakiet przed file_info */ + GG_STATE_READING_FILE_INFO, /* czeka na informacje o pliku */ + GG_STATE_SENDING_FILE_ACK, /* wysyła potwierdzenie pliku */ + GG_STATE_READING_FILE_ACK, /* czeka na potwierdzenie pliku */ + GG_STATE_SENDING_FILE_HEADER, /* wysyła nagłówek pliku */ + GG_STATE_READING_FILE_HEADER, /* czeka na nagłówek */ + GG_STATE_GETTING_FILE, /* odbiera plik */ + GG_STATE_SENDING_FILE, /* wysyła plik */ + GG_STATE_READING_VOICE_ACK, /* czeka na potwierdzenie voip */ + GG_STATE_READING_VOICE_HEADER, /* czeka na rodzaj bloku voip */ + GG_STATE_READING_VOICE_SIZE, /* czeka na rozmiar bloku voip */ + GG_STATE_READING_VOICE_DATA, /* czeka na dane voip */ + GG_STATE_SENDING_VOICE_ACK, /* wysyła potwierdzenie voip */ + GG_STATE_SENDING_VOICE_REQUEST, /* wysyła żądanie voip */ + GG_STATE_READING_TYPE, /* czeka na typ połączenia */ + /* nowe. bez sensu jest to API. */ + GG_STATE_TLS_NEGOTIATION, /**< Negocjacja połączenia szyfrowanego */ + GG_STATE_REQUESTING_ID, /**< Oczekiwanie na nadanie identyfikatora połączenia bezpośredniego */ + GG_STATE_WAITING_FOR_ACCEPT, /**< Oczekiwanie na potwierdzenie lub odrzucenie połączenia bezpośredniego */ + GG_STATE_WAITING_FOR_INFO, /**< Oczekiwanie na informacje o połączeniu bezpośrednim */ + GG_STATE_READING_ID, /**< Odebranie identyfikatora połączenia bezpośredniego */ + GG_STATE_SENDING_ID, /**< Wysłano identyfikator połączenia bezpośredniego */ + GG_STATE_RESOLVING_GG, /**< Oczekiwanie na rozwiązanie nazwy serwera Gadu-Gadu */ + GG_STATE_RESOLVING_RELAY, /**< Oczekiwanie na rozwiązanie nazwy serwera pośredniczącego */ + GG_STATE_CONNECTING_RELAY, /**< Oczekiwanie na połączenie z serwerem pośredniczącym */ + GG_STATE_READING_RELAY, /**< Odbieranie danych */ + GG_STATE_DISCONNECTING, /**< Oczekiwanie na potwierdzenie rozłączenia */ + * Informacja o tym, czy biblioteka chce zapisywać i/lub czytać + * z deskryptora. Maska bitowa. + GG_CHECK_NONE = 0, /**< Nie sprawdzaj niczego */ + GG_CHECK_WRITE = 1, /**< Sprawdź możliwość zapisu */ + GG_CHECK_READ = 2 /**< Sprawdź możliwość odczytu */ + * Flaga połączenia szyfrowanego. + GG_SSL_DISABLED = 0, /**< Połączenie SSL wyłączone */ + GG_SSL_ENABLED, /**< Połączenie SSL włączone gdy dostępne */ + GG_SSL_REQUIRED /**< Połączenie SSL wymagane */ + * Parametry połączenia z serwerem Gadu-Gadu. Parametry zostały przeniesione + * do struktury, by uniknąć zmian API po rozszerzeniu protokołu i dodaniu + * kolejnych opcji połączenia. Część parametrów, które nie są już aktualne + * lub nie mają znaczenia, została usunięta z dokumentacji. +struct gg_login_params { + uin_t uin; /**< Numer Gadu-Gadu */ + char *password; /**< Hasło */ + int async; /**< Flaga asynchronicznego połączenia (domyślnie nie) */ + int status; /**< Początkowy status użytkownika (domyślnie \c GG_STATUS_AVAIL) */ + char *status_descr; /**< Początkowy opis użytkownika (domyślnie brak) */ + uint32_t server_addr; /**< Adres serwera Gadu-Gadu (domyślnie pobierany automatycznie) */ + uint16_t server_port; /**< Port serwera Gadu-Gadu (domyślnie pobierany automatycznie) */ + uint32_t client_addr; /**< Adres połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + uint16_t client_port; /**< Port połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + int protocol_version; /**< Wersja protokołu wysyłana do serwera (domyślnie najnowsza obsługiwana) */ + char *client_version; /**< Wersja klienta wysyłana do serwera (domyślnie najnowsza znana) */ + int has_audio; /**< Flaga obsługi połączeń głosowych */ + int last_sysmsg; /**< Numer ostatnio odebranej wiadomości systemowej */ + uint32_t external_addr; /**< Adres publiczny dla połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + uint16_t external_port; /**< Port publiczny dla połączeń bezpośrednich (domyślnie dobierany automatycznie) */ + int tls; /**< Flaga połączenia szyfrowanego (patrz \ref gg_ssl_t) */ + int image_size; /**< Maksymalny rozmiar obsługiwanych obrazków w kilobajtach */ + int era_omnix; /**< Flaga udawania klienta Era Omnix (nieaktualna) */ + int hash_type; /**< Rodzaj skrótu hasła (\c GG_LOGIN_HASH_GG32 lub \c GG_LOGIN_HASH_SHA1, domyślnie SHA1) */ + gg_encoding_t encoding; /**< Rodzaj kodowania używanego w sesji (domyślnie CP1250) */ + gg_resolver_t resolver; /**< Sposób rozwiązywania nazw (patrz \ref build-resolver) */ + int protocol_features; /**< Opcje protokołu (flagi GG_FEATURE_*). */ + int status_flags; /**< Flagi statusu (flagi GG_STATUS_FLAG_*, patrz \ref status). */ + char dummy[1 * sizeof(int)]; /**< \internal Miejsce na kilka kolejnych + parametrów, żeby wraz z dodawaniem kolejnych + parametrów nie zmieniał się rozmiar struktury */ +struct gg_session *gg_login(const struct gg_login_params *p); +void gg_free_session(struct gg_session *sess); +void gg_logoff(struct gg_session *sess); +int gg_change_status(struct gg_session *sess, int status); +int gg_change_status_descr(struct gg_session *sess, int status, const char *descr); +int gg_change_status_descr_time(struct gg_session *sess, int status, const char *descr, int time); +int gg_change_status_flags(struct gg_session *sess, int flags); +int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message); +int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, const unsigned char *format, int formatlen); +int gg_send_message_confer(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message); +int gg_send_message_confer_richtext(struct gg_session *sess, int msgclass, int recipients_count, uin_t *recipients, const unsigned char *message, const unsigned char *format, int formatlen); +int gg_send_message_ctcp(struct gg_session *sess, int msgclass, uin_t recipient, const unsigned char *message, int message_len); +int gg_ping(struct gg_session *sess); +int gg_userlist_request(struct gg_session *sess, char type, const char *request); +int gg_userlist100_request(struct gg_session *sess, char type, unsigned int version, char format_type, const char *request); +int gg_image_request(struct gg_session *sess, uin_t recipient, int size, uint32_t crc32); +int gg_image_reply(struct gg_session *sess, uin_t recipient, const char *filename, const char *image, int size); +int gg_typing_notification(struct gg_session *sess, uin_t recipient, int length); +uint32_t gg_crc32(uint32_t crc, const unsigned char *buf, int len); +int gg_session_set_resolver(struct gg_session *gs, gg_resolver_t type); +gg_resolver_t gg_session_get_resolver(struct gg_session *gs); +int gg_session_set_custom_resolver(struct gg_session *gs, int (*resolver_start)(int*, void**, const char*), void (*resolver_cleanup)(void**, int)); +int gg_http_set_resolver(struct gg_http *gh, gg_resolver_t type); +gg_resolver_t gg_http_get_resolver(struct gg_http *gh); +int gg_http_set_custom_resolver(struct gg_http *gh, int (*resolver_start)(int*, void**, const char*), void (*resolver_cleanup)(void**, int)); +int gg_global_set_resolver(gg_resolver_t type); +gg_resolver_t gg_global_get_resolver(void); +int gg_global_set_custom_resolver(int (*resolver_start)(int*, void**, const char*), void (*resolver_cleanup)(void**, int)); +int gg_multilogon_disconnect(struct gg_session *gs, gg_multilogon_id_t conn_id); + GG_EVENT_NONE = 0, /**< Nie wydarzyło się nic wartego uwagi */ + GG_EVENT_MSG, /**< \brief Otrzymano wiadomość. Przekazuje również wiadomości systemowe od numeru 0. */ + GG_EVENT_NOTIFY, /**< \brief Informacja o statusach osób z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowane. */ + GG_EVENT_NOTIFY_DESCR, /**< \brief Informacja o statusie opisowym osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. */ + GG_EVENT_STATUS, /**< \brief Zmiana statusu osoby z listy kontaktów (przed 6.0). Zdarzenie należy obsługiwać, jeśli planuje się używać protokołu w wersji starszej niż domyślna. */ + GG_EVENT_ACK, /**< Potwierdzenie doręczenia wiadomości */ + GG_EVENT_PONG, /**< \brief Utrzymanie połączenia. Obecnie serwer nie wysyła już do klienta ramek utrzymania połączenia, polega wyłącznie na wysyłaniu ramek przez klienta. */ + GG_EVENT_CONN_FAILED, /**< \brief Nie udało się połączyć */ + GG_EVENT_CONN_SUCCESS, /**< \brief Połączono z serwerem. Pierwszą rzeczą, jaką należy zrobić jest wysłanie listy kontaktów. */ + GG_EVENT_DISCONNECT, /**< \brief Serwer zrywa połączenie. Zdarza się, gdy równolegle do serwera podłączy się druga sesja i trzeba zerwać połączenie z pierwszą. */ + GG_EVENT_DCC_NEW, /**< Nowe połączenie bezpośrednie (6.x) */ + GG_EVENT_DCC_ERROR, /**< Błąd połączenia bezpośredniego (6.x) */ + GG_EVENT_DCC_DONE, /**< Zakończono połączenie bezpośrednie (6.x) */ + GG_EVENT_DCC_CLIENT_ACCEPT, /**< Moment akceptacji klienta w połączeniu bezpośrednim (6.x) */ + GG_EVENT_DCC_CALLBACK, /**< Zwrotne połączenie bezpośrednie (6.x) */ + GG_EVENT_DCC_NEED_FILE_INFO, /**< Należy wypełnić \c file_info dla połączenia bezpośredniego (6.x) */ + GG_EVENT_DCC_NEED_FILE_ACK, /**< Czeka na potwierdzenie pliku w połączeniu bezpośrednim (6.x) */ + GG_EVENT_DCC_NEED_VOICE_ACK, /**< Czeka na potwierdzenie rozmowy w połączeniu bezpośrednim (6.x) */ + GG_EVENT_DCC_VOICE_DATA, /**< Dane bezpośredniego połączenia głosowego (6.x) */ + GG_EVENT_PUBDIR50_SEARCH_REPLY, /**< Odpowiedź katalogu publicznego */ + GG_EVENT_PUBDIR50_READ, /**< Odczytano własne dane z katalogu publicznego */ + GG_EVENT_PUBDIR50_WRITE, /**< Zmieniono własne dane w katalogu publicznym */ + GG_EVENT_STATUS60, /**< Zmiana statusu osoby z listy kontaktów */ + GG_EVENT_NOTIFY60, /**< Informacja o statusach osób z listy kontaktów. Ostatni element tablicy zawiera uin równy 0, a pozostałe pola są niezainicjowane. */ + GG_EVENT_USERLIST, /**< Wynik importu lub eksportu listy kontaktów */ + GG_EVENT_IMAGE_REQUEST, /**< Żądanie przesłania obrazka z wiadomości */ + GG_EVENT_IMAGE_REPLY, /**< Przysłano obrazek z wiadomości */ + GG_EVENT_DCC_ACK, /**< Potwierdzenie transmisji w połączeniu bezpośrednim (6.x) */ + GG_EVENT_DCC7_NEW, /**< Nowe połączenie bezpośrednie (7.x) */ + GG_EVENT_DCC7_ACCEPT, /**< Zaakceptowano połączenie bezpośrednie (7.x), nowy deskryptor */ + GG_EVENT_DCC7_REJECT, /**< Odrzucono połączenie bezpośrednie (7.x) */ + GG_EVENT_DCC7_CONNECTED, /**< Zestawiono połączenie bezpośrednie (7.x), nowy deskryptor */ + GG_EVENT_DCC7_ERROR, /**< Błąd połączenia bezpośredniego (7.x) */ + GG_EVENT_DCC7_DONE, /**< Zakończono połączenie bezpośrednie (7.x) */ + GG_EVENT_DCC7_PENDING, /**< Trwa próba połączenia bezpośredniego (7.x), nowy deskryptor */ + GG_EVENT_XML_EVENT, /**< Otrzymano komunikat systemowy (7.7) */ + GG_EVENT_DISCONNECT_ACK, /**< \brief Potwierdzenie zakończenia sesji. Informuje o tym, że zmiana stanu na niedostępny z opisem dotarła do serwera i można zakończyć połączenie TCP. */ + GG_EVENT_TYPING_NOTIFICATION, /**< Powiadomienie o pisaniu */ + GG_EVENT_USER_DATA, /**< Informacja o kontaktach */ + GG_EVENT_MULTILOGON_MSG, /**< Wiadomość wysłana z innej sesji multilogowania */ + GG_EVENT_MULTILOGON_INFO, /**< Informacja o innych sesjach multilogowania */ + GG_EVENT_USERLIST100_VERSION, /**< Otrzymano numer wersji listy kontaktów na serwerze (10.0) */ + GG_EVENT_USERLIST100_REPLY, /**< Wynik importu lub eksportu listy kontaktów (10.0) */ +#define GG_EVENT_SEARCH50_REPLY GG_EVENT_PUBDIR50_SEARCH_REPLY + * Powód nieudanego połączenia. + GG_FAILURE_RESOLVING = 1, /**< Nie znaleziono serwera */ + GG_FAILURE_CONNECTING, /**< Błąd połączenia */ + GG_FAILURE_INVALID, /**< Serwer zwrócił nieprawidłowe dane */ + GG_FAILURE_READING, /**< Zerwano połączenie podczas odczytu */ + GG_FAILURE_WRITING, /**< Zerwano połączenie podczas zapisu */ + GG_FAILURE_PASSWORD, /**< Nieprawidłowe hasło */ + GG_FAILURE_404, /**< Nieużywane */ + GG_FAILURE_TLS, /**< Błąd negocjacji szyfrowanego połączenia */ + GG_FAILURE_NEED_EMAIL, /**< Serwer rozłączył nas z prośbą o zmianę adresu e-mail */ + GG_FAILURE_INTRUDER, /**< Zbyt wiele prób połączenia z nieprawidłowym hasłem */ + GG_FAILURE_UNAVAILABLE, /**< Serwery są wyłączone */ + GG_FAILURE_PROXY, /**< Błąd serwera pośredniczącego */ + GG_FAILURE_HUB, /**< Błąd połączenia z hubem */ + * Kod błędu danej operacji. + * Nie zawiera przesadnie szczegółowych informacji o powodach błędów, by nie + * komplikować ich obsługi. Jeśli wymagana jest większa dokładność, należy + * sprawdzić zawartość zmiennej systemowej \c errno. + GG_ERROR_RESOLVING = 1, /**< Nie znaleziono hosta */ + GG_ERROR_CONNECTING, /**< Błąd połączenia */ + GG_ERROR_READING, /**< Błąd odczytu/odbierania */ + GG_ERROR_WRITING, /**< Błąd zapisu/wysyłania */ + GG_ERROR_DCC_HANDSHAKE, /**< Błąd negocjacji */ + GG_ERROR_DCC_FILE, /**< Błąd odczytu/zapisu pliku */ + GG_ERROR_DCC_EOF, /**< Przedwczesny koniec pliku */ + GG_ERROR_DCC_NET, /**< Błąd wysyłania/odbierania */ + GG_ERROR_DCC_REFUSED, /**< Połączenie odrzucone */ + GG_ERROR_DCC7_HANDSHAKE, /**< Błąd negocjacji */ + GG_ERROR_DCC7_FILE, /**< Błąd odczytu/zapisu pliku */ + GG_ERROR_DCC7_EOF, /**< Przedwczesny koniec pliku */ + GG_ERROR_DCC7_NET, /**< Błąd wysyłania/odbierania */ + GG_ERROR_DCC7_REFUSED, /**< Połączenie odrzucone */ + GG_ERROR_DCC7_RELAY, /**< Problem z serwerem pośredniczącym */ + * Pole zapytania lub odpowiedzi katalogu publicznego. +struct gg_pubdir50_entry { + int num; /**< Numer wyniku */ + char *field; /**< Nazwa pola */ + char *value; /**< Wartość pola */ + * Zapytanie lub odpowiedź katalogu publicznego. + * Patrz \c gg_pubdir50_t. + int count; /**< Liczba wyników odpowiedzi */ + uin_t next; /**< Numer początkowy następnego zapytania */ + int type; /**< Rodzaj zapytania */ + uint32_t seq; /**< Numer sekwencyjny */ + struct gg_pubdir50_entry *entries; /**< Pola zapytania lub odpowiedzi */ + int entries_count; /**< Liczba pól */ + * Zapytanie lub odpowiedź katalogu publicznego. + * Do pól nie należy się odwoływać bezpośrednio -- wszystkie niezbędne + * informacje są dostępne za pomocą funkcji \c gg_pubdir50_* +typedef struct gg_pubdir50_s *gg_pubdir50_t; + * Opis zdarzeń \c GG_EVENT_MSG i \c GG_EVENT_MULTILOGON_MSG. + uin_t sender; /**< Numer nadawcy/odbiorcy */ + int msgclass; /**< Klasa wiadomości */ + time_t time; /**< Czas nadania */ + unsigned char *message; /**< Treść wiadomości */ + int recipients_count; /**< Liczba odbiorców konferencji */ + uin_t *recipients; /**< Odbiorcy konferencji */ + int formats_length; /**< Długość informacji o formatowaniu tekstu */ + void *formats; /**< Informacje o formatowaniu tekstu */ + uint32_t seq; /**< Numer sekwencyjny wiadomości */ + char *xhtml_message; /**< Treść wiadomości w formacie XHTML (może być równe \c NULL, jeśli wiadomość nie zawiera treści XHTML) */ + * Opis zdarzenia \c GG_EVENT_NOTIFY_DESCR. +struct gg_event_notify_descr { + struct gg_notify_reply *notify; /**< Informacje o liście kontaktów */ + char *descr; /**< Opis status */ + * Opis zdarzenia \c GG_EVENT_STATUS. +struct gg_event_status { + uin_t uin; /**< Numer Gadu-Gadu */ + uint32_t status; /**< Nowy status */ + char *descr; /**< Opis */ + * Opis zdarzenia \c GG_EVENT_STATUS60. +struct gg_event_status60 { + uin_t uin; /**< Numer Gadu-Gadu */ + int status; /**< Nowy status */ + uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */ + uint16_t remote_port; /**< Port dla połączeń bezpośrednich */ + int version; /**< Wersja protokołu */ + int image_size; /**< Maksymalny rozmiar obsługiwanych obrazków w KiB */ + char *descr; /**< Opis statusu */ + time_t time; /**< Czas powrotu */ + * Opis zdarzenia \c GG_EVENT_NOTIFY_REPLY60. +struct gg_event_notify60 { + uin_t uin; /**< Numer Gadu-Gadu. W ostatnim elemencie jest równy 0, a pozostałe pola są niezainicjowane. */ + int status; /**< Nowy status */ + uint32_t remote_ip; /**< Adres IP dla połączeń bezpośrednich */ + uint16_t remote_port; /**< Port dla połączeń bezpośrednich */ + int version; /**< Wersja protokołu */ + int image_size; /**< Maksymalny rozmiar obsługiwanych obrazków w KiB */ + char *descr; /**< Opis statusu */ + time_t time; /**< Czas powrotu */ + * Opis zdarzenia \c GG_EVENT_ACK. + uin_t recipient; /**< Numer odbiorcy */ + int status; /**< Status doręczenia */ + int seq; /**< Numer sekwencyjny wiadomości */ + * Opis zdarzenia \c GG_EVENT_USERLIST. +struct gg_event_userlist { + char type; /**< Rodzaj odpowiedzi */ + char *reply; /**< Treść odpowiedzi */ + * Opis zdarzenia \c GG_EVENT_DCC_VOICE_DATA. +struct gg_event_dcc_voice_data { + uint8_t *data; /**< Dane dźwiękowe */ + int length; /**< Rozmiar danych dźwiękowych */ + * Opis zdarzenia \c GG_EVENT_IMAGE_REQUEST. +struct gg_event_image_request { + uin_t sender; /**< Nadawca żądania */ + uint32_t size; /**< Rozmiar obrazka */ + uint32_t crc32; /**< Suma kontrolna CRC32 */ + * Opis zdarzenia \c GG_EVENT_IMAGE_REPLY. +struct gg_event_image_reply { + uin_t sender; /**< Nadawca obrazka */ + uint32_t size; /**< Rozmiar obrazka */ + uint32_t crc32; /**< Suma kontrolna CRC32 */ + char *filename; /**< Nazwa pliku */ + char *image; /**< Bufor z obrazkiem */ + * Opis zdarzenia \c GG_EVENT_XML_EVENT. +struct gg_event_xml_event { + char *data; /**< Bufor z komunikatem */ + * Opis zdarzenia \c GG_EVENT_DCC7_CONNECTED. +struct gg_event_dcc7_connected { + struct gg_dcc7 *dcc7; /**< Struktura połączenia */ + * Opis zdarzenia \c GG_EVENT_DCC7_PENDING. +struct gg_event_dcc7_pending { + struct gg_dcc7 *dcc7; /**< Struktura połączenia */ + * Opis zdarzenia \c GG_EVENT_DCC7_REJECT. +struct gg_event_dcc7_reject { + struct gg_dcc7 *dcc7; /**< Struktura połączenia */ + int reason; /**< powód odrzucenia */ + * Opis zdarzenia \c GG_EVENT_DCC7_ACCEPT. +struct gg_event_dcc7_accept { + struct gg_dcc7 *dcc7; /**< Struktura połączenia */ + int type; /**< Sposób połączenia (P2P, przez serwer) */ + uint32_t remote_ip; /**< Adres zdalnego klienta */ + uint16_t remote_port; /**< Port zdalnego klienta */ + * Opis zdarzenia \c GG_EVENT_DCC7_DONE. +struct gg_event_dcc7_done { + struct gg_dcc7 *dcc7; /**< Struktura połączenia */ + * Opis zdarzenia \c GG_EVENT_TYPING_NOTIFICATION. +struct gg_event_typing_notification { + uin_t uin; /**< Numer rozmówcy */ + int length; /**< Długość tekstu */ + * Atrybut użytkownika. +struct gg_event_user_data_attr { + int type; /**< Typ atrybutu */ + char *key; /**< Klucz */ + char *value; /**< Wartość */ + * Struktura opisująca kontakt w zdarzeniu GG_EVENT_USER_DATA. +struct gg_event_user_data_user { + uin_t uin; /**< Numer kontaktu */ + size_t attr_count; /**< Liczba atrybutów */ + struct gg_event_user_data_attr *attrs; /**< Lista atrybutów */ + * Opis zdarzenia \c GG_EVENT_USER_DATA. +struct gg_event_user_data { + int type; /**< Rodzaj informacji o kontaktach */ + size_t user_count; /**< Liczba kontaktów */ + struct gg_event_user_data_user *users; /**< Lista kontaktów */ + * Struktura opisująca sesję multilogowania. +struct gg_multilogon_session { + gg_multilogon_id_t id; /**< Identyfikator sesji */ + char *name; /**< Nazwa sesji (podana w \c gg_login_params.client_version) */ + uint32_t remote_addr; /**< Adres sesji */ + int status_flags; /**< Flagi statusu sesji */ + int protocol_features; /**< Opcje protokolu sesji */ + time_t logon_time; /**< Czas zalogowania */ + * Opis zdarzenia \c GG_EVENT_MULTILOGON_INFO. +struct gg_event_multilogon_info { + int count; /**< Liczba sesji */ + struct gg_multilogon_session *sessions; /** Lista sesji */ + * Opis zdarzenia \c GG_EVENT_USERLIST100_VERSION. +struct gg_event_userlist100_version { + uint32_t version; /**< Numer wersji listy kontaktów na serwerze */ + * Opis zdarzenia \c GG_EVENT_USERLIST100_REPLY. +struct gg_event_userlist100_reply { + char type; /**< Rodzaj odpowiedzi */ + uint32_t version; /**< Aktualna wersja listy kontaktów na serwerze */ + char format_type; /**< Typ formatu listy kontaktów (żądany w \c gg_userlist100_request.format_type) */ + char *reply; /**< Treść listy kontaktów w przesyłanej wersji i formacie */ + * Unia wszystkich zdarzeń zwracanych przez funkcje \c gg_watch_fd(), + * \c gg_dcc_watch_fd() i \c gg_dcc7_watch_fd(). + enum gg_failure_t failure; /**< Błąd połączenia (\c GG_EVENT_CONN_FAILED) */ + struct gg_notify_reply *notify; /**< Zmiana statusu kontaktów (\c GG_EVENT_NOTIFY) */ + struct gg_event_notify_descr notify_descr; /**< Zmiana statusu kontaktów (\c GG_EVENT_NOTIFY_DESCR) */ + struct gg_event_status status; /**< Zmiana statusu kontaktów (\c GG_EVENT_STATUS) */ + struct gg_event_status60 status60; /**< Zmiana statusu kontaktów (\c GG_EVENT_STATUS60) */ + struct gg_event_notify60 *notify60; /**< Zmiana statusu kontaktów (\c GG_EVENT_NOTIFY60) */ + struct gg_event_msg msg; /**< Otrzymano wiadomość (\c GG_EVENT_MSG) */ + struct gg_event_ack ack; /**< Potwierdzenie wiadomości (\c GG_EVENT_ACK) */ + struct gg_event_image_request image_request; /**< Żądanie wysłania obrazka (\c GG_EVENT_IMAGE_REQUEST) */ + struct gg_event_image_reply image_reply; /**< Odpowiedź z obrazkiem (\c GG_EVENT_IMAGE_REPLY) */ + struct gg_event_userlist userlist; /**< Odpowiedź listy kontaktów (\c GG_EVENT_USERLIST) */ + gg_pubdir50_t pubdir50; /**< Odpowiedź katalogu publicznego (\c GG_EVENT_PUBDIR50_*) */ + struct gg_event_xml_event xml_event; /**< Zdarzenie systemowe (\c GG_EVENT_XML_EVENT) */ + struct gg_dcc *dcc_new; /**< Nowe połączenie bezpośrednie (\c GG_EVENT_DCC_NEW) */ + enum gg_error_t dcc_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC_ERROR) */ + struct gg_event_dcc_voice_data dcc_voice_data; /**< Dane połączenia głosowego (\c GG_EVENT_DCC_VOICE_DATA) */ + struct gg_dcc7 *dcc7_new; /**< Nowe połączenie bezpośrednie (\c GG_EVENT_DCC7_NEW) */ + enum gg_error_t dcc7_error; /**< Błąd połączenia bezpośredniego (\c GG_EVENT_DCC7_ERROR) */ + struct gg_event_dcc7_connected dcc7_connected; /**< Informacja o zestawieniu połączenia bezpośredniego (\c GG_EVENT_DCC7_CONNECTED) */ + struct gg_event_dcc7_pending dcc7_pending; /**< Trwa próba połączenia bezpośredniego (\c GG_EVENT_DCC7_PENDING) */ + struct gg_event_dcc7_reject dcc7_reject; /**< Odrzucono połączenia bezpośredniego (\c GG_EVENT_DCC7_REJECT) */ + struct gg_event_dcc7_accept dcc7_accept; /**< Zaakceptowano połączenie bezpośrednie (\c GG_EVENT_DCC7_ACCEPT) */ + struct gg_event_dcc7_done dcc7_done; /**< Zakończono połączenie bezpośrednie (\c GG_EVENT_DCC7_DONE) */ + struct gg_event_typing_notification typing_notification; /**< Powiadomienie o pisaniu */ + struct gg_event_user_data user_data; /**< Informacje o kontaktach */ + struct gg_event_msg multilogon_msg; /**< Inna sesja wysłała wiadomość (\c GG_EVENT_MULTILOGON_MSG) */ + struct gg_event_multilogon_info multilogon_info; /**< Informacja o innych sesjach multilogowania (\c GG_EVENT_MULTILOGON_INFO) */ + struct gg_event_userlist100_version userlist100_version; /**< Informacja o numerze wersji listy kontaktów na serwerze (\c GG_EVENT_USERLIST100_VERSION) */ + struct gg_event_userlist100_reply userlist100_reply; /**< Odpowiedź listy kontaktów (10.0) (\c GG_EVENT_USERLIST100_REPLY) */ + * Zwracany przez funkcje \c gg_watch_fd(), \c gg_dcc_watch_fd() + * i \c gg_dcc7_watch_fd(). Po przeanalizowaniu należy zwolnić + * za pomocą \c gg_event_free(). + int type; /**< Rodzaj zdarzenia */ + union gg_event_union event; /**< Informacja o zdarzeniu */ +struct gg_event *gg_watch_fd(struct gg_session *sess); +void gg_event_free(struct gg_event *e); +int gg_notify_ex(struct gg_session *sess, uin_t *userlist, char *types, int count); +int gg_notify(struct gg_session *sess, uin_t *userlist, int count); +int gg_add_notify_ex(struct gg_session *sess, uin_t uin, char type); +int gg_add_notify(struct gg_session *sess, uin_t uin); +int gg_remove_notify_ex(struct gg_session *sess, uin_t uin, char type); +int gg_remove_notify(struct gg_session *sess, uin_t uin); +struct gg_http *gg_http_connect(const char *hostname, int port, int async, const char *method, const char *path, const char *header); +int gg_http_watch_fd(struct gg_http *h); +void gg_http_stop(struct gg_http *h); +void gg_http_free(struct gg_http *h); +uint32_t gg_pubdir50(struct gg_session *sess, gg_pubdir50_t req); +gg_pubdir50_t gg_pubdir50_new(int type); +int gg_pubdir50_add(gg_pubdir50_t req, const char *field, const char *value); +int gg_pubdir50_seq_set(gg_pubdir50_t req, uint32_t seq); +const char *gg_pubdir50_get(gg_pubdir50_t res, int num, const char *field); +int gg_pubdir50_type(gg_pubdir50_t res); +int gg_pubdir50_count(gg_pubdir50_t res); +uin_t gg_pubdir50_next(gg_pubdir50_t res); +uint32_t gg_pubdir50_seq(gg_pubdir50_t res); +void gg_pubdir50_free(gg_pubdir50_t res); +#define GG_PUBDIR50_UIN "FmNumber" +#define GG_PUBDIR50_STATUS "FmStatus" +#define GG_PUBDIR50_FIRSTNAME "firstname" +#define GG_PUBDIR50_LASTNAME "lastname" +#define GG_PUBDIR50_NICKNAME "nickname" +#define GG_PUBDIR50_BIRTHYEAR "birthyear" +#define GG_PUBDIR50_CITY "city" +#define GG_PUBDIR50_GENDER "gender" +#define GG_PUBDIR50_GENDER_FEMALE "1" +#define GG_PUBDIR50_GENDER_MALE "2" +#define GG_PUBDIR50_GENDER_SET_FEMALE "2" +#define GG_PUBDIR50_GENDER_SET_MALE "1" +#define GG_PUBDIR50_ACTIVE "ActiveOnly" +#define GG_PUBDIR50_ACTIVE_TRUE "1" +#define GG_PUBDIR50_START "fmstart" +#define GG_PUBDIR50_FAMILYNAME "familyname" +#define GG_PUBDIR50_FAMILYCITY "familycity" + * Rodzaj pola zapytania. + GG_PUBDIR50_UIN, /**< Numer Gadu-Gadu */ + GG_PUBDIR50_STATUS, /**< Status (tylko wynik wyszukiwania) */ + GG_PUBDIR50_FIRSTNAME, /**< Imię */ + GG_PUBDIR50_LASTNAME, /**< Nazwisko */ + GG_PUBDIR50_NICKNAME, /**< Pseudonim */ + GG_PUBDIR50_BIRTHYEAR, /**< Rok urodzenia lub przedział lat oddzielony spacją */ + GG_PUBDIR50_CITY, /**< Miejscowość */ + GG_PUBDIR50_GENDER, /**< Płeć */ + GG_PUBDIR50_ACTIVE, /**< Osoba dostępna (tylko wyszukiwanie) */ + GG_PUBDIR50_START, /**< Numer początkowy wyszukiwania (tylko wyszukiwanie) */ + GG_PUBDIR50_FAMILYNAME, /**< Nazwisko rodowe (tylko wysyłanie informacji o sobie) */ + GG_PUBDIR50_FAMILYCITY, /**< Miejscowość pochodzenia (tylko wysyłanie informacji o sobie) */ + * Wartość pola GG_PUBDIR50_GENDER przy wyszukiwaniu. Brak pola oznacza dowolną płeć. + GG_PUBDIR50_GENDER_FEMALE, /**< Kobieta */ + GG_PUBDIR50_GENDER_MALE, /**< Mężczyzna */ + * Wartość pola GG_PUBDIR50_GENDER przy wysyłaniu informacji o sobie. + GG_PUBDIR50_GENDER_SET_FEMALE, /**< Kobieta */ + GG_PUBDIR50_GENDER_SET_MALE, /**< Mężczyzna */ + * Wartość pola GG_PUBDIR50_ACTIVE. + GG_PUBDIR50_ACTIVE_TRUE, /**< Wyszukaj tylko osoby dostępne */ + * Wynik operacji na katalogu publicznym. + int success; /**< Flaga powodzenia operacji */ + uin_t uin; /**< Otrzymany numer lub 0 w przypadku błędu */ +int gg_pubdir_watch_fd(struct gg_http *f); +void gg_pubdir_free(struct gg_http *f); + * Token autoryzacji niektórych operacji HTTP. + int width; /**< Szerokość obrazka */ + int height; /**< Wysokość obrazka */ + int length; /**< Liczba znaków w tokenie */ + char *tokenid; /**< Identyfikator tokenu */ +struct gg_http *gg_token(int async); +int gg_token_watch_fd(struct gg_http *h); +void gg_token_free(struct gg_http *h); +struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async); +#define gg_register_watch_fd gg_pubdir_watch_fd +#define gg_register_free gg_pubdir_free +struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async); +#define gg_unregister_watch_fd gg_pubdir_watch_fd +#define gg_unregister_free gg_pubdir_free +struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async); +#define gg_remind_passwd_watch_fd gg_pubdir_watch_fd +#define gg_remind_passwd_free gg_pubdir_free +struct gg_http *gg_change_passwd4(uin_t uin, const char *email, const char *passwd, const char *newpasswd, const char *tokenid, const char *tokenval, int async); +#define gg_change_passwd_watch_fd gg_pubdir_watch_fd +#define gg_change_passwd_free gg_pubdir_free +extern unsigned long gg_dcc_ip; +int gg_dcc_request(struct gg_session *sess, uin_t uin); +struct gg_dcc *gg_dcc_send_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin); +struct gg_dcc *gg_dcc_get_file(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin); +struct gg_dcc *gg_dcc_voice_chat(uint32_t ip, uint16_t port, uin_t my_uin, uin_t peer_uin); +void gg_dcc_set_type(struct gg_dcc *d, int type); +int gg_dcc_fill_file_info(struct gg_dcc *d, const char *filename); +int gg_dcc_fill_file_info2(struct gg_dcc *d, const char *filename, const char *local_filename); +int gg_dcc_voice_send(struct gg_dcc *d, char *buf, int length); +#define GG_DCC_VOICE_FRAME_LENGTH 195 /**< Rozmiar pakietu głosowego przed wersją Gadu-Gadu 5.0.5 */ +#define GG_DCC_VOICE_FRAME_LENGTH_505 326 /**< Rozmiar pakietu głosowego od wersji Gadu-Gadu 5.0.5 */ +struct gg_dcc *gg_dcc_socket_create(uin_t uin, uint16_t port); +#define gg_dcc_socket_free gg_dcc_free +#define gg_dcc_socket_watch_fd gg_dcc_watch_fd +struct gg_event *gg_dcc_watch_fd(struct gg_dcc *d); +void gg_dcc_free(struct gg_dcc *c); +struct gg_event *gg_dcc7_watch_fd(struct gg_dcc7 *d); +struct gg_dcc7 *gg_dcc7_send_file(struct gg_session *sess, uin_t rcpt, const char *filename, const char *filename1250, const char *hash); +struct gg_dcc7 *gg_dcc7_send_file_fd(struct gg_session *sess, uin_t rcpt, int fd, size_t size, const char *filename1250, const char *hash); +int gg_dcc7_accept(struct gg_dcc7 *dcc, unsigned int offset); +int gg_dcc7_reject(struct gg_dcc7 *dcc, int reason); +void gg_dcc7_free(struct gg_dcc7 *d); +extern int gg_debug_level; +extern void (*gg_debug_handler)(int level, const char *format, va_list ap); +extern void (*gg_debug_handler_session)(struct gg_session *sess, int level, const char *format, va_list ap); +extern FILE *gg_debug_file; +#define GG_DEBUG_NET 1 /**< Rejestracja zdarzeń związanych z siecią */ +#define GG_DEBUG_TRAFFIC 2 /**< Rejestracja ruchu sieciowego */ +#define GG_DEBUG_DUMP 4 /**< Rejestracja zawartości pakietów */ +#define GG_DEBUG_FUNCTION 8 /**< Rejestracja wywołań funkcji */ +#define GG_DEBUG_MISC 16 /**< Rejestracja różnych informacji */ +#define gg_debug(x, y...) do { } while(0) +#define gg_debug_session(z, x, y...) do { } while(0) +void gg_debug(int level, const char *format, ...); +void gg_debug_session(struct gg_session *sess, int level, const char *format, ...); +const char *gg_libgadu_version(void); + * Lista funkcji biblioteki, które zależą od zewnętrznych bibliotek. + GG_LIBGADU_FEATURE_SSL, /**< Biblioteka obsługuje połączenia szyfrowane */ + GG_LIBGADU_FEATURE_PTHREAD, /**< Biblioteka obsługuje rozwiązywanie nazw za pomocą wątków */ + GG_LIBGADU_FEATURE_USERLIST100, /**< Biblioteka obsługuje listę kontaktów zgodną z Gadu-Gadu 10 */ +int gg_libgadu_check_feature(gg_libgadu_feature_t feature); +extern int gg_proxy_enabled; +extern char *gg_proxy_host; +extern int gg_proxy_port; +extern char *gg_proxy_username; +extern char *gg_proxy_password; +extern int gg_proxy_http_only; +extern unsigned long gg_local_ip; +#define GG_LOGIN_HASH_GG32 0x01 /**< Algorytm Gadu-Gadu */ +#define GG_LOGIN_HASH_SHA1 0x02 /**< Algorytm SHA1 */ +#define GG_PUBDIR50_WRITE 0x01 +#define GG_PUBDIR50_READ 0x02 +#define GG_PUBDIR50_SEARCH 0x03 +#define GG_PUBDIR50_SEARCH_REQUEST GG_PUBDIR50_SEARCH +#define GG_PUBDIR50_SEARCH_REPLY 0x05 + * Rodzaj zapytania lub odpowiedzi katalogu publicznego. + GG_PUBDIR50_WRITE, /**< Wysłanie do serwera informacji o sobie */ + GG_PUBDIR50_READ, /**< Pobranie z serwera informacji o sobie */ + GG_PUBDIR50_SEARCH, /**< Wyszukiwanie w katalogu publicznym */ + GG_PUBDIR50_SEARCH_REPLY, /**< Wynik wyszukiwania w katalogu publicznym */ +#define gg_free_event gg_event_free +#define gg_free_http gg_http_free +#define gg_free_pubdir gg_pubdir_free +#define gg_free_register gg_pubdir_free +#define gg_free_remind_passwd gg_pubdir_free +#define gg_free_dcc gg_dcc_free +#define gg_free_change_passwd gg_pubdir_free +struct gg_search_request { + struct gg_search_result *results; +struct gg_search_result { +#define GG_GENDER_NONE 0 +#define GG_GENDER_FEMALE 1 +#define GG_GENDER_MALE 2 +struct gg_http *gg_search(const struct gg_search_request *r, int async) GG_DEPRECATED; +int gg_search_watch_fd(struct gg_http *f) GG_DEPRECATED; +void gg_free_search(struct gg_http *f) GG_DEPRECATED; +#define gg_search_free gg_free_search +const struct gg_search_request *gg_search_request_mode_0(char *nickname, char *first_name, char *last_name, char *city, int gender, int min_birth, int max_birth, int active, int start) GG_DEPRECATED; +const struct gg_search_request *gg_search_request_mode_1(char *email, int active, int start) GG_DEPRECATED; +const struct gg_search_request *gg_search_request_mode_2(char *phone, int active, int start) GG_DEPRECATED; +const struct gg_search_request *gg_search_request_mode_3(uin_t uin, int active, int start) GG_DEPRECATED; +void gg_search_request_free(struct gg_search_request *r) GG_DEPRECATED; +struct gg_http *gg_register(const char *email, const char *password, int async) GG_DEPRECATED; +struct gg_http *gg_register2(const char *email, const char *password, const char *qa, int async) GG_DEPRECATED; +struct gg_http *gg_unregister(uin_t uin, const char *password, const char *email, int async) GG_DEPRECATED; +struct gg_http *gg_unregister2(uin_t uin, const char *password, const char *qa, int async) GG_DEPRECATED; +struct gg_http *gg_remind_passwd(uin_t uin, int async) GG_DEPRECATED; +struct gg_http *gg_remind_passwd2(uin_t uin, const char *tokenid, const char *tokenval, int async) GG_DEPRECATED; +struct gg_http *gg_change_passwd(uin_t uin, const char *passwd, const char *newpasswd, const char *newemail, int async) GG_DEPRECATED; +struct gg_http *gg_change_passwd2(uin_t uin, const char *passwd, const char *newpasswd, const char *email, const char *newemail, int async) GG_DEPRECATED; +struct gg_http *gg_change_passwd3(uin_t uin, const char *passwd, const char *newpasswd, const char *qa, int async) GG_DEPRECATED; +struct gg_change_info_request { +struct gg_change_info_request *gg_change_info_request_new(const char *first_name, const char *last_name, const char *nickname, const char *email, int born, int gender, const char *city) GG_DEPRECATED; +void gg_change_info_request_free(struct gg_change_info_request *r) GG_DEPRECATED; +struct gg_http *gg_change_info(uin_t uin, const char *passwd, const struct gg_change_info_request *request, int async) GG_DEPRECATED; +#define gg_change_pubdir_watch_fd gg_pubdir_watch_fd +#define gg_change_pubdir_free gg_pubdir_free +#define gg_free_change_pubdir gg_pubdir_free +struct gg_http *gg_userlist_get(uin_t uin, const char *password, int async) GG_DEPRECATED; +int gg_userlist_get_watch_fd(struct gg_http *f) GG_DEPRECATED; +void gg_userlist_get_free(struct gg_http *f) GG_DEPRECATED; +struct gg_http *gg_userlist_put(uin_t uin, const char *password, const char *contacts, int async) GG_DEPRECATED; +int gg_userlist_put_watch_fd(struct gg_http *f) GG_DEPRECATED; +void gg_userlist_put_free(struct gg_http *f) GG_DEPRECATED; +struct gg_http *gg_userlist_remove(uin_t uin, const char *password, int async) GG_DEPRECATED; +int gg_userlist_remove_watch_fd(struct gg_http *f) GG_DEPRECATED; +void gg_userlist_remove_free(struct gg_http *f) GG_DEPRECATED; +int gg_pubdir50_handle_reply(struct gg_event *e, const char *packet, int length) GG_DEPRECATED; +int gg_file_hash_sha1(int fd, uint8_t *result) GG_DEPRECATED; +char *gg_saprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))) GG_DEPRECATED; +char *gg_saprintf(const char *format, ...) GG_DEPRECATED; +char *gg_vsaprintf(const char *format, va_list ap) GG_DEPRECATED; +#define gg_alloc_sprintf gg_saprintf +char *gg_get_line(char **ptr) GG_DEPRECATED; +int gg_connect(void *addr, int port, int async) GG_DEPRECATED; +struct in_addr *gg_gethostbyname(const char *hostname) GG_DEPRECATED; +char *gg_read_line(int sock, char *buf, int length) GG_DEPRECATED; +void gg_chomp(char *line) GG_DEPRECATED; +char *gg_urlencode(const char *str) GG_DEPRECATED; +int gg_http_hash(const char *format, ...) GG_DEPRECATED; +void gg_http_free_fields(struct gg_http *h) GG_DEPRECATED; +int gg_read(struct gg_session *sess, char *buf, int length) GG_DEPRECATED; +int gg_write(struct gg_session *sess, const char *buf, int length) GG_DEPRECATED; +void *gg_recv_packet(struct gg_session *sess) GG_DEPRECATED; +int gg_send_packet(struct gg_session *sess, int type, ...) GG_DEPRECATED; +unsigned int gg_login_hash(const unsigned char *password, unsigned int seed) GG_DEPRECATED; +void gg_login_hash_sha1(const char *password, uint32_t seed, uint8_t *result) GG_DEPRECATED; +uint32_t gg_fix32(uint32_t x); +uint16_t gg_fix16(uint16_t x); +char *gg_proxy_auth(void) GG_DEPRECATED; +char *gg_base64_encode(const char *buf) GG_DEPRECATED; +char *gg_base64_decode(const char *buf) GG_DEPRECATED; +int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, int freeq) GG_DEPRECATED; + * Kolejka odbieranych obrazków. + uin_t sender; /**< Nadawca obrazka */ + uint32_t size; /**< Rozmiar obrazka */ + uint32_t crc32; /**< Suma kontrolna CRC32 */ + char *filename; /**< Nazwa pliku */ + char *image; /**< Bufor z odebranymi danymi */ + uint32_t done; /**< Rozmiar odebranych danych */ + struct gg_image_queue *next; /**< Kolejny element listy */ +int gg_dcc7_handle_id(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; +int gg_dcc7_handle_new(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; +int gg_dcc7_handle_info(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; +int gg_dcc7_handle_accept(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; +int gg_dcc7_handle_reject(struct gg_session *sess, struct gg_event *e, const void *payload, int len) GG_DEPRECATED; +#define GG_APPMSG_HOST "appmsg.gadu-gadu.pl" +#define GG_APPMSG_PORT 80 +#define GG_PUBDIR_HOST "pubdir.gadu-gadu.pl" +#define GG_PUBDIR_PORT 80 +#define GG_REGISTER_HOST "register.gadu-gadu.pl" +#define GG_REGISTER_PORT 80 +#define GG_REMIND_HOST "retr.gadu-gadu.pl" +#define GG_REMIND_PORT 80 +#define GG_RELAY_HOST "relay.gadu-gadu.pl" +#define GG_RELAY_PORT 80 +#define GG_DEFAULT_PORT 8074 +#define GG_HTTPS_PORT 443 +#define GG_HTTP_USERAGENT "Mozilla/4.7 [en] (Win98; I)" +#define GG_DEFAULT_CLIENT_VERSION "10.1.0.11070" +#define GG_DEFAULT_PROTOCOL_VERSION 0x2e +#define GG_DEFAULT_TIMEOUT 30 +#define GG_HAS_AUDIO_MASK 0x40000000 +#define GG_HAS_AUDIO7_MASK 0x20000000 +#define GG_ERA_OMNIX_MASK 0x04000000 +#undef GG_LIBGADU_VERSION +#define GG_FEATURE_MSG77 0x0001 +#define GG_FEATURE_STATUS77 0x0002 +#define GG_FEATURE_UNKNOWN_4 0x0004 +#define GG_FEATURE_UNKNOWN_8 0x0008 +#define GG_FEATURE_DND_FFC 0x0010 +#define GG_FEATURE_IMAGE_DESCR 0x0020 +#define GG_FEATURE_UNKNOWN_40 0x0040 +#define GG_FEATURE_UNKNOWN_80 0x0080 +#define GG_FEATURE_UNKNOWN_100 0x0100 +#define GG_FEATURE_USER_DATA 0x0200 +#define GG_FEATURE_MSG_ACK 0x0400 +#define GG_FEATURE_UNKNOWN_800 0x0800 +#define GG_FEATURE_UNKNOWN_1000 0x1000 +#define GG_FEATURE_TYPING_NOTIFICATION 0x2000 +#define GG_FEATURE_MULTILOGON 0x4000 +/* Poniższe makra zostały zachowane dla zgodności API */ +#define GG_FEATURE_MSG80 0 +#define GG_FEATURE_STATUS80 0 +#define GG_FEATURE_STATUS80BETA 0 +#define GG_FEATURE_ALL (GG_FEATURE_MSG80 | GG_FEATURE_STATUS80 | GG_FEATURE_DND_FFC | GG_FEATURE_IMAGE_DESCR | GG_FEATURE_UNKNOWN_100 | GG_FEATURE_USER_DATA | GG_FEATURE_MSG_ACK | GG_FEATURE_TYPING_NOTIFICATION) + * Flagi opcji protokołu. + GG_FEATURE_MSG77, /**< Klient życzy sobie otrzymywać wiadomości zgodnie z protokołem 7.7 */ + GG_FEATURE_STATUS77, /**< Klient życzy sobie otrzymywać zmiany stanu zgodnie z protokołem 7.7 */ + GG_FEATURE_DND_FFC, /**< Klient obsługuje statusy "nie przeszkadzać" i "poGGadaj ze mną" */ + GG_FEATURE_IMAGE_DESCR, /**< Klient obsługuje opisy graficzne oraz flagę \c GG_STATUS80_DESCR_MASK */ +#define GG_DEFAULT_DCC_PORT 1550 + uint32_t type; /* typ pakietu */ + uint32_t length; /* długość reszty pakietu */ +#define GG_WELCOME 0x0001 +#define GG_NEED_EMAIL 0x0014 + uint32_t key; /* klucz szyfrowania hasła */ + uint32_t uin; /* mój numerek */ + uint32_t hash; /* hash hasła */ + uint32_t status; /* status na dzień dobry */ + uint32_t version; /* moja wersja klienta */ + uint32_t local_ip; /* mój adres ip */ + uint16_t local_port; /* port, na którym słucham */ +#define GG_LOGIN_EXT 0x0013 + uint32_t uin; /* mój numerek */ + uint32_t hash; /* hash hasła */ + uint32_t status; /* status na dzień dobry */ + uint32_t version; /* moja wersja klienta */ + uint32_t local_ip; /* mój adres ip */ + uint16_t local_port; /* port, na którym słucham */ + uint32_t external_ip; /* zewnętrzny adres ip */ + uint16_t external_port; /* zewnętrzny port */ +#define GG_LOGIN60 0x0015 + uint32_t uin; /* mój numerek */ + uint32_t hash; /* hash hasła */ + uint32_t status; /* status na dzień dobry */ + uint32_t version; /* moja wersja klienta */ + uint8_t dunno1; /* 0x00 */ + uint32_t local_ip; /* mój adres ip */ + uint16_t local_port; /* port, na którym słucham */ + uint32_t external_ip; /* zewnętrzny adres ip */ + uint16_t external_port; /* zewnętrzny port */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno2; /* 0xbe */ +#define GG_LOGIN70 0x0019 + uint32_t uin; /* mój numerek */ + uint8_t hash_type; /* rodzaj hashowania hasła */ + uint8_t hash[64]; /* hash hasła dopełniony zerami */ + uint32_t status; /* status na dzień dobry */ + uint32_t version; /* moja wersja klienta */ + uint8_t dunno1; /* 0x00 */ + uint32_t local_ip; /* mój adres ip */ + uint16_t local_port; /* port, na którym słucham */ + uint32_t external_ip; /* zewnętrzny adres ip (???) */ + uint16_t external_port; /* zewnętrzny port (???) */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno2; /* 0xbe */ +#define GG_LOGIN_OK 0x0003 +#define GG_LOGIN_FAILED 0x0009 +#define GG_PUBDIR50_REQUEST 0x0014 +struct gg_pubdir50_request { + uint8_t type; /* GG_PUBDIR50_* */ + uint32_t seq; /* czas wysłania zapytania */ +#define GG_PUBDIR50_REPLY 0x000e +struct gg_pubdir50_reply { + uint8_t type; /* GG_PUBDIR50_* */ + uint32_t seq; /* czas wysłania zapytania */ +#define GG_NEW_STATUS 0x0002 +#define GG_STATUS_NOT_AVAIL 0x0001 +#define GG_STATUS_NOT_AVAIL_DESCR 0x0015 +#define GG_STATUS_FFC 0x0017 +#define GG_STATUS_FFC_DESCR 0x0018 +#define GG_STATUS_AVAIL 0x0002 +#define GG_STATUS_AVAIL_DESCR 0x0004 +#define GG_STATUS_BUSY 0x0003 +#define GG_STATUS_BUSY_DESCR 0x0005 +#define GG_STATUS_DND 0x0021 +#define GG_STATUS_DND_DESCR 0x0022 +#define GG_STATUS_INVISIBLE 0x0014 +#define GG_STATUS_INVISIBLE_DESCR 0x0016 +#define GG_STATUS_BLOCKED 0x0006 +#define GG_STATUS_IMAGE_MASK 0x0100 +#define GG_STATUS_DESCR_MASK 0x4000 +#define GG_STATUS_FRIENDS_MASK 0x8000 +#define GG_STATUS_FLAG_UNKNOWN 0x00000001 +#define GG_STATUS_FLAG_VIDEO 0x00000002 +#define GG_STATUS_FLAG_MOBILE 0x00100000 +#define GG_STATUS_FLAG_SPAM 0x00800000 + * Rodzaje statusów użytkownika. + GG_STATUS_NOT_AVAIL, /**< Niedostępny */ + GG_STATUS_NOT_AVAIL_DESCR, /**< Niedostępny z opisem */ + GG_STATUS_FFC, /**< PoGGadaj ze mną */ + GG_STATUS_FFC_DESCR, /**< PoGGadaj ze mną z opisem */ + GG_STATUS_AVAIL, /**< Dostępny */ + GG_STATUS_AVAIL_DESCR, /**< Dostępny z opisem */ + GG_STATUS_BUSY, /**< Zajęty */ + GG_STATUS_BUSY_DESCR, /**< Zajęty z opisem */ + GG_STATUS_DND, /**< Nie przeszkadzać */ + GG_STATUS_DND_DESCR, /**< Nie przeszakdzać z opisem */ + GG_STATUS_INVISIBLE, /**< Niewidoczny (tylko własny status) */ + GG_STATUS_INVISIBLE_DESCR, /**< Niewidoczny z opisem (tylko własny status) */ + GG_STATUS_BLOCKED, /**< Zablokowany (tylko status innych) */ + GG_STATUS_IMAGE_MASK, /**< Flaga bitowa oznaczająca opis graficzny (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */ + GG_STATUS_DESCR_MASK, /**< Flaga bitowa oznaczająca status z opisem (tylko jeśli wybrano \c GG_FEATURE_IMAGE_DESCR) */ + GG_STATUS_FRIENDS_MASK, /**< Flaga bitowa dostępności tylko dla znajomych */ + * Rodzaje statusów użytkownika. Mapa bitowa. + GG_STATUS_FLAG_UNKNOWN, /**< Przeznaczenie nieznane, ale występuje zawsze */ + GG_STATUS_FLAG_VIDEO, /**< Klient obsługuje wideorozmowy */ + GG_STATUS_FLAG_MOBILE, /**< Klient mobilny (ikona telefonu komórkowego) */ + GG_STATUS_FLAG_SPAM, /**< Klient chce otrzymywać linki od nieznajomych */ + * Flaga bitowa dostepnosci informujaca ze mozemy voipowac +#define GG_STATUS_VOICE_MASK 0x20000 /**< czy ma wlaczone audio (7.7) */ + * Maksymalna długośc opisu. +#define GG_STATUS_DESCR_MAXSIZE 255 +#define GG_STATUS_DESCR_MAXSIZE_PRE_8_0 70 +#define GG_STATUS_MASK 0xff +/* GG_S_F() tryb tylko dla znajomych */ +#define GG_S_F(x) (((x) & GG_STATUS_FRIENDS_MASK) != 0) +/* GG_S() stan bez uwzględnienia dodatkowych flag */ +#define GG_S(x) ((x) & GG_STATUS_MASK) +/* GG_S_FF() chętny do rozmowy */ +#define GG_S_FF(x) (GG_S(x) == GG_STATUS_FFC || GG_S(x) == GG_STATUS_FFC_DESCR) +/* GG_S_AV() dostępny */ +#define GG_S_AV(x) (GG_S(x) == GG_STATUS_AVAIL || GG_S(x) == GG_STATUS_AVAIL_DESCR) +/* GG_S_AW() zaraz wracam */ +#define GG_S_AW(x) (GG_S(x) == GG_STATUS_BUSY || GG_S(x) == GG_STATUS_BUSY_DESCR) +/* GG_S_DD() nie przeszkadzać */ +#define GG_S_DD(x) (GG_S(x) == GG_STATUS_DND || GG_S(x) == GG_STATUS_DND_DESCR) +/* GG_S_NA() niedostępny */ +#define GG_S_NA(x) (GG_S(x) == GG_STATUS_NOT_AVAIL || GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR) +/* GG_S_I() niewidoczny */ +#define GG_S_I(x) (GG_S(x) == GG_STATUS_INVISIBLE || GG_S(x) == GG_STATUS_INVISIBLE_DESCR) +/* GG_S_A() dostępny lub chętny do rozmowy */ +#define GG_S_A(x) (GG_S_FF(x) || GG_S_AV(x)) +/* GG_S_B() zajęty lub nie przeszkadzać */ +#define GG_S_B(x) (GG_S_AW(x) || GG_S_DD(x)) +/* GG_S_D() stan opisowy */ +#define GG_S_D(x) (GG_S(x) == GG_STATUS_NOT_AVAIL_DESCR || \ + GG_S(x) == GG_STATUS_FFC_DESCR || \ + GG_S(x) == GG_STATUS_AVAIL_DESCR || \ + GG_S(x) == GG_STATUS_BUSY_DESCR || \ + GG_S(x) == GG_STATUS_DND_DESCR || \ + GG_S(x) == GG_STATUS_INVISIBLE_DESCR) +/* GG_S_BL() blokowany lub blokujący */ +#define GG_S_BL(x) (GG_S(x) == GG_STATUS_BLOCKED) + * Zmiana statusu (pakiet \c GG_NEW_STATUS i \c GG_NEW_STATUS80BETA) + uint32_t status; /**< Nowy status */ +#define GG_NOTIFY_FIRST 0x000f +#define GG_NOTIFY_LAST 0x0010 +#define GG_NOTIFY 0x0010 + uint32_t uin; /* numerek danej osoby */ + uint8_t dunno1; /* rodzaj wpisu w liście */ +#define GG_USER_OFFLINE 0x01 +#define GG_USER_NORMAL 0x03 +#define GG_USER_BLOCKED 0x04 + GG_USER_NORMAL, /**< Zwykły kontakt */ + GG_USER_BLOCKED, /**< Zablokowany */ + GG_USER_OFFLINE, /**< Niewidoczny dla kontaktu */ +#define GG_LIST_EMPTY 0x0012 +#define GG_NOTIFY_REPLY 0x000c /* tak, to samo co GG_LOGIN */ +struct gg_notify_reply { + uint32_t uin; /* numerek */ + uint32_t status; /* status danej osoby */ + uint32_t remote_ip; /* adres ip delikwenta */ + uint16_t remote_port; /* port, na którym słucha klient */ + uint32_t version; /* wersja klienta */ + uint16_t dunno2; /* znowu port? */ +#define GG_NOTIFY_REPLY60 0x0011 +struct gg_notify_reply60 { + uint32_t uin; /* numerek plus flagi w MSB */ + uint8_t status; /* status danej osoby */ + uint32_t remote_ip; /* adres ip delikwenta */ + uint16_t remote_port; /* port, na którym słucha klient */ + uint8_t version; /* wersja klienta */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno1; /* 0x00 */ +#define GG_STATUS60 0x000f + uint32_t uin; /* numerek plus flagi w MSB */ + uint8_t status; /* status danej osoby */ + uint32_t remote_ip; /* adres ip delikwenta */ + uint16_t remote_port; /* port, na którym słucha klient */ + uint8_t version; /* wersja klienta */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno1; /* 0x00 */ +#define GG_NOTIFY_REPLY77 0x0018 +struct gg_notify_reply77 { + uint32_t uin; /* numerek plus flagi w MSB */ + uint8_t status; /* status danej osoby */ + uint32_t remote_ip; /* adres ip delikwenta */ + uint16_t remote_port; /* port, na którym słucha klient */ + uint8_t version; /* wersja klienta */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno1; /* 0x00 */ + uint32_t dunno2; /* ? */ +#define GG_STATUS77 0x0017 + uint32_t uin; /* numerek plus flagi w MSB */ + uint8_t status; /* status danej osoby */ + uint32_t remote_ip; /* adres ip delikwenta */ + uint16_t remote_port; /* port, na którym słucha klient */ + uint8_t version; /* wersja klienta */ + uint8_t image_size; /* maksymalny rozmiar grafiki w KiB */ + uint8_t dunno1; /* 0x00 */ + uint32_t dunno2; /* ? */ +#define GG_ADD_NOTIFY 0x000d +#define GG_REMOVE_NOTIFY 0x000e + uint32_t uin; /* numerek */ + uint8_t dunno1; /* bitmapa */ +#define GG_STATUS 0x0002 + uint32_t uin; /* numerek */ + uint32_t status; /* nowy stan */ +#define GG_SEND_MSG 0x000b +#define GG_CLASS_QUEUED 0x0001 +#define GG_CLASS_OFFLINE GG_CLASS_QUEUED +#define GG_CLASS_MSG 0x0004 +#define GG_CLASS_CHAT 0x0008 +#define GG_CLASS_CTCP 0x0010 +#define GG_CLASS_ACK 0x0020 +#define GG_CLASS_EXT GG_CLASS_ACK /**< Dla kompatybilności wstecz */ + * Klasy wiadomości. Wartości są maskami bitowymi, które w większości + * przypadków można łączyć (połączenie \c GG_CLASS_MSG i \c GG_CLASS_CHAT + GG_CLASS_MSG, /**< Wiadomość ma pojawić się w osobnym oknie */ + GG_CLASS_CHAT, /**< Wiadomość ma pojawić się w oknie rozmowy */ + GG_CLASS_CTCP, /**< Wiadomość przeznaczona dla klienta Gadu-Gadu */ + GG_CLASS_ACK, /**< Klient nie życzy sobie potwierdzenia */ + GG_CLASS_QUEUED, /**< Wiadomość zakolejkowana na serwerze (tylko przy odbieraniu) */ + * Maksymalna długość wiadomości. +#define GG_MSG_MAXSIZE 1989 +struct gg_msg_richtext { + * Struktura opisująca formatowanie tekstu. W zależności od wartości pola + * \c font, zaraz za tą strukturą może wystąpić \c gg_msg_richtext_color + * lub \c gg_msg_richtext_image. +struct gg_msg_richtext_format { + uint16_t position; /**< Początkowy znak formatowania (liczony od 0) */ + uint8_t font; /**< Atrybuty formatowania */ +#define GG_FONT_BOLD 0x01 +#define GG_FONT_ITALIC 0x02 +#define GG_FONT_UNDERLINE 0x04 +#define GG_FONT_COLOR 0x08 +#define GG_FONT_IMAGE 0x80 + * Atrybuty formatowania wiadomości. + * Struktura opisującą kolor tekstu dla atrybutu \c GG_FONT_COLOR. +struct gg_msg_richtext_color { + uint8_t red; /**< Składowa czerwona koloru */ + uint8_t green; /**< Składowa zielona koloru */ + uint8_t blue; /**< Składowa niebieska koloru */ + * Strukturya opisująca obrazek wstawiony do wiadomości dla atrubutu +struct gg_msg_richtext_image { + uint16_t unknown1; /**< Nieznane pole o wartości 0x0109 */ + uint32_t size; /**< Rozmiar obrazka */ + uint32_t crc32; /**< Suma kontrolna CRC32 obrazka */ +struct gg_msg_recipients { +struct gg_msg_image_request { +struct gg_msg_image_reply { +#define GG_SEND_MSG_ACK 0x0005 +#define GG_ACK_BLOCKED 0x0001 +#define GG_ACK_DELIVERED 0x0002 +#define GG_ACK_QUEUED 0x0003 +#define GG_ACK_MBOXFULL 0x0004 +#define GG_ACK_NOT_DELIVERED 0x0006 + * Status doręczenia wiadomości. + GG_ACK_DELIVERED, /**< Wiadomość dostarczono. */ + GG_ACK_QUEUED, /**< Wiadomość zakolejkowano z powodu niedostępności odbiorcy. */ + GG_ACK_BLOCKED, /**< Wiadomość zablokowana przez serwer (spam, świąteczne ograniczenia itd.) */ + GG_ACK_MBOXFULL, /**< Wiadomości nie dostarczono z powodu zapełnionej kolejki wiadomości odbiorcy. */ + GG_ACK_NOT_DELIVERED /**< Wiadomości nie dostarczono (tylko dla \c GG_CLASS_CTCP). */ +struct gg_send_msg_ack { +#define GG_RECV_MSG 0x000a +#define GG_DISCONNECTING 0x000b +#define GG_USERLIST_REQUEST 0x0016 +#define GG_XML_EVENT 0x0027 +#define GG_USERLIST_PUT 0x00 +#define GG_USERLIST_PUT_MORE 0x01 +#define GG_USERLIST_GET 0x02 + * \ingroup importexport + GG_USERLIST_PUT, /**< Eksport listy kontaktów. */ + GG_USERLIST_GET, /**< Import listy kontaktów. */ +struct gg_userlist_request { +#define GG_USERLIST_REPLY 0x0010 +#define GG_USERLIST_PUT_REPLY 0x00 +#define GG_USERLIST_PUT_MORE_REPLY 0x02 +#define GG_USERLIST_GET_REPLY 0x06 +#define GG_USERLIST_GET_MORE_REPLY 0x04 + * \ingroup importexport + GG_USERLIST_PUT_REPLY, /**< Wyeksportowano listy kontaktów. */ + GG_USERLIST_GET_REPLY, /**< Zaimportowano listę kontaktów. */ +struct gg_userlist_reply { +#define GG_USERLIST100_PUT 0x00 +#define GG_USERLIST100_GET 0x02 + * \ingroup importexport + * Rodzaj zapytania (10.0). + GG_USERLIST100_PUT, /**< Eksport listy kontaktów. */ + GG_USERLIST100_GET, /**< Import listy kontaktów. */ +#define GG_USERLIST100_FORMAT_TYPE_NONE 0x00 +#define GG_USERLIST100_FORMAT_TYPE_GG70 0x01 +#define GG_USERLIST100_FORMAT_TYPE_GG100 0x02 + * \ingroup importexport + * Typ formatu listy kontaktów (10.0). + GG_USERLIST100_FORMAT_TYPE_NONE, /**< Brak treści listy kontaktów. */ + GG_USERLIST100_FORMAT_TYPE_GG70, /**< Format listy kontaktów zgodny z Gadu-Gadu 7.0. */ + GG_USERLIST100_FORMAT_TYPE_GG100, /**< Format listy kontaktów zgodny z Gadu-Gadu 10.0. */ +#define GG_USERLIST100_REPLY_LIST 0x00 +#define GG_USERLIST100_REPLY_ACK 0x10 +#define GG_USERLIST100_REPLY_REJECT 0x12 + * \ingroup importexport + * Typ odpowiedzi listy kontaktów (10.0). + GG_USERLIST100_REPLY_LIST, /**< W odpowiedzi znajduje się aktualna lista kontaktów na serwerze. */ + GG_USERLIST100_REPLY_ACK, /**< Potwierdzenie odebrania nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się numer nowej wersji listy kontaktów. */ + GG_USERLIST100_REPLY_REJECT, /**< Odmowa przyjęcia nowej wersji listy kontaktów. W polu \c gg_userlist100_reply.version znajduje się numer wersji listy kontaktów aktualnie przechowywanej przez serwer. */ +struct gg_dcc_tiny_packet { + uint8_t type; /* rodzaj pakietu */ +struct gg_dcc_small_packet { + uint32_t type; /* rodzaj pakietu */ +struct gg_dcc_big_packet { + uint32_t type; /* rodzaj pakietu */ + uint32_t dunno1; /* niewiadoma */ + uint32_t dunno2; /* niewiadoma */ + * póki co, nie znamy dokładnie protokołu. nie wiemy, co czemu odpowiada. + * nazwy są niepoważne i tymczasowe. +#define GG_DCC_WANT_FILE 0x0003 /* peer chce plik */ +#define GG_DCC_HAVE_FILE 0x0001 /* więc mu damy */ +#define GG_DCC_HAVE_FILEINFO 0x0003 /* niech ma informacje o pliku */ +#define GG_DCC_GIMME_FILE 0x0006 /* peer jest pewny */ +#define GG_DCC_CATCH_FILE 0x0002 /* wysyłamy plik */ +#define GG_DCC_FILEATTR_READONLY 0x0020 +#define GG_DCC_TIMEOUT_SEND 1800 /* 30 minut */ +#define GG_DCC_TIMEOUT_GET 1800 /* 30 minut */ +#define GG_DCC_TIMEOUT_FILE_ACK 300 /* 5 minut */ +#define GG_DCC_TIMEOUT_VOICE_ACK 300 /* 5 minut */ +#define GG_DCC7_INFO 0x1f + uint32_t uin; /* numer nadawcy */ + uint32_t type; /* sposób połączenia */ + gg_dcc7_id_t id; /* identyfikator połączenia */ + char info[GG_DCC7_INFO_LEN]; /* informacje o połączeniu "ip port" */ + char hash[GG_DCC7_INFO_HASH_LEN];/* skrót "ip" */ +#define GG_DCC7_NEW 0x20 + gg_dcc7_id_t id; /* identyfikator połączenia */ + uint32_t uin_from; /* numer nadawcy */ + uint32_t uin_to; /* numer odbiorcy */ + uint32_t type; /* rodzaj transmisji */ + unsigned char filename[GG_DCC7_FILENAME_LEN]; /* nazwa pliku */ + uint32_t size; /* rozmiar pliku */ + uint32_t size_hi; /* rozmiar pliku (starsze bajty) */ + unsigned char hash[GG_DCC7_HASH_LEN]; /* hash SHA1 */ +#define GG_DCC7_ACCEPT 0x21 + uint32_t uin; /* numer przyjmującego połączenie */ + gg_dcc7_id_t id; /* identyfikator połączenia */ + uint32_t offset; /* offset przy wznawianiu transmisji */ + uint32_t dunno1; /* 0x00000000 */ +#define GG_DCC7_TYPE_P2P 0x00000001 /**< Połączenie bezpośrednie */ +#define GG_DCC7_TYPE_SERVER 0x00000002 /**< Połączenie przez serwer */ +#define GG_DCC7_REJECT 0x22 + uint32_t uin; /**< Numer odrzucającego połączenie */ + gg_dcc7_id_t id; /**< Identyfikator połączenia */ + uint32_t reason; /**< Powód rozłączenia */ +#define GG_DCC7_REJECT_BUSY 0x00000001 /**< Połączenie bezpośrednie już trwa, nie umiem obsłużyć więcej */ +#define GG_DCC7_REJECT_USER 0x00000002 /**< Użytkownik odrzucił połączenie */ +#define GG_DCC7_REJECT_VERSION 0x00000006 /**< Druga strona ma wersję klienta nieobsługującą połączeń bezpośrednich tego typu */ +#define GG_DCC7_ID_REQUEST 0x23 +struct gg_dcc7_id_request { + uint32_t type; /**< Rodzaj tranmisji */ +#define GG_DCC7_TYPE_VOICE 0x00000001 /**< Transmisja głosu */ +#define GG_DCC7_TYPE_FILE 0x00000004 /**< transmisja pliku */ +#define GG_DCC7_ID_REPLY 0x23 +struct gg_dcc7_id_reply { + uint32_t type; /** Rodzaj transmisji */ + gg_dcc7_id_t id; /** Przyznany identyfikator */ +#define GG_DCC7_DUNNO1 0x24 +#define GG_DCC7_TIMEOUT_CONNECT 10 /* 10 sekund */ +#define GG_DCC7_TIMEOUT_SEND 1800 /* 30 minut */ +#define GG_DCC7_TIMEOUT_GET 1800 /* 30 minut */ +#define GG_DCC7_TIMEOUT_FILE_ACK 300 /* 5 minut */ +#define GG_DCC7_TIMEOUT_VOICE_ACK 300 /* 5 minut */ +#endif /* __GG_LIBGADU_H */ + * c-indentation-style: k&r + * indent-tabs-mode: notnil --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/libpurple.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,22 @@
+#include <libpurple/gaim-compat.h> +#include <libpurple/connection.h> +#include <libpurple/conversation.h> +#include <libpurple/core.h> +#include <libpurple/debug.h> +#include <libpurple/dnsquery.h> +#include <libpurple/ft.h> +#include <libpurple/imgstore.h> +#include <libpurple/network.h> +#include <libpurple/notify.h> +#include <libpurple/plugin.h> +#include <libpurple/pounce.h> +#include <libpurple/prefs.h> +#include <libpurple/privacy.h> +#include <libpurple/proxy.h> +#include <libpurple/request.h> +#include <libpurple/roomlist.h> +#include <libpurple/signals.h> +#include <libpurple/sslconn.h> +#include <libpurple/sound.h> +#include <libpurple/util.h> +#include <libpurple/whiteboard.h> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/libymsg.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,402 @@
+ * @file libymsg.h The Yahoo! and Yahoo! JAPAN Protocol Plugins + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define YAHOO_PAGER_HOST_REQ_URL "http://vcs1.msg.yahoo.com/capacity" +#define YAHOO_PAGER_HOST_FALLBACK "scsa.msg.yahoo.com" +#define YAHOO_PAGER_PORT 5050 +#define YAHOO_PAGER_PORT_P2P 5101 +#define YAHOO_LOGIN_URL "https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=%s" +#define YAHOO_TOKEN_URL "https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login=%s&passwd=%s&chal=%s" +#define YAHOO_P2P_KEEPALIVE_SECS 300 +#define YAHOO_P2P_SERVER_TIMEOUT 10 +#define YAHOO_PROFILE_URL "http://profiles.yahoo.com/" +#define YAHOO_MAIL_URL "http://rd.yahoo.com/messenger/client/?http://mail.yahoo.com/" +#define YAHOO_XFER_HOST "filetransfer.msg.yahoo.com" +#define YAHOO_XFER_PORT 80 +#define YAHOO_XFER_RELAY_HOST "relay.msg.yahoo.com" +#define YAHOO_XFER_RELAY_PORT 80 +#define YAHOO_ROOMLIST_URL "http://insider.msg.yahoo.com/ycontent/" +#define YAHOO_ROOMLIST_LOCALE "us" +/* Yahoo! JAPAN stuff */ +#define YAHOOJP_PAGER_HOST_REQ_URL "http://cs1.yahoo.co.jp/capacity" +#define YAHOOJP_TOKEN_URL "https://login.yahoo.co.jp/config/pwtoken_get?src=ymsgr&ts=&login=%s&passwd=%s&chal=%s" +#define YAHOOJP_LOGIN_URL "https://login.yahoo.co.jp/config/pwtoken_login?src=ymsgr&ts=&token=%s" +#define YAHOOJP_PROFILE_URL "http://profiles.yahoo.co.jp/" +#define YAHOOJP_MAIL_URL "http://mail.yahoo.co.jp/" +#define YAHOOJP_XFER_HOST "filetransfer.msg.yahoo.co.jp" +#define YAHOOJP_WEBCAM_HOST "wc.yahoo.co.jp" +/* not sure, must test: */ +#define YAHOOJP_XFER_RELAY_HOST "relay.msg.yahoo.co.jp" +#define YAHOOJP_XFER_RELAY_PORT 80 +#define YAHOOJP_ROOMLIST_URL "http://insider.msg.yahoo.co.jp/ycontent/" +#define YAHOOJP_ROOMLIST_LOCALE "ja" +#define YAHOO_AUDIBLE_URL "http://l.yimg.com/pu/dl/aud" +#define WEBMESSENGER_URL "http://login.yahoo.com/config/login?.src=pg" +#define YAHOO_SMS_CARRIER_URL "http://validate.msg.yahoo.com" +#define YAHOO_USERINFO_URL "http://address.yahoo.com/yab/us?v=XM&sync=1&tags=short&useutf8=1&noclear=1&legenc=codepage-1252" +#define YAHOOJP_USERINFO_URL "http://address.yahoo.co.jp/yab/jp?v=XM&sync=1&tags=short&useutf8=1&noclear=1&legenc=codepage-1252" +#define YAHOO_PICURL_SETTING "picture_url" +#define YAHOO_PICCKSUM_SETTING "picture_checksum" +#define YAHOO_PICEXPIRE_SETTING "picture_expire" +#define YAHOO_STATUS_TYPE_OFFLINE "offline" +#define YAHOO_STATUS_TYPE_AVAILABLE "available" +#define YAHOO_STATUS_TYPE_BRB "brb" +#define YAHOO_STATUS_TYPE_BUSY "busy" +#define YAHOO_STATUS_TYPE_NOTATHOME "notathome" +#define YAHOO_STATUS_TYPE_NOTATDESK "notatdesk" +#define YAHOO_STATUS_TYPE_NOTINOFFICE "notinoffice" +#define YAHOO_STATUS_TYPE_ONPHONE "onphone" +#define YAHOO_STATUS_TYPE_ONVACATION "onvacation" +#define YAHOO_STATUS_TYPE_OUTTOLUNCH "outtolunch" +#define YAHOO_STATUS_TYPE_STEPPEDOUT "steppedout" +#define YAHOO_STATUS_TYPE_AWAY "away" +#define YAHOO_STATUS_TYPE_INVISIBLE "invisible" +#define YAHOO_STATUS_TYPE_MOBILE "mobile" +#define YAHOO_CLIENT_VERSION_ID "4194239" +#define YAHOO_CLIENT_VERSION "9.0.0.2162" +#define YAHOOJP_CLIENT_VERSION_ID "4186047" +#define YAHOOJP_CLIENT_VERSION "9.0.0.1727" +#define YAHOO_CLIENT_USERAGENT "Mozilla/5.0" +#define YAHOO_CLIENT_USERAGENT_ALIAS "Mozilla/4.0 (compatible; MSIE 5.5)" +/* Index into attention types list. */ + YAHOO_PKT_TYPE_SERVER = 0, + YAHOO_P2P_WE_ARE_CLIENT =0, + YAHOO_P2P_WE_ARE_SERVER +} yahoo_p2p_connection_type; + YAHOO_STATUS_AVAILABLE = 0, + YAHOO_STATUS_NOTATHOME, + YAHOO_STATUS_NOTATDESK, + YAHOO_STATUS_NOTINOFFICE, + YAHOO_STATUS_ONVACATION, + YAHOO_STATUS_OUTTOLUNCH, + YAHOO_STATUS_STEPPEDOUT, + YAHOO_STATUS_INVISIBLE = 12, + YAHOO_STATUS_CUSTOM = 99, + YAHOO_STATUS_IDLE = 999, + YAHOO_STATUS_WEBLOGIN = 0x5a55aa55, + YAHOO_STATUS_OFFLINE = 0x5a55aa56, /* don't ask */ + YAHOO_STATUS_TYPING = 0x16, + YAHOO_STATUS_DISCONNECTED = 0xffffffff /* in ymsg 15. doesnt mean the normal sense of 'disconnected' */ + * Yahoo federated networks. Key 241 in ymsg. + * If it doesn't exist, it is on Yahoo's netowrk. + * It if does exist, send to another IM network. + YAHOO_FEDERATION_NONE = 0, /* No federation - Yahoo! network */ + YAHOO_FEDERATION_OCS = 1, /* LCS or OCS private networks */ + YAHOO_FEDERATION_MSN = 2, /* MSN or Windows Live network */ + YAHOO_FEDERATION_IBM = 9, /* IBM/Sametime network */ + YAHOO_FEDERATION_PBX = 100 /* Yahoo! Pingbox service */ +struct yahoo_buddy_icon_upload_data { + yahoo_p2p_connection_type connection_type; +typedef struct _YahooPersonalDetails { + PurpleCircBuffer *txbuf; + char **profiles; /* Multiple profiles can be associated with an account */ + YahooPersonalDetails ypd; + * This is used to keep track of the IMVironment chosen + * by people you talk to. We don't do very much with + * this right now... but at least now if the remote user + * selects an IMVironment we won't reset it back to the + GHashTable *imvironments; + GString *tmp_serv_blist, *tmp_serv_ilist, *tmp_serv_plist; + unsigned int conf_id; /* just a counter */ + char *pending_chat_room; + char *pending_chat_topic; + char *pending_chat_goto; + gboolean wm; /* connected w/ web messenger method */ + /* picture aka buddy icon stuff */ + /* ew. we have to check the icon before we connect, + * but can't upload it til we're connected. */ + struct yahoo_buddy_icon_upload_data *picture_upload_todo; + PurpleProxyConnectData *buddy_icon_connect_data; + struct _YchtConn *ycht; + * This linked list contains PurpleUtilFetchUrlData structs + * for when we lookup people profile or photo information. + GHashTable *xfer_peer_idstring_map;/* Hey, i dont know, but putting this HashTable next to friends gives a run time fault... */ + GSList *cookies;/* contains all cookies, including _y and _t */ + PurpleNetworkListenData *listen_data; + * We may receive a list15 in multiple packets with no prior warning as to how many we'll be getting; + * the server expects us to keep track of the group for which it is sending us contact names. + char *current_list15_grp; + GHashTable *peers; /* information about p2p data */ + int yahoo_local_p2p_server_fd; + int yahoo_p2p_server_watcher; + GHashTable *sms_carrier; /* sms carrier data */ + guint yahoo_p2p_server_timeout_handle; +#define YAHOO_MAX_STATUS_MESSAGE_LENGTH (255) + * Current Maximum Length for Instant Messages + * This was found by experiment. + * The YMSG protocol allows a message of up to 948 bytes, but the official client + * limits to 800 characters. According to experiments I conducted, it seems that + * the discrepancy is to allow some leeway for messages with mixed single- and + * multi-byte characters, as I was able to send messages of 840 and 932 bytes + * by using some multibyte characters (some random Chinese or Japanese characters, + * to be precise). - rekkanoryo +#define YAHOO_MAX_MESSAGE_LENGTH_BYTES 948 +#define YAHOO_MAX_MESSAGE_LENGTH_CHARS 800 +/* sometimes i wish prpls could #include things from other prpls. then i could just + * use the routines from libfaim and not have to admit to knowing how they work. */ +#define yahoo_put16(buf, data) ( \ + (*(buf) = (unsigned char)((data)>>8)&0xff), \ + (*((buf)+1) = (unsigned char)(data)&0xff), \ +#define yahoo_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff)) +#define yahoo_put32(buf, data) ( \ + (*((buf)) = (unsigned char)((data)>>24)&0xff), \ + (*((buf)+1) = (unsigned char)((data)>>16)&0xff), \ + (*((buf)+2) = (unsigned char)((data)>>8)&0xff), \ + (*((buf)+3) = (unsigned char)(data)&0xff), \ +#define yahoo_get32(buf) ((((*(buf))<<24)&0xff000000) + \ + (((*((buf)+1))<<16)&0x00ff0000) + \ + (((*((buf)+2))<< 8)&0x0000ff00) + \ + (((*((buf)+3) )&0x000000ff))) +void yahoo_init_colorht(void); +void yahoo_dest_colorht(void); +char *yahoo_codes_to_html(const char *x); + * This function takes a normal HTML message and converts it to the message + * format used by Yahoo, which uses a frankensteinish combination of ANSI + * escape codes and broken HTML. + * It results in slightly different output than would be sent by official + * Yahoo clients. The two main differences are: + * 1. We always close all tags, whereas official Yahoo clients leave tags + * dangling open at the end of each message (and the client treats them + * 2. We always close inner tags first before closing outter tags. + * For example, if you want to send this message: + * <b> bold <i> bolditalic </i></b><i> italic </i> + * Official Yahoo clients would send: + * ESC[1m bold ESC[2m bolditalic ESC[x1m italic + * ESC[1m bold ESC[2m bolditalic ESC[x2mESC[x1mESC[2m italic ESC[x2m +char *yahoo_html_to_codes(const char *src); +yahoo_account_use_http_proxy(PurpleConnection *conn); + * Encode some text to send to the yahoo server. + * @param gc The connection handle. + * @param str The null terminated utf8 string to encode. + * @param utf8 If not @c NULL, whether utf8 is okay or not. + * Even if it is okay, we may not use it. If we + * used it, we set this to @c TRUE, else to + * @c FALSE. If @c NULL, false is assumed, and + * it is not dereferenced. + * @return The g_malloced string in the appropriate encoding. +char *yahoo_string_encode(PurpleConnection *gc, const char *str, gboolean *utf8); + * Decode some text received from the server. + * @param gc The gc handle. + * @param str The null terminated string to decode. + * @param utf8 Did the server tell us it was supposed to be utf8? + * @return The decoded, utf-8 string, which must be g_free()'d. +char *yahoo_string_decode(PurpleConnection *gc, const char *str, gboolean utf8); +char *yahoo_convert_to_numeric(const char *str); +YahooFederation yahoo_get_federation_from_name(const char *who); +void yahoo_get_info(PurpleConnection *gc, const char *name); +/* libymsg.h - these functions were formerly static but need not to be for the + * new two-prpl model. */ +const char *yahoo_list_icon(PurpleAccount *a, PurpleBuddy *b); +const char *yahoo_list_emblem(PurpleBuddy *b); +char *yahoo_status_text(PurpleBuddy *b); +void yahoo_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full); +GList *yahoo_status_types(PurpleAccount *account); +GList *yahoo_blist_node_menu(PurpleBlistNode *node); +void yahoo_login(PurpleAccount *account); +void yahoo_close(PurpleConnection *gc); +int yahoo_send_im(PurpleConnection *gc, const char *who, const char *what, PurpleMessageFlags flags); +unsigned int yahoo_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state); +void yahoo_set_status(PurpleAccount *account, PurpleStatus *status); +void yahoo_set_idle(PurpleConnection *gc, int idle); +void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *g); +void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group); +void yahoo_add_deny(PurpleConnection *gc, const char *who); +void yahoo_rem_deny(PurpleConnection *gc, const char *who); +void yahoo_set_permit_deny(PurpleConnection *gc); +void yahoo_keepalive(PurpleConnection *gc); +void yahoo_change_buddys_group(PurpleConnection *gc, const char *who, const char *old_group, const char *new_group); +void yahoo_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies); +gboolean yahoo_offline_message(const PurpleBuddy *buddy); +gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type); +GList *yahoo_attention_types(PurpleAccount *account); +GList *yahoo_actions(PurplePlugin *plugin, gpointer context); +void yahoopurple_register_commands(void); +PurpleCmdRet yahoopurple_cmd_buzz(PurpleConversation *c, const gchar *cmd, gchar **args, gchar **error, void *data); +PurpleCmdRet yahoopurple_cmd_chat_join(PurpleConversation *conv, const char *cmd, char **args, char **error, void *data); +PurpleCmdRet yahoopurple_cmd_chat_list(PurpleConversation *conv, const char *cmd, char **args, char **error, void *data); +/* needed for xfer, thought theyd be useful for other enhancements later on + Returns list of cookies stored in yahoo_data formatted as a single null terminated string + returned value must be g_freed +gchar* yahoo_get_cookies(PurpleConnection *gc); +/* send p2p pkt containing our encoded ip, asking peer to connect to us */ +void yahoo_send_p2p_pkt(PurpleConnection *gc, const char *who, int val_13); +#endif /* _LIBYMSG_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/log.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,583 @@
+ * @file log.h Logging API + * @see @ref log-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/******************************************************** + * DATA STRUCTURES ************************************** + ********************************************************/ +typedef struct _PurpleLog PurpleLog; +typedef struct _PurpleLogLogger PurpleLogLogger; +typedef struct _PurpleLogCommonLoggerData PurpleLogCommonLoggerData; +typedef struct _PurpleLogSet PurpleLogSet; + PURPLE_LOG_READ_NO_NEWLINE = 1 +#include "conversation.h" +typedef void (*PurpleLogSetCallback) (GHashTable *sets, PurpleLogSet *set); + * This struct gets filled out and is included in the PurpleLog. It contains everything + * needed to write and read from logs. +struct _PurpleLogLogger { + char *name; /**< The logger's name */ + char *id; /**< an identifier to refer to this logger */ + /** This gets called when the log is first created. + I don't think this is actually needed. */ + void (*create)(PurpleLog *log); + /** This is used to write to the log file */ + gsize (*write)(PurpleLog *log, + PurpleMessageFlags type, + /** Called when the log is destroyed */ + void (*finalize)(PurpleLog *log); + /** This function returns a sorted GList of available PurpleLogs */ + GList *(*list)(PurpleLogType type, const char *name, PurpleAccount *account); + /** Given one of the logs returned by the logger's list function, + * this returns the contents of the log in GtkIMHtml markup */ + char *(*read)(PurpleLog *log, PurpleLogReadFlags *flags); + /** Given one of the logs returned by the logger's list function, + * this returns the size of the log in bytes */ + int (*size)(PurpleLog *log); + /** Returns the total size of all the logs. If this is undefined a default + * implementation is used */ + int (*total_size)(PurpleLogType type, const char *name, PurpleAccount *account); + /** This function returns a sorted GList of available system PurpleLogs */ + GList *(*list_syslog)(PurpleAccount *account); + /** Adds PurpleLogSets to a GHashTable. By passing the data in the PurpleLogSets + * to list, the caller can get every available PurpleLog from the logger. + * Loggers using purple_log_common_writer() (or otherwise storing their + * logs in the same directory structure as the stock loggers) do not + * need to implement this function. + * Loggers which implement this function must create a PurpleLogSet, + * then call @a cb with @a sets and the newly created PurpleLogSet. */ + void (*get_log_sets)(PurpleLogSetCallback cb, GHashTable *sets); + /* Attempts to delete the specified log, indicating success or failure */ + gboolean (*remove)(PurpleLog *log); + /* Tests whether a log is deletable */ + gboolean (*is_deletable)(PurpleLog *log); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + * A log. Not the wooden type. + PurpleLogType type; /**< The type of log this is */ + char *name; /**< The name of this log */ + PurpleAccount *account; /**< The account this log is taking + PurpleConversation *conv; /**< The conversation being logged */ + time_t time; /**< The time this conversation + started, converted to the local timezone */ + PurpleLogLogger *logger; /**< The logging mechanism this log + void *logger_data; /**< Data used by the log logger */ + struct tm *tm; /**< The time this conversation + started, saved with original + timezone data, if available and + if struct tm has the BSD + timezone fields, else @c NULL. + Do NOT modify anything in this struct.*/ + /* IMPORTANT: Some code in log.c allocates these without zeroing them. + * IMPORTANT: Update that code if you add members here. */ + * A common logger_data struct containing a file handle and path, as well + * as a pointer to something else for additional data. +struct _PurpleLogCommonLoggerData { + * Describes available logs. + * By passing the elements of this struct to purple_log_get_logs(), the caller + * can get all available PurpleLogs. + PurpleLogType type; /**< The type of logs available */ + char *name; /**< The name of the logs available */ + PurpleAccount *account; /**< The account the available logs + took place on. This will be + @c NULL if the account no longer + exists. (Depending on a + logger's implementation of + list, it may not be possible + gboolean buddy; /**< Is this (account, name) a buddy + char *normalized_name; /**< The normalized version of + @a name. It must be set, and + may be set to the same pointer + /* IMPORTANT: Some code in log.c allocates these without zeroing them. + * IMPORTANT: Update that code if you add members here. */ +/***************************************/ +/** @name Log Functions */ +/***************************************/ + * @param type The type of log this is. + * @param name The name of this conversation (buddy name, chat name, + * @param account The account the conversation is occurring on + * @param conv The conversation being logged + * @param time The time this conversation started + * @param tm The time this conversation started, with timezone data, + * if available and if struct tm has the BSD timezone fields. +PurpleLog *purple_log_new(PurpleLogType type, const char *name, PurpleAccount *account, + PurpleConversation *conv, time_t time, const struct tm *tm); + * @param log The log to destroy +void purple_log_free(PurpleLog *log); + * Writes to a log file. Assumes you have checked preferences already. + * @param log The log to write to + * @param type The type of message being logged + * @param from Whom this message is coming from, or @c NULL for + * @param time A timestamp in UNIX time + * @param message The message to log +void purple_log_write(PurpleLog *log, + PurpleMessageFlags type, + * @param log The log to read from + * @param flags The returned logging flags. + * @return The contents of this log in Purple Markup. +char *purple_log_read(PurpleLog *log, PurpleLogReadFlags *flags); + * Returns a list of all available logs + * @param type The type of the log + * @param name The name of the log + * @param account The account + * @return A sorted list of PurpleLogs +GList *purple_log_get_logs(PurpleLogType type, const char *name, PurpleAccount *account); + * Returns a GHashTable of PurpleLogSets. + * A "log set" here means the information necessary to gather the + * PurpleLogs for a given buddy/chat. This information would be passed + * to purple_log_list to get a list of PurpleLogs. + * The primary use of this function is to get a list of everyone the + * user has ever talked to (assuming he or she uses logging). + * The GHashTable that's returned will free all log sets in it when + * destroyed. If a PurpleLogSet is removed from the GHashTable, it + * must be freed with purple_log_set_free(). + * @return A GHashTable of all available unique PurpleLogSets +GHashTable *purple_log_get_log_sets(void); + * Returns a list of all available system logs + * @param account The account + * @return A sorted list of PurpleLogs +GList *purple_log_get_system_logs(PurpleAccount *account); + * Returns the size of a log + * @return The size of the log, in bytes +int purple_log_get_size(PurpleLog *log); + * Returns the size, in bytes, of all available logs in this conversation + * @param type The type of the log + * @param name The name of the log + * @param account The account + * @return The size in bytes +int purple_log_get_total_size(PurpleLogType type, const char *name, PurpleAccount *account); + * Returns the activity score of a log, based on total size in bytes, + * which is then decayed based on age + * @param type The type of the log + * @param name The name of the log + * @param account The account + * @return The activity score +int purple_log_get_activity_score(PurpleLogType type, const char *name, PurpleAccount *account); + * Tests whether a log is deletable + * A return value of @c FALSE indicates that purple_log_delete() will fail on this + * log, unless something changes between the two calls. A return value of @c TRUE, + * however, does not guarantee the log can be deleted. + * @return A boolean indicating if the log is deletable +gboolean purple_log_is_deletable(PurpleLog *log); + * @return A boolean indicating success or failure +gboolean purple_log_delete(PurpleLog *log); + * Returns the default logger directory Purple uses for a given account + * and username. This would be where Purple stores logs created by + * the built-in text or HTML loggers. + * @param type The type of the log. + * @param name The name of the log. + * @param account The account. + * @return The default logger directory for Purple. +char *purple_log_get_log_dir(PurpleLogType type, const char *name, PurpleAccount *account); + * Implements GCompareFunc for PurpleLogs + * @param z Another PurpleLog + * @return A value as specified by GCompareFunc +gint purple_log_compare(gconstpointer y, gconstpointer z); + * Implements GCompareFunc for PurpleLogSets + * @param y A PurpleLogSet + * @param z Another PurpleLogSet + * @return A value as specified by GCompareFunc +gint purple_log_set_compare(gconstpointer y, gconstpointer z); + * @param set The log set to destroy +void purple_log_set_free(PurpleLogSet *set); +/******************************************/ +/** @name Common Logger Functions */ +/******************************************/ + * Opens a new log file in the standard Purple log location + * with the given file extension, named for the current time, + * for writing. If a log file is already open, the existing + * file handle is retained. The log's logger_data value is + * set to a PurpleLogCommonLoggerData struct containing the log + * file handle and log path. + * This function is intended to be used as a "common" + * implementation of a logger's @c write function. + * It should only be passed to purple_log_logger_new() and never + * @param log The log to write to. + * @param ext The file extension to give to this log file. +void purple_log_common_writer(PurpleLog *log, const char *ext); + * Returns a sorted GList of PurpleLogs of the requested type. + * This function should only be used with logs that are written + * with purple_log_common_writer(). It's intended to be used as + * a "common" implementation of a logger's @c list function. + * It should only be passed to purple_log_logger_new() and never + * @param type The type of the logs being listed. + * @param name The name of the log. + * @param account The account of the log. + * @param ext The file extension this log format uses. + * @param logger A reference to the logger struct for this log. + * @return A sorted GList of PurpleLogs matching the parameters. +GList *purple_log_common_lister(PurpleLogType type, const char *name, + PurpleAccount *account, const char *ext, + PurpleLogLogger *logger); + * Returns the total size of all the logs for a given user, with + * This function should only be used with logs that are written + * with purple_log_common_writer(). It's intended to be used as + * a "common" implementation of a logger's @c total_size function. + * It should only be passed to purple_log_logger_new() and never + * @param type The type of the logs being sized. + * @param name The name of the logs to size + * (e.g. the username or chat name). + * @param account The account of the log. + * @param ext The file extension this log format uses. + * @return The size of all the logs with the specified extension + * for the specified user. +int purple_log_common_total_sizer(PurpleLogType type, const char *name, + PurpleAccount *account, const char *ext); + * Returns the size of a given PurpleLog. + * This function should only be used with logs that are written + * with purple_log_common_writer(). It's intended to be used as + * a "common" implementation of a logger's @c size function. + * It should only be passed to purple_log_logger_new() and never + * @param log The PurpleLog to size. + * @return An integer indicating the size of the log in bytes. +int purple_log_common_sizer(PurpleLog *log); + * This function should only be used with logs that are written + * with purple_log_common_writer(). It's intended to be used as + * a "common" implementation of a logger's @c delete function. + * It should only be passed to purple_log_logger_new() and never + * @param log The PurpleLog to delete. + * @return A boolean indicating success or failure. +gboolean purple_log_common_deleter(PurpleLog *log); + * Checks to see if a log is deletable + * This function should only be used with logs that are written + * with purple_log_common_writer(). It's intended to be used as + * a "common" implementation of a logger's @c is_deletable function. + * It should only be passed to purple_log_logger_new() and never + * @param log The PurpleLog to check. + * @return A boolean indicating if the log is deletable. +gboolean purple_log_common_is_deletable(PurpleLog *log); +/******************************************/ +/** @name Logger Functions */ +/******************************************/ + * @param id The logger's id. + * @param name The logger's name. + * @param functions The number of functions being passed. The following + * functions are currently available (in order): @c create, + * @c write, @c finalize, @c list, @c read, @c size, + * @c total_size, @c list_syslog, @c get_log_sets, + * @c remove, @c is_deletable. + * For details on these functions, see PurpleLogLogger. + * Functions may not be skipped. For example, passing + * @c create and @c write is acceptable (for a total of + * two functions). Passing @c create and @c finalize, + * however, is not. To accomplish that, the caller must + * pass @c create, @c NULL (a placeholder for @c write), + * and @c finalize (for a total of 3 functions). + * @return The new logger +PurpleLogLogger *purple_log_logger_new(const char *id, const char *name, int functions, ...); + * @param logger The logger to free +void purple_log_logger_free(PurpleLogLogger *logger); + * @param logger The new logger to add +void purple_log_logger_add (PurpleLogLogger *logger); + * @param logger The logger to remove +void purple_log_logger_remove (PurpleLogLogger *logger); + * Sets the current logger + * @param logger The logger to set +void purple_log_logger_set (PurpleLogLogger *logger); + * Returns the current logger + * @return logger The current logger +PurpleLogLogger *purple_log_logger_get (void); + * Returns a GList containing the IDs and names of the registered + * @return The list of IDs and names. +GList *purple_log_logger_get_options(void); +/**************************************************************************/ +/** @name Log Subsystem */ +/**************************************************************************/ + * Initializes the log subsystem. +void purple_log_init(void); + * Returns the log subsystem handle. + * @return The log subsystem handle. +void *purple_log_get_handle(void); + * Uninitializes the log subsystem. +void purple_log_uninit(void); +#endif /* _PURPLE_LOG_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/marshallers.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,76 @@
+#ifndef __purple_smarshal_MARSHAL_H__ +#define __purple_smarshal_MARSHAL_H__ +#include <glib-object.h> +/* VOID:POINTER,POINTER,OBJECT (./marshallers.list:1) */ +extern void purple_smarshal_VOID__POINTER_POINTER_OBJECT (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* BOOLEAN:OBJECT,POINTER,STRING (./marshallers.list:2) */ +extern void purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:STRING,STRING (./marshallers.list:3) */ +extern void purple_smarshal_VOID__STRING_STRING (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:STRING,STRING,DOUBLE (./marshallers.list:4) */ +extern void purple_smarshal_VOID__STRING_STRING_DOUBLE (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:ENUM,STRING,STRING (./marshallers.list:5) */ +extern void purple_smarshal_VOID__ENUM_STRING_STRING (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:ENUM,STRING,STRING,BOOLEAN (./marshallers.list:6) */ +extern void purple_smarshal_VOID__ENUM_STRING_STRING_BOOLEAN (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:FLAGS,FLAGS (./marshallers.list:7) */ +extern void purple_smarshal_VOID__FLAGS_FLAGS (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +/* VOID:STRING,STRING,OBJECT,OBJECT (./marshallers.list:8) */ +extern void purple_smarshal_VOID__STRING_STRING_OBJECT_OBJECT (GClosure *closure, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +#endif /* __purple_smarshal_MARSHAL_H__ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media-gst.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,201 @@
+ * @file media-gst.h Media API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_GST_H_ +#define _PURPLE_MEDIA_GST_H_ +#include "mediamanager.h" +#define PURPLE_TYPE_MEDIA_ELEMENT_TYPE (purple_media_element_type_get_type()) +#define PURPLE_TYPE_MEDIA_ELEMENT_INFO (purple_media_element_info_get_type()) +#define PURPLE_MEDIA_ELEMENT_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo)) +#define PURPLE_MEDIA_ELEMENT_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo)) +#define PURPLE_IS_MEDIA_ELEMENT_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO)) +#define PURPLE_IS_MEDIA_ELEMENT_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_ELEMENT_INFO)) +#define PURPLE_MEDIA_ELEMENT_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfo)) +/** An opaque structure representing an audio/video source/sink. */ +typedef struct _PurpleMediaElementInfo PurpleMediaElementInfo; +typedef struct _PurpleMediaElementInfoClass PurpleMediaElementInfoClass; +typedef GstElement *(*PurpleMediaElementCreateCallback)(PurpleMedia *media, + const gchar *session_id, const gchar *participant); + PURPLE_MEDIA_ELEMENT_NONE = 0, /** empty element */ + PURPLE_MEDIA_ELEMENT_AUDIO = 1, /** supports audio */ + PURPLE_MEDIA_ELEMENT_VIDEO = 1 << 1, /** supports video */ + PURPLE_MEDIA_ELEMENT_AUDIO_VIDEO = PURPLE_MEDIA_ELEMENT_AUDIO + | PURPLE_MEDIA_ELEMENT_VIDEO, /** supports audio and video */ + PURPLE_MEDIA_ELEMENT_NO_SRCS = 0, /** has no src pads */ + PURPLE_MEDIA_ELEMENT_ONE_SRC = 1 << 2, /** has one src pad */ + PURPLE_MEDIA_ELEMENT_MULTI_SRC = 1 << 3, /** has multiple src pads */ + PURPLE_MEDIA_ELEMENT_REQUEST_SRC = 1 << 4, /** src pads must be requested */ + PURPLE_MEDIA_ELEMENT_NO_SINKS = 0, /** has no sink pads */ + PURPLE_MEDIA_ELEMENT_ONE_SINK = 1 << 5, /** has one sink pad */ + PURPLE_MEDIA_ELEMENT_MULTI_SINK = 1 << 6, /** has multiple sink pads */ + PURPLE_MEDIA_ELEMENT_REQUEST_SINK = 1 << 7, /** sink pads must be requested */ + PURPLE_MEDIA_ELEMENT_UNIQUE = 1 << 8, /** This element is unique and + only one instance of it should + be created at a time */ + PURPLE_MEDIA_ELEMENT_SRC = 1 << 9, /** can be set as an active src */ + PURPLE_MEDIA_ELEMENT_SINK = 1 << 10, /** can be set as an active sink */ +} PurpleMediaElementType; + * Gets the element type's GType. + * @return The element type's GType. +GType purple_media_element_type_get_type(void); + * Gets the element info's GType. + * @return The element info's GType. +GType purple_media_element_info_get_type(void); + * Gets the source from a session + * @param media The media object the session is in. + * @param sess_id The session id of the session to get the source from. + * @return The source retrieved. +GstElement *purple_media_get_src(PurpleMedia *media, const gchar *sess_id); + * Gets the tee from a given session/stream. + * @param media The instance to get the tee from. + * @param session_id The id of the session to get the tee from. + * @param participant Optionally, the participant of the stream to get the tee from. + * @return The GstTee element from the chosen session/stream. +GstElement *purple_media_get_tee(PurpleMedia *media, + const gchar *session_id, const gchar *participant); + * Gets the pipeline from the media manager. + * @param manager The media manager to get the pipeline from. + * @return The pipeline. +GstElement *purple_media_manager_get_pipeline(PurpleMediaManager *manager); + * Returns a GStreamer source or sink for audio or video. + * @param manager The media manager to use to obtain the source/sink. + * @param type The type of source/sink to get. + * @param media The media call this element is requested for. + * @param session_id The id of the session this element is requested for or NULL. + * @param participant The remote user this element is requested for or NULL. +GstElement *purple_media_manager_get_element(PurpleMediaManager *manager, + PurpleMediaSessionType type, PurpleMedia *media, + const gchar *session_id, const gchar *participant); +PurpleMediaElementInfo *purple_media_manager_get_element_info( + PurpleMediaManager *manager, const gchar *name); +gboolean purple_media_manager_register_element(PurpleMediaManager *manager, + PurpleMediaElementInfo *info); +gboolean purple_media_manager_unregister_element(PurpleMediaManager *manager, +gboolean purple_media_manager_set_active_element(PurpleMediaManager *manager, + PurpleMediaElementInfo *info); +PurpleMediaElementInfo *purple_media_manager_get_active_element( + PurpleMediaManager *manager, PurpleMediaElementType type); + * Reduces media formats supported by the video source to given set. + * Useful to force negotiation of smaller picture resolution more suitable for + * use with particular codec and communication protocol without rescaling. + * @param manager The media manager to set the media formats. + * @param caps Set of allowed media formats. +void purple_media_manager_set_video_caps(PurpleMediaManager *manager, + * Returns current set of media formats limiting the output from video source. + * @param manager The media manager to get the media formats from. + * @return @c GstCaps limiting the video source's formats. +GstCaps *purple_media_manager_get_video_caps(PurpleMediaManager *manager); +gchar *purple_media_element_info_get_id(PurpleMediaElementInfo *info); +gchar *purple_media_element_info_get_name(PurpleMediaElementInfo *info); +PurpleMediaElementType purple_media_element_info_get_element_type( + PurpleMediaElementInfo *info); +GstElement *purple_media_element_info_call_create( + PurpleMediaElementInfo *info, PurpleMedia *media, + const gchar *session_id, const gchar *participant); +#endif /* _PURPLE_MEDIA_GST_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,446 @@
+ * @file media.h Media API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_H_ +#define _PURPLE_MEDIA_H_ +#include "media/candidate.h" +#include "media/codec.h" +#include "media/enum-types.h" +#include <glib-object.h> +#define PURPLE_TYPE_MEDIA (purple_media_get_type()) +#define PURPLE_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA, PurpleMedia)) +#define PURPLE_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA, PurpleMediaClass)) +#define PURPLE_IS_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA)) +#define PURPLE_IS_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA)) +#define PURPLE_MEDIA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA, PurpleMediaClass)) +/** An opaque structure representing a media call. */ +typedef struct _PurpleMedia PurpleMedia; + * Gets the media class's GType + * @return The media class's GType. +GType purple_media_get_type(void); + * Gets a list of session IDs. + * @param media The media session from which to retrieve session IDs. + * @return GList of session IDs. The caller must free the list. +GList *purple_media_get_session_ids(PurpleMedia *media); + * Gets the PurpleAccount this media session is on. + * @param media The media session to retrieve the account from. + * @return The account retrieved. +PurpleAccount *purple_media_get_account(PurpleMedia *media); + * Gets the prpl data from the media session. + * @param media The media session to retrieve the prpl data from. + * @return The prpl data retrieved. +gpointer purple_media_get_prpl_data(PurpleMedia *media); + * Sets the prpl data on the media session. + * @param media The media session to set the prpl data on. + * @param prpl_data The data to set on the media session. +void purple_media_set_prpl_data(PurpleMedia *media, gpointer prpl_data); + * Signals an error in the media session. + * @param media The media object to set the state on. + * @param error The format of the error message to send in the signal. + * @param ... The arguments to plug into the format. +void purple_media_error(PurpleMedia *media, const gchar *error, ...); + * Ends all streams that match the given parameters + * @param media The media object with which to end streams. + * @param session_id The session to end streams on. + * @param participant The participant to end streams with. +void purple_media_end(PurpleMedia *media, const gchar *session_id, + const gchar *participant); + * Signals different information about the given stream. + * @param media The media instance to containing the stream to signal. + * @param type The type of info being signaled. + * @param session_id The id of the session of the stream being signaled. + * @param participant The participant of the stream being signaled. + * @param local TRUE if the info originated locally, FALSE if on the remote end. +void purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type, + const gchar *session_id, const gchar *participant, + * Sets various optional parameters of the media call. + * Currently supported are: + * - "sdes-cname" : The CNAME for the RTP sessions + * - "sdes-name" : Real name used to describe the source in SDES messages + * - "sdes-tool" : The TOOL to put in SDES messages + * - "sdes-email" : Email address to put in SDES messages + * - "sdes-location" : The LOCATION to put in SDES messages + * - "sdes-note" : The NOTE to put in SDES messages + * - "sdes-phone" : The PHONE to put in SDES messages + * @param media The media object to set the parameters on. + * @param num_params The number of parameters to pass + * @param params Array of @c GParameter to pass +void purple_media_set_params(PurpleMedia *media, + guint num_params, GParameter *params); + * Gets the list of optional parameters supported by the media backend. + * The list is owned by the @c PurpleMedia internals and should NOT be freed. + * @param media The media object + * @return NULL-terminated array of names of supported parameters. +const gchar **purple_media_get_available_params(PurpleMedia *media); + * Checks if given optional parameter is supported by the media backend. + * @param media The media object + * @param param name of parameter + * @return @c TRUE if backend recognizes the parameter, @c FALSE otherwise. +gboolean purple_media_param_is_supported(PurpleMedia *media, const gchar *param); + * Adds a stream to a session. + * It only adds a stream to one audio session or video session as + * the @c sess_id must be unique between sessions. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to add the stream to. + * @param who The name of the remote user to add the stream for. + * @param type The type of stream to create. + * @param initiator Whether or not the local user initiated the stream. + * @param transmitter The transmitter to use for the stream. + * @param num_params The number of parameters to pass to Farsight. + * @param params The parameters to pass to Farsight. + * @return @c TRUE The stream was added successfully, @c FALSE otherwise. +gboolean purple_media_add_stream(PurpleMedia *media, const gchar *sess_id, + const gchar *who, PurpleMediaSessionType type, + gboolean initiator, const gchar *transmitter, + guint num_params, GParameter *params); + * Gets the session type from a session + * @param media The media object to find the session in. + * @param sess_id The session id of the session to get the type from. + * @return The retreived session type. +PurpleMediaSessionType purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id); + * Gets the PurpleMediaManager this media session is a part of. + * @param media The media object to get the manager instance from. + * @return The PurpleMediaManager instance retrieved. +struct _PurpleMediaManager *purple_media_get_manager(PurpleMedia *media); + * Gets the codecs from a session. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to get the codecs from. + * @return The retreieved codecs. +GList *purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id); + * Adds remote candidates to the stream. + * @param media The media object to find the session in. + * @param sess_id The session id of the session find the stream in. + * @param participant The name of the remote user to add the candidates for. + * @param remote_candidates The remote candidates to add. +void purple_media_add_remote_candidates(PurpleMedia *media, + const gchar *participant, + GList *remote_candidates); + * Gets the local candidates from a stream. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to find the stream in. + * @param participant The name of the remote user to get the candidates from. +GList *purple_media_get_local_candidates(PurpleMedia *media, + const gchar *participant); + * Gets the active local candidates for the stream. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to find the stream in. + * @param participant The name of the remote user to get the active candidate + * @return The active candidates retrieved. +GList *purple_media_get_active_local_candidates(PurpleMedia *media, + const gchar *sess_id, const gchar *participant); + * Gets the active remote candidates for the stream. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to find the stream in. + * @param participant The name of the remote user to get the remote candidate + * @return The remote candidates retrieved. +GList *purple_media_get_active_remote_candidates(PurpleMedia *media, + const gchar *sess_id, const gchar *participant); + * Sets remote candidates from the stream. + * @param media The media object to find the session in. + * @param sess_id The session id of the session find the stream in. + * @param participant The name of the remote user to set the candidates from. + * @param codecs The list of remote codecs to set. + * @return @c TRUE The codecs were set successfully, or @c FALSE otherwise. +gboolean purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id, + const gchar *participant, GList *codecs); + * Returns whether or not the candidates for set of streams are prepared + * @param media The media object to find the remote user in. + * @param session_id The session id of the session to check. + * @param participant The remote user to check for. + * @return @c TRUE All streams for the given session_id/participant combination have candidates prepared, @c FALSE otherwise. +gboolean purple_media_candidates_prepared(PurpleMedia *media, + const gchar *session_id, const gchar *participant); + * Sets the send codec for the a session. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to set the codec for. + * @param codec The codec to set the session to stream. + * @return @c TRUE The codec was successfully changed, or @c FALSE otherwise. +gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec); + * Gets whether a session's codecs are ready to be used. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to check. + * @return @c TRUE The codecs are ready, or @c FALSE otherwise. +gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id); + * Gets whether the local user is the conference/session/stream's initiator. + * @param media The media instance to find the session in. + * @param sess_id The session id of the session to check. + * @param participant The participant of the stream to check. + * @return TRUE if the local user is the stream's initator, else FALSE. +gboolean purple_media_is_initiator(PurpleMedia *media, + const gchar *sess_id, const gchar *participant); + * Gets whether a streams selected have been accepted. + * @param media The media object to find the session in. + * @param sess_id The session id of the session to check. + * @param participant The participant to check. + * @return @c TRUE The selected streams have been accepted, or @c FALSE otherwise. +gboolean purple_media_accepted(PurpleMedia *media, const gchar *sess_id, + const gchar *participant); + * Sets the input volume of all the selected sessions. + * @param media The media object the sessions are in. + * @param session_id The session to select (if any). + * @param level The level to set the volume to. +void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level); + * Sets the output volume of all the selected streams. + * @param media The media object the streams are in. + * @param session_id The session to limit the streams to (if any). + * @param participant The participant to limit the streams to (if any). + * @param level The level to set the volume to. +void purple_media_set_output_volume(PurpleMedia *media, const gchar *session_id, + const gchar *participant, double level); + * Sets a video output window for the given session/stream. + * @param media The media instance to set the output window on. + * @param session_id The session to set the output window on. + * @param participant Optionally, the participant to set the output window on. + * @param window_id The window id use for embedding the video in. + * @return An id to reference the output window. +gulong purple_media_set_output_window(PurpleMedia *media, + const gchar *session_id, const gchar *participant, + * Removes all output windows from a given media session. + * @param media The instance to remove all output windows from. +void purple_media_remove_output_windows(PurpleMedia *media); +#endif /* _PURPLE_MEDIA_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media/backend-iface.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,224 @@
+ * @file backend-iface.h Interface for media backends + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _MEDIA_BACKEND_IFACE_H_ +#define _MEDIA_BACKEND_IFACE_H_ +#include <glib-object.h> +#define PURPLE_TYPE_MEDIA_BACKEND (purple_media_backend_get_type()) +#define PURPLE_IS_MEDIA_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_BACKEND)) +#define PURPLE_MEDIA_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_BACKEND, PurpleMediaBackend)) +#define PURPLE_MEDIA_BACKEND_GET_INTERFACE(inst)(G_TYPE_INSTANCE_GET_INTERFACE((inst), PURPLE_TYPE_MEDIA_BACKEND, PurpleMediaBackendIface)) +/** A placeholder to represent any media backend */ +typedef struct _PurpleMediaBackend PurpleMediaBackend; +/** A structure to derive media backends from. */ +typedef struct _PurpleMediaBackendIface PurpleMediaBackendIface; +struct _PurpleMediaBackendIface + GTypeInterface parent_iface; /**< The parent iface class */ + /** Implementable functions called with purple_media_backend_* */ + gboolean (*add_stream) (PurpleMediaBackend *self, + const gchar *sess_id, const gchar *who, + PurpleMediaSessionType type, gboolean initiator, + const gchar *transmitter, + guint num_params, GParameter *params); + void (*add_remote_candidates) (PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *remote_candidates); + gboolean (*codecs_ready) (PurpleMediaBackend *self, + GList *(*get_codecs) (PurpleMediaBackend *self, + GList *(*get_local_candidates) (PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant); + gboolean (*set_remote_codecs) (PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + gboolean (*set_send_codec) (PurpleMediaBackend *self, + const gchar *sess_id, PurpleMediaCodec *codec); + void (*set_params) (PurpleMediaBackend *self, + guint num_params, GParameter *params); + const gchar **(*get_available_params) (void); + * Gets the media backend's GType. + * @return The media backend's GType. +GType purple_media_backend_get_type(void); + * Creates and adds a stream to the media backend. + * @param self The backend to add the stream to. + * @param sess_id The session id of the stream to add. + * @param who The remote participant of the stream to add. + * @param type The media type and direction of the stream to add. + * @param initiator True if the local user initiated the stream. + * @param transmitter The string id of the tranmsitter to use. + * @param num_params The number of parameters in the param parameter. + * @param params The additional parameters to pass when creating the stream. + * @return True if the stream was successfully created, othewise False. +gboolean purple_media_backend_add_stream(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *who, + PurpleMediaSessionType type, gboolean initiator, + const gchar *transmitter, + guint num_params, GParameter *params); + * Add remote candidates to a stream. + * @param self The backend the stream is in. + * @param sess_id The session id associated with the stream. + * @param participant The participant associated with the stream. + * @param remote_candidates The list of remote candidates to add. +void purple_media_backend_add_remote_candidates(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *remote_candidates); + * Get whether or not a session's codecs are ready. + * A codec is ready if all of the attributes and additional + * parameters have been collected. + * @param self The media backend the session is in. + * @param sess_id The session id of the session to check. + * @return True if the codecs are ready, otherwise False. +gboolean purple_media_backend_codecs_ready(PurpleMediaBackend *self, + * Gets the codec intersection list for a session. + * The intersection list consists of all codecs that are compatible + * between the local and remote software. + * @param self The media backend the session is in. + * @param sess_id The session id of the session to use. + * @return The codec intersection list. +GList *purple_media_backend_get_codecs(PurpleMediaBackend *self, + * Gets the list of local candidates for a stream. + * @param self The media backend the stream is in. + * @param sess_id The session id associated with the stream. + * @param particilant The participant associated with the stream. + * @return The list of local candidates. +GList *purple_media_backend_get_local_candidates(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant); + * Sets the remote codecs on a stream. + * @param self The media backend the stream is in. + * @param sess_id The session id the stream is associated with. + * @param participant The participant the stream is associated with. + * @param codecs The list of remote codecs to set. + * @return True if the remote codecs were set successfully, otherwise False. +gboolean purple_media_backend_set_remote_codecs(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + * Sets which codec format to send media content in for a session. + * @param self The media backend the session is in. + * @param sess_id The session id of the session to set the codec for. + * @param codec The codec to set. + * @return True if set successfully, otherwise False. +gboolean purple_media_backend_set_send_codec(PurpleMediaBackend *self, + const gchar *sess_id, PurpleMediaCodec *codec); + * Sets various optional parameters of the media backend. + * @param self The media backend to set the parameters on. + * @param num_params The number of parameters to pass to backend + * @param params Array of @c GParameter to pass to backend +void purple_media_backend_set_params(PurpleMediaBackend *self, + guint num_params, GParameter *params); + * Gets the list of optional parameters supported by the media backend. + * The list should NOT be freed. + * @param self The media backend + * @return NULL-terminated array of names of supported parameters. +const gchar **purple_media_backend_get_available_params(PurpleMediaBackend *self); +#endif /* _MEDIA_BACKEND_IFACE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media/candidate.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,252 @@
+ * @file candidate.h Candidate for Media API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_CANDIDATE_H_ +#define _PURPLE_MEDIA_CANDIDATE_H_ +#include <glib-object.h> +#define PURPLE_TYPE_MEDIA_CANDIDATE (purple_media_candidate_get_type()) +#define PURPLE_IS_MEDIA_CANDIDATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CANDIDATE)) +#define PURPLE_IS_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CANDIDATE)) +#define PURPLE_MEDIA_CANDIDATE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate)) +#define PURPLE_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate)) +#define PURPLE_MEDIA_CANDIDATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate)) +/** An opaque structure representing a network candidate (IP Address and port pair). */ +typedef struct _PurpleMediaCandidate PurpleMediaCandidate; + * Gets the type of the media candidate structure. + * @return The media canditate's GType +GType purple_media_candidate_get_type(void); + * Creates a PurpleMediaCandidate instance. + * @param foundation The foundation of the candidate. + * @param component_id The component this candidate is for. + * @param type The type of candidate. + * @param proto The protocol this component is for. + * @param ip The IP address of this component. + * @param port The network port. + * @return The newly created PurpleMediaCandidate instance. +PurpleMediaCandidate *purple_media_candidate_new( + const gchar *foundation, guint component_id, + PurpleMediaCandidateType type, + PurpleMediaNetworkProtocol proto, + const gchar *ip, guint port); + * Copies a PurpleMediaCandidate. + * @param candidate The candidate to copy. + * @return The copy of the PurpleMediaCandidate. +PurpleMediaCandidate *purple_media_candidate_copy( + PurpleMediaCandidate *candidate); + * Copies a GList of PurpleMediaCandidate and its contents. + * @param candidates The list of candidates to be copied. + * @return The copy of the GList. +GList *purple_media_candidate_list_copy(GList *candidates); + * Frees a GList of PurpleMediaCandidate and its contents. + * @param candidates The list of candidates to be freed. +void purple_media_candidate_list_free(GList *candidates); + * Gets the foundation (identifier) from the candidate. + * @param candidate The candidate to get the foundation from. + * @return The foundation. +gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate); + * Gets the component id (rtp or rtcp) + * @param candidate The candidate to get the compnent id from. + * @return The component id. +guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate); + * @param candidate The candidate to get the IP address from. + * @return The IP address. +gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate); + * @param candidate The candidate to get the port from. +guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate); + * Gets the base (internal) IP address. + * @param candidate The candidate to get the base IP address from. + * @return The base IP address. +gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate); + * Gets the base (internal) port. + * Invalid if the base IP is NULL. + * @param candidate The candidate to get the base port. + * @return The base port. +guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate); + * Gets the protocol (TCP or UDP). + * @param candidate The candidate to get the protocol from. + * @return The protocol. +PurpleMediaNetworkProtocol purple_media_candidate_get_protocol( + PurpleMediaCandidate *candidate); + * @param candidate The candidate to get the priority from. + * @return The priority. +guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate); + * Gets the candidate type. + * @param candidate The candidate to get the candidate type from. + * @return The candidate type. +PurpleMediaCandidateType purple_media_candidate_get_candidate_type( + PurpleMediaCandidate *candidate); + * This can be NULL. It depends on the transmission type. + * @param The candidate to get the username from. + * @return The username. +gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate); + * This can be NULL. It depends on the transmission type. + * @param The candidate to get the password from. + * @return The password. +gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate); + * @param The candidate to get the TTL from. +guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate); +#endif /* _PURPLE_MEDIA_CANDIDATE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media/codec.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,214 @@
+ * @file codec.h Codec for Media API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_CODEC_H_ +#define _PURPLE_MEDIA_CODEC_H_ +/** An opaque structure representing an audio or video codec. */ +typedef struct _PurpleMediaCodec PurpleMediaCodec; +#include <glib-object.h> +#define PURPLE_TYPE_MEDIA_CODEC (purple_media_codec_get_type()) +#define PURPLE_IS_MEDIA_CODEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CODEC)) +#define PURPLE_IS_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CODEC)) +#define PURPLE_MEDIA_CODEC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec)) +#define PURPLE_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec)) +#define PURPLE_MEDIA_CODEC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec)) + * Gets the type of the media codec structure. + * @return The media codec's GType +GType purple_media_codec_get_type(void); + * Creates a new PurpleMediaCodec instance. + * @param id Codec identifier. + * @param encoding_name Name of the media type this encodes. + * @param media_type PurpleMediaSessionType of this codec. + * @param clock_rate The clock rate this codec encodes at, if applicable. + * @return The newly created PurpleMediaCodec. +PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name, + PurpleMediaSessionType media_type, guint clock_rate); + * @param The codec to get the id from. + * @return The codec id. +guint purple_media_codec_get_id(PurpleMediaCodec *codec); + * Gets the encoding name. + * @param The codec to get the encoding name from. + * @return The encoding name. +gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec); + * @param The codec to get the clock rate from. + * @return The clock rate. +guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec); + * Gets the number of channels. + * @param The codec to get the number of channels from. + * @return The number of channels. +guint purple_media_codec_get_channels(PurpleMediaCodec *codec); + * Gets a list of the optional parameters. + * The list consists of PurpleKeyValuePair's. + * @param The codec to get the optional parameters from. + * @return The list of optional parameters. The list is owned by the codec and +GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec); + * Adds an optional parameter to the codec. + * @param codec The codec to add the parameter to. + * @param name The name of the parameter to add. + * @param value The value of the parameter to add. +void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec, + const gchar *name, const gchar *value); + * Removes an optional parameter from the codec. + * @param codec The codec to remove the parameter from. + * @param param A pointer to the parameter to remove. +void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec, + PurpleKeyValuePair *param); + * Gets an optional parameter based on the values given. + * @param codec The codec to find the parameter in. + * @param name The name of the parameter to search for. + * @param value The value to search for or NULL. + * @return The value found or NULL. +PurpleKeyValuePair *purple_media_codec_get_optional_parameter( + PurpleMediaCodec *codec, const gchar *name, + * Copies a PurpleMediaCodec object. + * @param codec The codec to copy. + * @return The copy of the codec. +PurpleMediaCodec *purple_media_codec_copy(PurpleMediaCodec *codec); + * Copies a GList of PurpleMediaCodec and its contents. + * @param codecs The list of codecs to be copied. + * @return The copy of the GList. +GList *purple_media_codec_list_copy(GList *codecs); + * Frees a GList of PurpleMediaCodec and its contents. + * @param codecs The list of codecs to be freed. +void purple_media_codec_list_free(GList *codecs); + * Creates a string representation of the codec. + * @param codec The codec to create the string of. + * @return The new string representation. +gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec); +#endif /* _PURPLE_MEDIA_CODEC_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/media/enum-types.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,162 @@
+ * @file enum-types.h Enum types for Media API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_ENUM_TYPES_H_ +#define _PURPLE_MEDIA_ENUM_TYPES_H_ +#include <glib-object.h> +#define PURPLE_TYPE_MEDIA_CANDIDATE_TYPE (purple_media_candidate_type_get_type()) +#define PURPLE_MEDIA_TYPE_CAPS (purple_media_caps_get_type()) +#define PURPLE_MEDIA_TYPE_INFO_TYPE (purple_media_info_type_get_type()) +#define PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL (purple_media_network_protocol_get_type()) +#define PURPLE_TYPE_MEDIA_SESSION_TYPE (purple_media_session_type_get_type()) +#define PURPLE_MEDIA_TYPE_STATE (purple_media_state_changed_get_type()) +/** Media candidate types */ + PURPLE_MEDIA_CANDIDATE_TYPE_HOST, + PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX, + PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX, + PURPLE_MEDIA_CANDIDATE_TYPE_RELAY, + PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST +} PurpleMediaCandidateType; + PURPLE_MEDIA_CAPS_NONE = 0, + PURPLE_MEDIA_CAPS_AUDIO = 1, + PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1, + PURPLE_MEDIA_CAPS_VIDEO = 1 << 2, + PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3, + PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4, + PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5, + PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6 +/** Media component types */ + PURPLE_MEDIA_COMPONENT_NONE = 0, + PURPLE_MEDIA_COMPONENT_RTP = 1, + PURPLE_MEDIA_COMPONENT_RTCP = 2 +} PurpleMediaComponentType; + PURPLE_MEDIA_INFO_HANGUP = 0, + PURPLE_MEDIA_INFO_ACCEPT, + PURPLE_MEDIA_INFO_REJECT, + PURPLE_MEDIA_INFO_MUTE, + PURPLE_MEDIA_INFO_UNMUTE, + PURPLE_MEDIA_INFO_PAUSE, + PURPLE_MEDIA_INFO_UNPAUSE, + PURPLE_MEDIA_INFO_HOLD, + PURPLE_MEDIA_INFO_UNHOLD +/** Media network protocols */ + PURPLE_MEDIA_NETWORK_PROTOCOL_UDP, + PURPLE_MEDIA_NETWORK_PROTOCOL_TCP +} PurpleMediaNetworkProtocol; +/** Media session types */ + PURPLE_MEDIA_RECV_AUDIO = 1 << 0, + PURPLE_MEDIA_SEND_AUDIO = 1 << 1, + PURPLE_MEDIA_RECV_VIDEO = 1 << 2, + PURPLE_MEDIA_SEND_VIDEO = 1 << 3, + PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO, + PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO +} PurpleMediaSessionType; +/** Media state-changed types */ + PURPLE_MEDIA_STATE_NEW = 0, + PURPLE_MEDIA_STATE_CONNECTED, + * Gets the media candidate type's GType + * @return The media candidate type's GType. +GType purple_media_candidate_type_get_type(void); + * Gets the type of the media caps flags + * @return The media caps flags' GType +GType purple_media_caps_get_type(void); + * Gets the type of the info type enum + * @return The info type enum's GType +GType purple_media_info_type_get_type(void); + * Gets the media network protocol's GType + * @return The media network protocol's GType. +GType purple_media_network_protocol_get_type(void); + * Gets the media session type's GType + * @return The media session type's GType. +GType purple_media_session_type_get_type(void); + * Gets the type of the state-changed enum + * @return The state-changed enum's GType +GType purple_media_state_changed_get_type(void); +#endif /* _PURPLE_MEDIA_ENUM_TYPES_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/mediamanager.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,246 @@
+ * @file mediamanager.h Media Manager API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_MEDIA_MANAGER_H_ +#define _PURPLE_MEDIA_MANAGER_H_ +#include <glib-object.h> +/** An opaque structure representing a group of (usually all) media calls. */ +typedef struct _PurpleMediaManager PurpleMediaManager; +/** The GObject class structure of the PurpleMediaManager object. */ +typedef struct _PurpleMediaManagerClass PurpleMediaManagerClass; +#define PURPLE_TYPE_MEDIA_MANAGER (purple_media_manager_get_type()) +#define PURPLE_MEDIA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_MANAGER, PurpleMediaManager)) +#define PURPLE_MEDIA_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_MANAGER, PurpleMediaManagerClass)) +#define PURPLE_IS_MEDIA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_MANAGER)) +#define PURPLE_IS_MEDIA_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_MANAGER)) +#define PURPLE_MEDIA_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_MANAGER, PurpleMediaManagerClass)) +/**************************************************************************/ +/** @name Media Manager API */ +/**************************************************************************/ + * Gets the media manager's GType. + * @return The media manager's GType. +GType purple_media_manager_get_type(void); + * Gets the "global" media manager object. It's created if it doesn't already exist. + * @return The "global" instance of the media manager object. +PurpleMediaManager *purple_media_manager_get(void); + * Creates a media session. + * @param manager The media manager to create the session under. + * @param account The account to create the session on. + * @param conference_type The conference type to feed into Farsight2. + * @param remote_user The remote user to initiate the session with. + * @param initiator TRUE if the local user is the initiator of this media call, FALSE otherwise. + * @return A newly created media session. +PurpleMedia *purple_media_manager_create_media(PurpleMediaManager *manager, + PurpleAccount *account, + const char *conference_type, + const char *remote_user, + * Gets all of the media sessions. + * @param manager The media manager to get all of the sessions from. + * @return A list of all the media sessions. +GList *purple_media_manager_get_media(PurpleMediaManager *manager); + * Gets all of the media sessions for a given account. + * @param manager The media manager to get the sessions from. + * @param account The account the sessions are on. + * @return A list of the media sessions on the given account. +GList *purple_media_manager_get_media_by_account( + PurpleMediaManager *manager, PurpleAccount *account); + * Removes a media session from the media manager. + * @param manager The media manager to remove the media session from. + * @param media The media session to remove. +purple_media_manager_remove_media(PurpleMediaManager *manager, + * Signals that output windows should be created for the chosen stream. + * This shouldn't be called outside of mediamanager.c and media.c + * @param manager Manager the output windows are registered with. + * @param media Media session the output windows are registered for. + * @param session_id The session the output windows are registered with. + * @param participant The participant the output windows are registered with. + * @return TRUE if it succeeded, FALSE if it failed. +gboolean purple_media_manager_create_output_window( + PurpleMediaManager *manager, PurpleMedia *media, + const gchar *session_id, const gchar *participant); + * Registers a video output window to be created for a given stream. + * @param manager The manager to register the output window with. + * @param media The media instance to find the stream in. + * @param session_id The session the stream is associated with. + * @param participant The participant the stream is associated with. + * @param window_id The window ID to embed the video in. + * @return A unique ID to the registered output window, 0 if it failed. +gulong purple_media_manager_set_output_window(PurpleMediaManager *manager, + PurpleMedia *media, const gchar *session_id, + const gchar *participant, gulong window_id); + * Remove a previously registerd output window. + * @param manager The manager the output window was registered with. + * @param output_window_id The ID of the output window. + * @return TRUE if it found the output window and was successful, else FALSE. +gboolean purple_media_manager_remove_output_window( + PurpleMediaManager *manager, gulong output_window_id); + * Remove all output windows for a given conference/session/participant/stream. + * @param manager The manager the output windows were registered with. + * @param media The media instance the output windows were registered for. + * @param session_id The session the output windows were registered for. + * @param participant The participant the output windows were registered for. +void purple_media_manager_remove_output_windows( + PurpleMediaManager *manager, PurpleMedia *media, + const gchar *session_id, const gchar *participant); + * Sets which media caps the UI supports. + * @param manager The manager to set the caps on. + * @param caps The caps to set. +void purple_media_manager_set_ui_caps(PurpleMediaManager *manager, + * Gets which media caps the UI supports. + * @param manager The manager to get caps from. + * @return caps The caps retrieved. +PurpleMediaCaps purple_media_manager_get_ui_caps(PurpleMediaManager *manager); + * Sets which media backend type media objects will use. + * @param manager The manager to set the caps on. + * @param backend_type The media backend type to use. +void purple_media_manager_set_backend_type(PurpleMediaManager *manager, + * Gets which media backend type media objects will use. + * @param manager The manager to get the media backend type from. + * @return The type of media backend type media objects will use. +GType purple_media_manager_get_backend_type(PurpleMediaManager *manager); +#endif /* _PURPLE_MEDIA_MANAGER_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/mime.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,218 @@
+ * Purple is the legal property of its developers, whose names are too + * numerous to list here. Please refer to the COPYRIGHT file distributed + * with this source distribution + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, + * Rudimentary parsing of multi-part MIME messages into more + * accessible structures. +typedef struct _PurpleMimeDocument PurpleMimeDocument; + * A part of a multipart MIME document. +typedef struct _PurpleMimePart PurpleMimePart; + * Allocate an empty MIME document. +PurpleMimeDocument *purple_mime_document_new(void); + * Frees memory used in a MIME document and all of its parts and fields + * @param doc The MIME document to free. +void purple_mime_document_free(PurpleMimeDocument *doc); + * Parse a MIME document from a NUL-terminated string. + * @param buf The NULL-terminated string containing the MIME-encoded data. + * @returns A MIME document. +PurpleMimeDocument *purple_mime_document_parse(const char *buf); + * Parse a MIME document from a string + * @param buf The string containing the MIME-encoded data. + * @param len Length of buf. + * @returns A MIME document. +PurpleMimeDocument *purple_mime_document_parsen(const char *buf, gsize len); + * Write (append) a MIME document onto a GString. +void purple_mime_document_write(PurpleMimeDocument *doc, GString *str); + * The list of fields in the header of a document + * @param doc The MIME document. + * @constreturn A list of strings indicating the fields (but not the values + * of the fields) in the header of doc. +GList *purple_mime_document_get_fields(PurpleMimeDocument *doc); + * Get the value of a specific field in the header of a document. + * @param doc The MIME document. + * @param field Case-insensitive field name. + * @returns Value associated with the indicated header field, or + * NULL if the field doesn't exist. +const char *purple_mime_document_get_field(PurpleMimeDocument *doc, + * Set or replace the value of a specific field in the header of a + * @param doc The MIME document. + * @param field Case-insensitive field name. + * @param value Value to associate with the indicated header field, + * of NULL to remove the field. +void purple_mime_document_set_field(PurpleMimeDocument *doc, + * The list of parts in a multipart document. + * @param doc The MIME document. + * @constreturn List of PurpleMimePart contained within doc. +GList *purple_mime_document_get_parts(PurpleMimeDocument *doc); + * Create and insert a new part into a MIME document. + * @param doc The new part's parent MIME document. +PurpleMimePart *purple_mime_part_new(PurpleMimeDocument *doc); + * The list of fields in the header of a document part. + * @param part The MIME document part. + * @constreturn List of strings indicating the fields (but not the values + * of the fields) in the header of part. +GList *purple_mime_part_get_fields(PurpleMimePart *part); + * Get the value of a specific field in the header of a document part. + * @param part The MIME document part. + * @param field Case-insensitive name of the header field. + * @returns Value of the specified header field, or NULL if the +const char *purple_mime_part_get_field(PurpleMimePart *part, + * Get the decoded value of a specific field in the header of a +char *purple_mime_part_get_field_decoded(PurpleMimePart *part, + * Set or replace the value of a specific field in the header of a + * @param part The part of the MIME document. + * @param field Case-insensitive field name + * @param value Value to associate with the indicated header field, + * of NULL to remove the field. +void purple_mime_part_set_field(PurpleMimePart *part, + * Get the (possibly encoded) data portion of a MIME document part. + * @param part The MIME document part. + * @returns NULL-terminated data found in the document part +const char *purple_mime_part_get_data(PurpleMimePart *part); + * Get the data portion of a MIME document part, after attempting to + * decode it according to the content-transfer-encoding field. If the + * specified encoding method is not supported, this function will + * @param part The MIME documemt part. + * @param data Buffer for the data. + * @param len The length of the buffer. +void purple_mime_part_get_data_decoded(PurpleMimePart *part, + guchar **data, gsize *len); + * Get the length of the data portion of a MIME document part. + * @param part The MIME document part. + * @returns Length of the data in the document part. +gsize purple_mime_part_get_length(PurpleMimePart *part); +void purple_mime_part_set_data(PurpleMimePart *part, const char *data); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/msg.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,325 @@
+ * @file msg.h Message functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnMessage MsnMessage; + MSN_MSG_ERROR_NONE, /**< No error. */ + MSN_MSG_ERROR_TIMEOUT, /**< The message timedout. */ + MSN_MSG_ERROR_NAK, /**< The message could not be sent. */ + MSN_MSG_ERROR_SB, /**< The error comes from the switchboard. */ + MSN_MSG_ERROR_UNKNOWN /**< An unknown error occurred. */ +#include "transaction.h" +#include "slpmsg_part.h" +typedef void (*MsnMsgCb)(MsnMessage *, void *data); +#define MSG_BODY_DEM "\r\n\r\n" +#define MSG_LINE_DEM "\r\n" +#define MSG_OIM_BODY_DEM "\n\n" +#define MSG_OIM_LINE_DEM "\n" + guint ref_count; /**< The reference count. */ + MsnSlpMessagePart *part; + guint total_chunks; /**< How many chunks in this multi-part message */ + guint received_chunks; /**< How many chunks we've received so far */ + GHashTable *header_table; + gboolean ack_ref; /**< A flag that states if this message has + been ref'ed for using it in a callback. */ + MsnMsgCb ack_cb; /**< The callback to call when we receive an ACK of this + MsnMsgCb nak_cb; /**< The callback to call when we receive a NAK of this + void *ack_data; /**< The data used by callbacks. */ + * Creates a new, empty message. + * @return A new message. +MsnMessage *msn_message_new(MsnMsgType type); + * Creates a new, empty MSNSLP message. + * @return A new MSNSLP message. +MsnMessage *msn_message_new_msnslp(void); + * Creates a new nudge message. + * @return A new nudge message. +MsnMessage *msn_message_new_nudge(void); + * Creates a new plain message. + * @return A new plain message. +MsnMessage *msn_message_new_plain(const char *message); + * Creates a new message based off a command. + * @param session The MSN session. + * @param cmd The command. + * @return The new message. +MsnMessage *msn_message_new_from_cmd(MsnSession *session, MsnCommand *cmd); + * Parses the payload of a message. + * @param msg The message. + * @param payload The payload. + * @param payload_len The length of the payload. +void msn_message_parse_payload(MsnMessage *msg, const char *payload, + const char *line_dem,const char *body_dem); + * Increments the reference count on a message. + * @param msg The message. +MsnMessage *msn_message_ref(MsnMessage *msg); + * Decrements the reference count on a message. + * This will destroy the structure if the count hits 0. + * @param msg The message. + * @return @a msg, or @c NULL if the new count is 0. +void msn_message_unref(MsnMessage *msg); + * Generates the payload data of a message. + * @param msg The message. + * @param ret_size The returned size of the payload. + * @return The payload data of the message. +char *msn_message_gen_payload(MsnMessage *msg, size_t *ret_size); + * Sets the flag for an outgoing message. + * @param msg The message. + * @param flag The flag. +void msn_message_set_flag(MsnMessage *msg, char flag); + * Returns the flag for an outgoing message. + * @param msg The message. +char msn_message_get_flag(const MsnMessage *msg); + * Sets the binary content of the message. + * @param msg The message. + * @param data The binary data. + * @param len The length of the data. +void msn_message_set_bin_data(MsnMessage *msg, const void *data, size_t len); + * Returns the binary content of the message. + * @param msg The message. + * @param len The returned length of the data. + * @return The binary data. +const void *msn_message_get_bin_data(const MsnMessage *msg, size_t *len); + * Sets the content type in a message. + * @param msg The message. + * @param type The content-type. +void msn_message_set_content_type(MsnMessage *msg, const char *type); + * Returns the content type in a message. + * @param msg The message. + * @return The content-type. +const char *msn_message_get_content_type(const MsnMessage *msg); + * Sets the charset in a message. + * @param msg The message. + * @param charset The charset. +void msn_message_set_charset(MsnMessage *msg, const char *charset); + * Returns the charset in a message. + * @param msg The message. +const char *msn_message_get_charset(const MsnMessage *msg); + * Sets a header in a message. + * @param msg The message. + * @param header The header name. + * @param value The header value. +void msn_message_set_header(MsnMessage *msg, const char *name, + * Returns the value of a header from a message. + * @param msg The message. + * @param header The header value. + * @return The value, or @c NULL if not found. +const char *msn_message_get_header_value(const MsnMessage *msg, const char *name); + * Parses the body and returns it in the form of a hashtable. + * @param msg The message. + * @return The resulting hashtable. +GHashTable *msn_message_get_hashtable_from_body(const MsnMessage *msg); +void msn_message_show_readable(MsnMessage *msg, const char *info, +char *msn_message_to_string(MsnMessage *msg); +void msn_plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg); +void msn_control_msg(MsnCmdProc *cmdproc, MsnMessage *msg); + * Processes peer to peer messages. + * @param cmdproc The command processor. + * @param msg The message. +void msn_p2p_msg(MsnCmdProc *cmdproc, MsnMessage *msg); + * Processes emoticon messages. + * @param cmdproc The command processor. + * @param msg The message. +void msn_emoticon_msg(MsnCmdProc *cmdproc, MsnMessage *msg); +void msn_datacast_msg(MsnCmdProc *cmdproc, MsnMessage *msg); + * Processes INVITE messages. + * @param cmdproc The command processor. + * @param msg The message. +void msn_invite_msg(MsnCmdProc *cmdproc, MsnMessage *msg); +void msn_handwritten_msg(MsnCmdProc *cmdproc, MsnMessage *msg); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/msn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,158 @@
+ * @file msn.h The MSN protocol plugin + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + MSN_CAP_VIA_MOBILE = 0x0000001, + MSN_CAP_VIA_TEXAS = 0x0000002, + MSN_CAP_INK_GIF = 0x0000004, + MSN_CAP_INK_ISF = 0x0000008, + MSN_CAP_VIDEO_CHAT = 0x0000010, + MSN_CAP_PACKET = 0x0000020, + MSN_CAP_MOBILE_ON = 0x0000040, + MSN_CAP_WEB_WATCH = 0x0000080, + MSN_CAP_ACTIVITIES = 0x0000100, + MSN_CAP_VIA_WEBIM = 0x0000200, + MSN_CAP_MOBILE_DEV = 0x0000400, + MSN_CAP_VIA_FEDERATED = 0x0000800, + MSN_CAP_SPACE = 0x0001000, + MSN_CAP_MCE = 0x0002000, + MSN_CAP_DIRECTIM = 0x0004000, + MSN_CAP_WINKS = 0x0008000, + MSN_CAP_SEARCH = 0x0010000, + MSN_CAP_BOT = 0x0020000, + MSN_CAP_VOICEIM = 0x0040000, + MSN_CAP_SCHANNEL = 0x0080000, + MSN_CAP_SIP_INVITE = 0x0100000, + MSN_CAP_MULTI_VV = 0x0200000, + MSN_CAP_SDRIVE = 0x0400000, + MSN_CAP_PAGEMODE_MSG = 0x080000, + MSN_CAP_ONECARE = 0x1000000, + MSN_CAP_P2P_TURN = 0x2000000, + MSN_CAP_P2P_BOOTSTRAP_VIA_UUN = 0x4000000, + MSN_CAP_ALIASED = 0x8000000 + MSN_EXT_CAP_SMS_ONLY = 0x1, + MSN_EXT_CAP_VOICE_OVER_MSNP = 0x2, + MSN_EXT_CAP_UUCP_SIP = 0x4, + MSN_EXT_CAP_APP_MSGS = 0x8, + MSN_EXT_CAP_RTC_VIDEO = 0x10, + MSN_EXT_CAP_P2PV2 = 0x20, + MSN_EXT_CAP_AUTH_WEBIM = 0x40, + MSN_EXT_CAP_1ON1_VIA_GROUP = 0x80, + MSN_EXT_CAP_OFFLINEIM = 0x100, + MSN_EXT_CAP_SHARING_VIDEO = 0x200, + MSN_EXT_CAP_NUDGE = 0x400, + MSN_EXT_CAP_CIRCLE_VOICEIM = 0x800, + MSN_EXT_CAP_SHARING = 0x1000, + MSN_EXT_CAP_P2P_MIXER_RELAY = 0x8000, + MSN_EXT_CAP_CONV_WINDOW_FT = 0x20000, + MSN_EXT_CAP_VIDEO_16x9 = 0x40000, + MSN_EXT_CAP_P2P_ENVELOPE = 0x80000, + MSN_EXT_CAP_YAHOOIM_DISABLE = 0x400000, + MSN_EXT_CAP_SIP_TUNNELv2 = 0x800000, + MSN_EXT_CAP_VOICE_CLIP_WMA = 0x1000000, + MSN_EXT_CAP_VOICE_CLIP_CIRCLEIM = 0x2000000, + MSN_EXT_CAP_SOCIAL_NEWS = 0x4000000, + MSN_EXT_CAP_CUSTOM_SMILEY = 0x8000000, + MSN_EXT_CAP_UTF8_MOODS = 0x10000000, + MSN_EXT_CAP_FTURN = 0x20000000, + MSN_EXT_CAP_P4_ACTIVITY = 0x40000000, + MSN_EXT_CAP_MUC = 0x80000000 + MSN_CLIENT_VER_5_0 = 0x00, + MSN_CLIENT_VER_6_0 = 0x10, /* MSNC1 */ + MSN_CLIENT_VER_6_1 = 0x20, /* MSNC2 */ + MSN_CLIENT_VER_6_2 = 0x30, /* MSNC3 */ + MSN_CLIENT_VER_7_0 = 0x40, /* MSNC4 */ + MSN_CLIENT_VER_7_5 = 0x50, /* MSNC5 */ + MSN_CLIENT_VER_8_0 = 0x60, /* MSNC6 */ + MSN_CLIENT_VER_8_1 = 0x70, /* MSNC7 */ + MSN_CLIENT_VER_8_5 = 0x80, /* MSNC8 */ + MSN_CLIENT_VER_9_0 = 0x90, /* MSNC9 */ + MSN_CLIENT_VER_14_0 = 0xA0, /* MSNC10 */ + MSN_CLIENT_VER_15_0 = 0xB0 /* MSNC11 */ +#define MSN_BUF_LEN 8192 +/* Windows Live Messenger Server*/ +#define MSN_SERVER "messenger.hotmail.com" +#define MSN_HTTPCONN_SERVER "gateway.messenger.hotmail.com" +#define WLM_MAX_PROTOCOL 18 +#define WLM_MIN_PROTOCOL 18 +#define MSN_TYPING_RECV_TIMEOUT 6 +#define MSN_TYPING_SEND_TIMEOUT 4 +#define PROFILE_URL "http://spaces.live.com/profile.aspx?mem=" +#define PHOTO_URL " contactparams:photopreauthurl=\"" +#define BUDDY_ALIAS_MAXLEN 387 +#define MSN_CAM_GUID "4BD96FC0-AB17-4425-A14A-439185962DC8" +#define MSN_CAM_REQUEST_GUID "1C9AA97E-9C05-4583-A3BD-908A196F1E92" +#define MSN_FT_GUID "5D3E02AB-6190-11D3-BBBB-00C04F795683" +#define MSN_OBJ_GUID "A4268EEC-FEC5-49E5-95C3-F126696BDBF6" +#define MSN_CLIENTINFO \ + "Client-Name: Purple/" VERSION "\r\n" \ +/* Index into attention_types */ +#define MSN_CLIENT_ID_VERSION MSN_CLIENT_VER_9_0 +#define MSN_CLIENT_ID_CAPABILITIES (MSN_CAP_PACKET|MSN_CAP_INK_GIF|MSN_CAP_VOICEIM) +#define MSN_CLIENT_ID_EXT_CAPS (0) + ((MSN_CLIENT_ID_VERSION << 24) | \ + (MSN_CLIENT_ID_CAPABILITIES)) +msn_set_public_alias(PurpleConnection *gc, const char *alias, + PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); +void msn_send_privacy(PurpleConnection *gc); +void msn_send_im_message(MsnSession *session, MsnMessage *msg); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/msnutils.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,244 @@
+ * @file msnutils.h Utility functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/*encode the str to RFC2047 style*/ +char *msn_encode_mime(const char *str); + * Generate the Random GUID + * Encodes the spaces in a string + * @param str The string to be encoded. + * @param buf The buffer to hold the encoded string. + * @param len The maximum length (including NUL) to put in @buf. + * @return Whether @str was able to fit in @buf. +msn_encode_spaces(const char *str, char *buf, size_t len); + * Parses the MSN message formatting into a format compatible with Purple. + * @param mime The mime header with the formatting. + * @param pre_ret The returned prefix string. + * @param post_ret The returned postfix string. + * @return The new message. +void msn_parse_format(const char *mime, char **pre_ret, char **post_ret); + * Parses the Purple message formatting (html) into the MSN format. + * @param html The html message to format. + * @param attributes The returned attributes string. + * @param message The returned message string. + * @return The new message. +void msn_import_html(const char *html, char **attributes, char **message); + * Parses a socket string. + * @param str A host:port string. + * @param ret_host Return string value of the host. + * @param ret_port Return integer value of the port. +void msn_parse_socket(const char *str, char **ret_host, int *ret_port); + * @param str A network:username string. + * @param ret_user Return of the user's passport. + * @param ret_network Return of the user's network. +void msn_parse_user(const char *str, char **ret_user, int *ret_network); + * Verify if the email is a vaild passport. + * @param passport The email + * @return True if it is a valid passport, else FALSE +gboolean msn_email_is_valid(const char *passport); + * Handle MSN Challenge Computation + * This algorithm references + * http://imfreedom.org/wiki/index.php/MSN:NS/Challenges + * @param input Challenge input. + * @param output Callenge output. +void msn_handle_chl(char *input, char *output); + * Read a byte from a buffer + * @param buf Pointer to buffer. +guint8 msn_read8(const char *buf); + * Read a little-endian short from a buffer + * @param buf Pointer to buffer. +guint16 msn_read16le(const char *buf); + * Read a big-endian short from a buffer + * @param buf Pointer to buffer. +guint16 msn_read16be(const char *buf); + * Read a little-endian int from a buffer + * @param buf Pointer to buffer. +guint32 msn_read32le(const char *buf); + * Read a big-endian int from a buffer + * @param buf Pointer to buffer. +guint32 msn_read32be(const char *buf); + * Read a little-endian long from a buffer + * @param buf Pointer to buffer. +guint64 msn_read64le(const char *buf); + * Read a big-endian long from a buffer + * @param buf Pointer to buffer. +guint64 msn_read64be(const char *buf); + * Write a byte to a buffer + * @param buf Pointer to buffer. + * @param data 8-bit byte. +void msn_write8(char *buf, guint8 data); + * Write a little-endian short to a buffer + * @param buf Pointer to buffer. +void msn_write16le(char *buf, guint16 data); + * Write a big-endian short to a buffer + * @param buf Pointer to buffer. +void msn_write16be(char *buf, guint16 data); + * Write a little-endian int to a buffer + * @param buf Pointer to buffer. +void msn_write32le(char *buf, guint32 data); + * Write a big-endian int to a buffer + * @param buf Pointer to buffer. +void msn_write32be(char *buf, guint32 data); + * Write a little-endian long to a buffer + * @param buf Pointer to buffer. +void msn_write64le(char *buf, guint64 data); + * Write a big-endian long to a buffer + * @param buf Pointer to buffer. +void msn_write64be(char *buf, guint64 data); + * Same as above, but these increment the buf pointer. +#define msn_pop8(buf) msn_read8((buf+=1)-1) +#define msn_pop16le(buf) msn_read16le((buf+=2)-2) +#define msn_pop16be(buf) msn_read16be((buf+=2)-2) +#define msn_pop32le(buf) msn_read32le((buf+=4)-4) +#define msn_pop32be(buf) msn_read32be((buf+=4)-4) +#define msn_pop64le(buf) msn_read64le((buf+=8)-8) +#define msn_pop64be(buf) msn_read64be((buf+=8)-8) +#define msn_push8(buf, data) msn_write8(buf, data), buf+=1 +#define msn_push16le(buf, data) msn_write16le(buf, data), buf+=2 +#define msn_push16be(buf, data) msn_write16be(buf, data), buf+=2 +#define msn_push32le(buf, data) msn_write32le(buf, data), buf+=4 +#define msn_push32be(buf, data) msn_write32be(buf, data), buf+=4 +#define msn_push64le(buf, data) msn_write64le(buf, data), buf+=8 +#define msn_push64be(buf, data) msn_write64be(buf, data), buf+=8 +#endif /* MSN_UTILS_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/namespaces.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,112 @@
+ * purple - Jabber Protocol Plugin + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_NAMESPACES_H_ +#define PURPLE_JABBER_NAMESPACES_H_ +#define NS_XMPP_BIND "urn:ietf:params:xml:ns:xmpp-bind" +#define NS_XMPP_CLIENT "jabber:client" +#define NS_XMPP_SASL "urn:ietf:params:xml:ns:xmpp-sasl" +#define NS_XMPP_SESSION "urn:ietf:params:xml:ns:xmpp-session" +#define NS_XMPP_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas" +#define NS_XMPP_STREAMS "http://etherx.jabber.org/streams" +#define NS_XMPP_TLS "urn:ietf:params:xml:ns:xmpp-tls" +/* XEP-0012 Last Activity (and XEP-0256 Last Activity in Presence) */ +#define NS_LAST_ACTIVITY "jabber:iq:last" +/* XEP-0030 Service Discovery */ +#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info" +#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items" +/* XEP-0047 IBB (In-band bytestreams) */ +#define NS_IBB "http://jabber.org/protocol/ibb" +/* XEP-0065 SOCKS5 Bytestreams */ +#define NS_BYTESTREAMS "http://jabber.org/protocol/bytestreams" +/* XEP-0066 Out of Band Data (OOB) */ +#define NS_OOB_IQ_DATA "jabber:iq:oob" +#define NS_OOB_X_DATA "jabber:x:oob" +/* XEP-0071 XHTML-IM (rich-text messages) */ +#define NS_XHTML_IM "http://jabber.org/protocol/xhtml-im" +#define NS_XHTML "http://www.w3.org/1999/xhtml" +/* XEP-0084 v0.12 User Avatar */ +#define NS_AVATAR_0_12_DATA "http://www.xmpp.org/extensions/xep-0084.html#ns-data" +#define NS_AVATAR_0_12_METADATA "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata" +/* XEP-0084 v1.1 User Avatar */ +#define NS_AVATAR_1_1_DATA "urn:xmpp:avatar:data" +#define NS_AVATAR_1_1_METADATA "urn:xmpp:avatar:metadata" +/* XEP-0096 SI File Transfer */ +#define NS_SI_FILE_TRANSFER "http://jabber.org/protocol/si/profile/file-transfer" +/* XEP-0124 Bidirectional-streams Over Synchronous HTTP (BOSH) */ +#define NS_BOSH "http://jabber.org/protocol/httpbind" +/* XEP-0191 Simple Communications Blocking */ +#define NS_SIMPLE_BLOCKING "urn:xmpp:blocking" +#define NS_PING "urn:xmpp:ping" +/* XEP-0202 Entity Time */ +#define NS_ENTITY_TIME "urn:xmpp:time" +/* XEP-0203 Delayed Delivery (and legacy delayed delivery) */ +#define NS_DELAYED_DELIVERY "urn:xmpp:delay" +#define NS_DELAYED_DELIVERY_LEGACY "jabber:x:delay" +/* XEP-0206 XMPP over BOSH */ +#define NS_XMPP_BOSH "urn:xmpp:xbosh" +/* XEP-0224 Attention */ +#define NS_ATTENTION "urn:xmpp:attention:0" +/* XEP-0231 BoB (Bits of Binary) */ +#define NS_BOB "urn:xmpp:bob" +/* XEP-0237 Roster Versioning */ +#define NS_ROSTER_VERSIONING "urn:xmpp:features:rosterver" +/* XEP-0264 File Transfer Thumbnails (Thumbs) */ +#define NS_THUMBS "urn:xmpp:thumbs:0" +#define NS_GOOGLE_CAMERA "http://www.google.com/xmpp/protocol/camera/v1" +#define NS_GOOGLE_VIDEO "http://www.google.com/xmpp/protocol/video/v1" +#define NS_GOOGLE_VOICE "http://www.google.com/xmpp/protocol/voice/v1" +#define NS_GOOGLE_JINGLE_INFO "google:jingleinfo" +#define NS_GOOGLE_MAIL_NOTIFY "google:mail:notify" +#define NS_GOOGLE_ROSTER "google:roster" +#define NS_GOOGLE_PROTOCOL_SESSION "http://www.google.com/xmpp/protocol/session" +#define NS_GOOGLE_SESSION "http://www.google.com/session" +#define NS_GOOGLE_SESSION_PHONE "http://www.google.com/session/phone" +#define NS_GOOGLE_SESSION_VIDEO "http://www.google.com/session/video" +#endif /* PURPLE_JABBER_NAMESPACES_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/nat-pmp.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,77 @@
+ * @file nat-pmp.h NAT-PMP Implementation + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * Most code in nat-pmp.h copyright (C) 2007, R. Tyler Ballance, bleep, LLC. + * This file is distributed under the 3-clause (modified) BSD license: + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this list of conditions and + * the following disclaimer. + * Neither the name of the bleep. LLC nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +#ifndef _PURPLE_NAT_PMP_H +#define _PURPLE_NAT_PMP_H +#define PURPLE_PMP_LIFETIME 3600 /* 3600 seconds */ +void purple_pmp_init(void); +char *purple_pmp_get_public_ip(void); + * Remove the NAT-PMP mapping for a specified type on a specified port + * @param type The PurplePmpType + * @param privateport The private port on which we are listening locally + * @param publicport The public port on which we are expecting a response + * @param lifetime The lifetime of the mapping. It is recommended that this be PURPLE_PMP_LIFETIME. + * @returns TRUE if succesful; FALSE if unsuccessful +gboolean purple_pmp_create_map(PurplePmpType type, unsigned short privateport, unsigned short publicport, int lifetime); + * Remove the NAT-PMP mapping for a specified type on a specified port + * @param type The PurplePmpType + * @param privateport The private port on which the mapping was previously made + * @returns TRUE if succesful; FALSE if unsuccessful +gboolean purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/network.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,359 @@
+ * @file network.h Network API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_NETWORK_H_ +#define _PURPLE_NETWORK_H_ +/**************************************************************************/ +/** @name Network API */ +/**************************************************************************/ +typedef struct _PurpleNetworkListenData PurpleNetworkListenData; +typedef void (*PurpleNetworkListenCallback) (int listenfd, gpointer data); + * Converts a dot-decimal IP address to an array of unsigned + * chars. For example, converts 192.168.0.1 to a 4 byte + * array containing 192, 168, 0 and 1. + * @param ip An IP address in dot-decimal notiation. + * @return An array of 4 bytes containing an IP addresses + * equivalent to the given parameter, or NULL if + * the given IP address is invalid. This value + * is statically allocated and should not be +const unsigned char *purple_network_ip_atoi(const char *ip); + * Sets the IP address of the local system in preferences. This + * is the IP address that should be used for incoming connections + * (file transfer, direct IM, etc.) and should therefore be + * @param ip The local IP address. +void purple_network_set_public_ip(const char *ip); + * Returns the IP address of the local system set in preferences. + * This returns the value set via purple_network_set_public_ip(). + * You probably want to use purple_network_get_my_ip() instead. + * @return The local IP address set in preferences. +const char *purple_network_get_public_ip(void); + * Returns the IP address of the local system. + * You probably want to use purple_network_get_my_ip() instead. + * @note The returned string is a pointer to a static buffer. If this + * function is called twice, it may be important to make a copy + * of the returned string. + * @param fd The fd to use to help figure out the IP, or else -1. + * @return The local IP address. +const char *purple_network_get_local_system_ip(int fd); + * Returns all IP addresses of the local system. + * @note The caller must free this list. If libpurple was built with + * support for it, this function also enumerates IPv6 addresses. + * @return A list of local IP addresses. +GList *purple_network_get_all_local_system_ips(void); + * Returns the IP address that should be used anywhere a + * public IP addresses is needed (listening for an incoming + * If the user has manually specified an IP address via + * preferences, then this IP is returned. Otherwise the + * IP address returned by purple_network_get_local_system_ip() + * @note The returned string is a pointer to a static buffer. If this + * function is called twice, it may be important to make a copy + * of the returned string. + * @param fd The fd to use to help figure out the IP, or -1. + * @return The local IP address to be used. +const char *purple_network_get_my_ip(int fd); + * Should calls to purple_network_listen() and purple_network_listen_range() + * map the port externally using NAT-PMP or UPnP? + * The default value is TRUE + * @param map_external Should the open port be mapped externally? + * @deprecated In 3.0.0 a boolean will be added to the functions mentioned + * above to perform the same function. +void purple_network_listen_map_external(gboolean map_external); + * Attempts to open a listening port ONLY on the specified port number. + * You probably want to use purple_network_listen_range() instead of this. + * This function is useful, for example, if you wanted to write a telnet + * server as a Purple plugin, and you HAD to listen on port 23. Why anyone + * would want to do that is beyond me. + * This opens a listening port. The caller will want to set up a watcher + * of type PURPLE_INPUT_READ on the fd returned in cb. It will probably call + * accept in the watcher callback, and then possibly remove the watcher and + * close the listening socket, and add a new watcher on the new socket accept + * @param port The port number to bind to. Must be greater than 0. + * @param socket_type The type of socket to open for listening. + * This will be either SOCK_STREAM for TCP or SOCK_DGRAM for UDP. + * @param cb The callback to be invoked when the port to listen on is available. + * The file descriptor of the listening socket will be specified in + * this callback, or -1 if no socket could be established. + * @param cb_data extra data to be returned when cb is called + * @return A pointer to a data structure that can be used to cancel + * the pending listener, or NULL if unable to obtain a local +PurpleNetworkListenData *purple_network_listen(unsigned short port, + int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data); + * \copydoc purple_network_listen + * Libpurple does not currently do any port mapping (stateful firewall hole + * poking) for IPv6-only listeners (if an IPv6 socket supports v4-mapped + * addresses, a mapping is done). + * @param socket_family The protocol family of the socket. This should be + * AF_INET for IPv4 or AF_INET6 for IPv6. IPv6 sockets + * may or may not be able to accept IPv4 connections + * based on the system configuration (use + * purple_socket_speaks_ipv4 to check). If an IPv6 + * socket doesn't accept V4-mapped addresses, you will + * need a second listener to support both v4 and v6. + * @deprecated This function will be renamed to purple_network_listen in 3.0.0. +PurpleNetworkListenData *purple_network_listen_family(unsigned short port, + int socket_family, int socket_type, PurpleNetworkListenCallback cb, + * Opens a listening port selected from a range of ports. The range of + * ports used is chosen in the following manner: + * If a range is specified in preferences, these values are used. + * If a non-0 values are passed to the function as parameters, these + * Otherwise a port is chosen at random by the operating system. + * This opens a listening port. The caller will want to set up a watcher + * of type PURPLE_INPUT_READ on the fd returned in cb. It will probably call + * accept in the watcher callback, and then possibly remove the watcher and close + * the listening socket, and add a new watcher on the new socket accept + * @param start The port number to bind to, or 0 to pick a random port. + * Users are allowed to override this arg in prefs. + * @param end The highest possible port in the range of ports to listen on, + * or 0 to pick a random port. Users are allowed to override this + * @param socket_type The type of socket to open for listening. + * This will be either SOCK_STREAM for TCP or SOCK_DGRAM for UDP. + * @param cb The callback to be invoked when the port to listen on is available. + * The file descriptor of the listening socket will be specified in + * this callback, or -1 if no socket could be established. + * @param cb_data extra data to be returned when cb is called + * @return A pointer to a data structure that can be used to cancel + * the pending listener, or NULL if unable to obtain a local +PurpleNetworkListenData *purple_network_listen_range(unsigned short start, + unsigned short end, int socket_type, + PurpleNetworkListenCallback cb, gpointer cb_data); + * \copydoc purple_network_listen_range + * Libpurple does not currently do any port mapping (stateful firewall hole + * poking) for IPv6-only listeners (if an IPv6 socket supports v4-mapped + * addresses, a mapping is done). + * @param socket_family The protocol family of the socket. This should be + * AF_INET for IPv4 or AF_INET6 for IPv6. IPv6 sockets + * may or may not be able to accept IPv4 connections + * based on the system configuration (use + * purple_socket_speaks_ipv4 to check). If an IPv6 + * socket doesn't accept V4-mapped addresses, you will + * need a second listener to support both v4 and v6. + * @deprecated This function will be renamed to purple_network_listen_range +PurpleNetworkListenData *purple_network_listen_range_family( + unsigned short start, unsigned short end, int socket_family, + int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data); + * This can be used to cancel any in-progress listener connection + * by passing in the return value from either purple_network_listen() + * or purple_network_listen_range(). + * @param listen_data This listener attempt will be cancelled and + * the struct will be freed. +void purple_network_listen_cancel(PurpleNetworkListenData *listen_data); + * Gets a port number from a file descriptor. + * @param fd The file descriptor. This should be a tcp socket. The current + * implementation probably dies on anything but IPv4. Perhaps this + * possible bug will inspire new and valuable contributors to Purple. + * @return The port number, in host byte order. +unsigned short purple_network_get_port_from_fd(int fd); + * Detects if there is an available network connection. + * @return TRUE if the network is available +gboolean purple_network_is_available(void); + * Makes purple_network_is_available() always return @c TRUE. + * This is what backs the --force-online command line argument in Pidgin, + * for example. This is useful for offline testing, especially when + * combined with nullprpl. +void purple_network_force_online(void); + * Get the handle for the network system + * @return the handle to the network system +void *purple_network_get_handle(void); + * Update the STUN server IP given the host name + * Will result in a DNS query being executed asynchronous + * @param stun_server The host name of the STUN server to set +void purple_network_set_stun_server(const gchar *stun_server); + * Get the IP address of the STUN server as a string representation + * @return the IP address +const gchar *purple_network_get_stun_ip(void); + * Update the TURN server IP given the host name + * Will result in a DNS query being executed asynchronous + * @param turn_server The host name of the TURN server to set +void purple_network_set_turn_server(const gchar *turn_server); + * Get the IP address of the TURN server as a string representation + * @return the IP address +const gchar *purple_network_get_turn_ip(void); + * Remove a port mapping (UPnP or NAT-PMP) associated with listening socket + * @param fd Socket to remove the port mapping for +void purple_network_remove_port_mapping(gint fd); + * Convert a UTF-8 domain name to ASCII in accordance with the IDNA + * specification. If libpurple is compiled without IDN support, this function + * copies the input into the output buffer. + * Because this function is used by DNS resolver child/threads, it uses no + * other libpurple API and is threadsafe. + * In general, a buffer of about 512 bytes is the appropriate size to use. + * @param in The hostname to be converted. + * @param out The output buffer where an allocated string will be returned. + * The caller is responsible for freeing this. + * @returns 0 on success, -1 if the out is NULL, or an error code + * that currently corresponds to the Idna_rc enum in libidn. +int purple_network_convert_idn_to_ascii(const gchar *in, gchar **out); + * Initializes the network subsystem. +void purple_network_init(void); + * Shuts down the network subsystem. +void purple_network_uninit(void); +#endif /* _PURPLE_NETWORK_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/nexus.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,219 @@
+ * @file nexus.h MSN Nexus functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnNexus MsnNexus; +typedef struct _MsnTicketToken MsnTicketToken; +/* Index into ticket_tokens in nexus.c Keep updated! */ + MSN_AUTH_MESSENGER = 0, + MSN_AUTH_MESSENGER_WEB = 1, + MSN_AUTH_LIVE_SECURE = 3, +#define MSN_SSO_SERVER "login.live.com" +#define SSO_POST_URL "/RST.srf" +#define MSN_SSO_RST_TEMPLATE \ +"<wst:RequestSecurityToken xmlns=\"http://schemas.xmlsoap.org/ws/2004/04/trust\" Id=\"RST%d\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsp:AppliesTo xmlns=\"http://schemas.xmlsoap.org/ws/2002/12/policy\">"\ + "<wsa:EndpointReference xmlns=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\">"\ + "<wsa:Address>%s</wsa:Address>"\ + "</wsa:EndpointReference>"\ + "<wsse:PolicyReference xmlns=\"http://schemas.xmlsoap.org/ws/2003/06/secext\" URI=\"%s\"></wsse:PolicyReference>"\ +"</wst:RequestSecurityToken>" +#define MSN_SSO_TEMPLATE "<?xml version='1.0' encoding='utf-8'?>"\ +"<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\""\ + " xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\""\ + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2002/12/policy\""\ + " xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\""\ + " xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\""\ + " xmlns:wssc=\"http://schemas.xmlsoap.org/ws/2004/04/sc\""\ + " xmlns:wst=\"http://schemas.xmlsoap.org/ws/2004/04/trust\">"\ + " xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\""\ + "<ps:HostingApp>{7108E71A-9926-4FCB-BCC9-9A9D3F32E423}</ps:HostingApp>"\ + "<ps:BinaryVersion>4</ps:BinaryVersion>"\ + "<ps:UIVersion>1</ps:UIVersion>"\ + "<ps:Cookies></ps:Cookies>"\ + "<ps:RequestParams>AQAAAAIAAABsYwQAAAAxMDMz</ps:RequestParams>"\ + "<wsse:UsernameToken Id=\"user\">"\ + "<wsse:Username>%s</wsse:Username>"\ + "<wsse:Password>%s</wsse:Password>"\ + "</wsse:UsernameToken>"\ + "<ps:RequestMultipleSecurityTokens"\ + " xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\""\ + "<wst:RequestSecurityToken Id=\"RST0\">"\ + "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>"\ + "<wsa:EndpointReference>"\ + "<wsa:Address>http://Passport.NET/tb</wsa:Address>"\ + "</wsa:EndpointReference>"\ + "</wst:RequestSecurityToken>"\ + "%s" /* Other RSTn tokens */\ + "</ps:RequestMultipleSecurityTokens>"\ +#define MSN_SSO_AUTHINFO_TEMPLATE \ +"<ps:AuthInfo xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"PPAuthInfo\">"\ + "<ps:HostingApp>{7108E71A-9926-4FCB-BCC9-9A9D3F32E423}</ps:HostingApp>"\ + "<ps:BinaryVersion>4</ps:BinaryVersion>"\ + "<ps:UIVersion>1</ps:UIVersion>"\ + "<ps:Cookies></ps:Cookies>"\ + "<ps:RequestParams>AQAAAAIAAABsYwQAAAA0MTA1</ps:RequestParams>"\ +/* Not sure what's editable here, so I'll just hard-code the SHA1 hash */ +#define MSN_SSO_AUTHINFO_SHA1_BASE64 "d2IeTF4DAkPEa/tVETHznsivEpc=" +#define MSN_SSO_TIMESTAMP_TEMPLATE \ +"<wsu:Timestamp xmlns=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" Id=\"Timestamp\">"\ + "<wsu:Created>%s</wsu:Created>"\ + "<wsu:Expires>%s</wsu:Expires>"\ +#define MSN_SSO_SIGNEDINFO_TEMPLATE \ +"<SignedInfo xmlns=\"http://www.w3.org/2000/09/xmldsig#\">"\ + "<CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></CanonicalizationMethod>"\ + "<SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#hmac-sha1\"></SignatureMethod>"\ + "<Reference URI=\"#RST%d\">"\ + "<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></Transform>"\ + "<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"></DigestMethod>"\ + "<DigestValue>%s</DigestValue>"\ + "<Reference URI=\"#Timestamp\">"\ + "<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></Transform>"\ + "<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"></DigestMethod>"\ + "<DigestValue>%s</DigestValue>"\ + "<Reference URI=\"#PPAuthInfo\">"\ + "<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"></Transform>"\ + "<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"></DigestMethod>"\ + "<DigestValue>" MSN_SSO_AUTHINFO_SHA1_BASE64 "</DigestValue>"\ +#define MSN_SSO_TOKEN_UPDATE_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\""\ + " xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\""\ + " xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\""\ + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2002/12/policy\""\ + " xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\""\ + " xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\""\ + " xmlns:wssc=\"http://schemas.xmlsoap.org/ws/2004/04/sc\""\ + " xmlns:wst=\"http://schemas.xmlsoap.org/ws/2004/04/trust\">"\ + MSN_SSO_AUTHINFO_TEMPLATE /* ps:AuthInfo */ \ + "<EncryptedData xmlns=\"http://www.w3.org/2001/04/xmlenc#\" Id=\"BinaryDAToken0\" Type=\"http://www.w3.org/2001/04/xmlenc#Element\">"\ + "<EncryptionMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#tripledes-cbc\"></EncryptionMethod>"\ + "<ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">"\ + "<ds:KeyName>http://Passport.NET/STS</ds:KeyName>"\ + "<CipherValue>%s</CipherValue>"\ + "<wssc:DerivedKeyToken Id=\"SignKey\">"\ + "<wsse:RequestedTokenReference>"\ + "<wsse:KeyIdentifier ValueType=\"http://docs.oasis-open.org/wss/2004/XX/oasis-2004XX-wss-saml-token-profile-1.0#SAMLAssertionID\" />"\ + "<wsse:Reference URI=\"#BinaryDAToken0\" />"\ + "</wsse:RequestedTokenReference>"\ + "<wssc:Nonce>%s</wssc:Nonce>"\ + "</wssc:DerivedKeyToken>"\ + "%s" /* wsu:Timestamp */\ + "<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">"\ + "<SignatureValue>%s</SignatureValue>"\ + "<wsse:SecurityTokenReference>"\ + "<wsse:Reference URI=\"#SignKey\" />"\ + "</wsse:SecurityTokenReference>"\ + "%s" /* wst:RequestSecurityToken */ \ +struct _MsnTicketToken { + /* From server via USR command */ + /* From server via SOAP stuff */ + MsnTicketToken *tokens; +void msn_nexus_connect(MsnNexus *nexus); +MsnNexus *msn_nexus_new(MsnSession *session); +void msn_nexus_destroy(MsnNexus *nexus); +GHashTable *msn_nexus_get_token(MsnNexus *nexus, MsnAuthDomains id); +const char *msn_nexus_get_token_str(MsnNexus *nexus, MsnAuthDomains id); +void msn_nexus_update_token(MsnNexus *nexus, int id, GSourceFunc cb, gpointer data); +#endif /* MSN_NEXUS_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/notification.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,124 @@
+ * @file notification.h Notification server functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef MSN_NOTIFICATION_H +#define MSN_NOTIFICATION_H +typedef struct _MsnNotification MsnNotification; +/* MSN protocol challenge info */ +/* MSNP18 challenge: WLM Version 2009 (Build 14.0.8089.726) */ +#define MSNP18_WLM_PRODUCT_KEY "C1BX{V4W}Q3*10SM" +#define MSNP18_WLM_PRODUCT_ID "PROD0120PW!CCV9@" +/* MSNP15 challenge: WLM 8.5.1288.816 */ +#define MSNP15_WLM_PRODUCT_KEY "ILTXC!4IXB5FB*PX" +#define MSNP15_WLM_PRODUCT_ID "PROD0119GSJUC$18" +#define MSNP13_WLM_PRODUCT_KEY "O4BG@C7BWLYQX?5G" +#define MSNP13_WLM_PRODUCT_ID "PROD01065C%ZFN6F" +#define MSNP10_PRODUCT_KEY "VT6PX?UQTM4WM%YR" +#define MSNP10_PRODUCT_ID "PROD0038W!61ZTF9" + * This is a convenience pointer that always points to +typedef void (*MsnFqyCb)(MsnSession *session, const char *passport, MsnNetwork network, gpointer data); +/* Type used for msn_notification_send_uun */ + MSN_UNIFIED_NOTIFICATION_SHARED_FOLDERS = 1, + MSN_UNIFIED_NOTIFICATION_UNKNOWN1 = 2, + MSN_UNIFIED_NOTIFICATION_P2P = 3, + MSN_UNIFIED_NOTIFICATION_MPOP = 4 +} MsnUnifiedNotificationType; +void msn_notification_end(void); +void msn_notification_init(void); +void msn_notification_add_buddy_to_list(MsnNotification *notification, + MsnListId list_id, MsnUser *user); +void msn_notification_rem_buddy_from_list(MsnNotification *notification, + MsnListId list_id, MsnUser *user); +void msn_notification_send_fqy(MsnSession *session, + const char *payload, int payload_len, + MsnFqyCb cb, gpointer cb_data); +MsnNotification *msn_notification_new(MsnSession *session); +void msn_notification_destroy(MsnNotification *notification); +gboolean msn_notification_connect(MsnNotification *notification, + const char *host, int port); +void msn_notification_disconnect(MsnNotification *notification); +void msn_notification_dump_contact(MsnSession *session); +void msn_notification_send_uum(MsnSession *session, MsnMessage *msg); +void msn_notification_send_uux(MsnSession *session, const char *payload); +void msn_notification_send_uux_endpointdata(MsnSession *session); +void msn_notification_send_uux_private_endpointdata(MsnSession *session); +void msn_notification_send_uun(MsnSession *session, + MsnUnifiedNotificationType type, +void msn_notification_send_circle_auth(MsnSession *session, const char *ticket); + * Closes a notification. + * It's first closed, and then disconnected. + * @param notification The notification object to close. +void msn_notification_close(MsnNotification *notification); +void msn_got_login_params(MsnSession *session, const char *ticket, const char *response); +#endif /* MSN_NOTIFICATION_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/notify.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,814 @@
+ * @file notify.h Notification API + * @see @ref notify-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_NOTIFY_H_ +#define _PURPLE_NOTIFY_H_ +#include <glib-object.h> +typedef struct _PurpleNotifyUserInfoEntry PurpleNotifyUserInfoEntry; +typedef struct _PurpleNotifyUserInfo PurpleNotifyUserInfo; + * Notification close callbacks. +typedef void (*PurpleNotifyCloseCallback) (gpointer user_data); + PURPLE_NOTIFY_MESSAGE = 0, /**< Message notification. */ + PURPLE_NOTIFY_EMAIL, /**< Single email notification. */ + PURPLE_NOTIFY_EMAILS, /**< Multiple email notification. */ + PURPLE_NOTIFY_FORMATTED, /**< Formatted text. */ + PURPLE_NOTIFY_SEARCHRESULTS, /**< Buddy search results. */ + PURPLE_NOTIFY_USERINFO, /**< Formatted userinfo text. */ + PURPLE_NOTIFY_URI /**< URI notification or display. */ + * Notification message types. + PURPLE_NOTIFY_MSG_ERROR = 0, /**< Error notification. */ + PURPLE_NOTIFY_MSG_WARNING, /**< Warning notification. */ + PURPLE_NOTIFY_MSG_INFO /**< Information notification. */ + PURPLE_NOTIFY_BUTTON_LABELED = 0, /**< special use, see _button_add_labeled */ + PURPLE_NOTIFY_BUTTON_CONTINUE = 1, + PURPLE_NOTIFY_BUTTON_ADD, + PURPLE_NOTIFY_BUTTON_INFO, + PURPLE_NOTIFY_BUTTON_IM, + PURPLE_NOTIFY_BUTTON_JOIN, + PURPLE_NOTIFY_BUTTON_INVITE +} PurpleNotifySearchButtonType; + * Search results object. + GList *columns; /**< List of the search column objects. */ + GList *rows; /**< List of rows in the result. */ + GList *buttons; /**< List of buttons to display. */ +} PurpleNotifySearchResults; + * Types of PurpleNotifyUserInfoEntry objects + PURPLE_NOTIFY_USER_INFO_ENTRY_PAIR = 0, + PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK, + PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_HEADER +} PurpleNotifyUserInfoEntryType; + * Single column of a search result. + char *title; /**< Title of the column. */ +} PurpleNotifySearchColumn; + * Callback for a button in a search result. + * @param c the PurpleConnection passed to purple_notify_searchresults + * @param row the contents of the selected row + * @param user_data User defined data. +typedef void (*PurpleNotifySearchResultsCallback)(PurpleConnection *c, GList *row, + * Definition of a button. + PurpleNotifySearchButtonType type; + PurpleNotifySearchResultsCallback callback; /**< Function to be called when clicked. */ + char *label; /**< only for PURPLE_NOTIFY_BUTTON_LABELED */ +} PurpleNotifySearchButton; + * Notification UI operations. + void *(*notify_message)(PurpleNotifyMsgType type, const char *title, + const char *primary, const char *secondary); + void *(*notify_email)(PurpleConnection *gc, + const char *subject, const char *from, + const char *to, const char *url); + void *(*notify_emails)(PurpleConnection *gc, + size_t count, gboolean detailed, + const char **subjects, const char **froms, + const char **tos, const char **urls); + void *(*notify_formatted)(const char *title, const char *primary, + const char *secondary, const char *text); + void *(*notify_searchresults)(PurpleConnection *gc, const char *title, + const char *primary, const char *secondary, + PurpleNotifySearchResults *results, gpointer user_data); + void (*notify_searchresults_new_rows)(PurpleConnection *gc, + PurpleNotifySearchResults *results, + void *(*notify_userinfo)(PurpleConnection *gc, const char *who, + PurpleNotifyUserInfo *user_info); + void *(*notify_uri)(const char *uri); + void (*close_notify)(PurpleNotifyType type, void *ui_handle); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/** Search results notification API */ +/**************************************************************************/ + * Displays results from a buddy search. This can be, for example, + * a window with a list of all found buddies, where you are given the + * option of adding buddies to your buddy list. + * @param gc The PurpleConnection handle associated with the information. + * @param title The title of the message. If this is NULL, the title + * will be "Search Results." + * @param primary The main point of the message. + * @param secondary The secondary information. + * @param results The PurpleNotifySearchResults instance. + * @param cb The callback to call when the user closes + * @param user_data The data to pass to the close callback and any other + * callback associated with a button. + * @return A UI-specific handle. +void *purple_notify_searchresults(PurpleConnection *gc, const char *title, + const char *primary, const char *secondary, + PurpleNotifySearchResults *results, PurpleNotifyCloseCallback cb, + * Frees a PurpleNotifySearchResults object. + * @param results The PurpleNotifySearchResults to free. +void purple_notify_searchresults_free(PurpleNotifySearchResults *results); + * Replace old rows with the new. Reuse an existing window. + * @param gc The PurpleConnection structure. + * @param results The PurpleNotifySearchResults structure. + * @param data Data returned by the purple_notify_searchresults(). +void purple_notify_searchresults_new_rows(PurpleConnection *gc, + PurpleNotifySearchResults *results, + * Adds a stock button that will be displayed in the search results dialog. + * @param results The search results object. + * @param type Type of the button. (TODO: Only one button of a given type + * @param cb Function that will be called on the click event. +void purple_notify_searchresults_button_add(PurpleNotifySearchResults *results, + PurpleNotifySearchButtonType type, + PurpleNotifySearchResultsCallback cb); + * Adds a plain labelled button that will be displayed in the search results + * @param results The search results object + * @param label The label to display + * @param cb Function that will be called on the click event +void purple_notify_searchresults_button_add_labeled(PurpleNotifySearchResults *results, + PurpleNotifySearchResultsCallback cb); + * Returns a newly created search results object. + * @return The new search results object. +PurpleNotifySearchResults *purple_notify_searchresults_new(void); + * Returns a newly created search result column object. + * @param title Title of the column. NOTE: Title will get g_strdup()ed. + * @return The new search column object. +PurpleNotifySearchColumn *purple_notify_searchresults_column_new(const char *title); + * Adds a new column to the search result object. + * @param results The result object to which the column will be added. + * @param column The column that will be added to the result object. +void purple_notify_searchresults_column_add(PurpleNotifySearchResults *results, + PurpleNotifySearchColumn *column); + * Adds a new row of the results to the search results object. + * @param results The search results object. + * @param row The row of the results. +void purple_notify_searchresults_row_add(PurpleNotifySearchResults *results, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) + * Returns a number of the rows in the search results object. + * @deprecated This function will be removed in Pidgin 3.0.0 unless + * there is sufficient demand to keep it. Using this + * function encourages looping through the results + * inefficiently. Instead of using this function you + * should iterate through the results using a loop + * for (l = results->rows; l != NULL; l = l->next) + * If you really need to get the number of rows you + * can use g_list_length(results->rows). + * @param results The search results object. + * @return Number of the result rows. +guint purple_notify_searchresults_get_rows_count(PurpleNotifySearchResults *results); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) + * Returns a number of the columns in the search results object. + * @deprecated This function will be removed in Pidgin 3.0.0 unless + * there is sufficient demand to keep it. Using this + * function encourages looping through the columns + * inefficiently. Instead of using this function you + * should iterate through the columns using a loop + * for (l = results->columns; l != NULL; l = l->next) + * If you really need to get the number of columns you + * can use g_list_length(results->columns). + * @param results The search results object. + * @return Number of the columns. +guint purple_notify_searchresults_get_columns_count(PurpleNotifySearchResults *results); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) + * Returns a row of the results from the search results object. + * @deprecated This function will be removed in Pidgin 3.0.0 unless + * there is sufficient demand to keep it. Using this + * function encourages looping through the results + * inefficiently. Instead of using this function you + * should iterate through the results using a loop + * for (l = results->rows; l != NULL; l = l->next) + * If you really need to get the data for a particular + * row you can use g_list_nth_data(results->rows, row_id). + * @param results The search results object. + * @param row_id Index of the row to be returned. + * @return Row of the results. +GList *purple_notify_searchresults_row_get(PurpleNotifySearchResults *results, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) + * Returns a title of the search results object's column. + * @deprecated This function will be removed in Pidgin 3.0.0 unless + * there is sufficient demand to keep it. Using this + * function encourages looping through the columns + * inefficiently. Instead of using this function you + * should iterate through the name of a particular + * g_list_nth_data(results->columns, row_id). + * @param results The search results object. + * @param column_id Index of the column. + * @return Title of the column. +char *purple_notify_searchresults_column_get_title(PurpleNotifySearchResults *results, + unsigned int column_id); +/**************************************************************************/ +/** @name Notification API */ +/**************************************************************************/ + * Displays a notification message to the user. + * @param handle The plugin or connection handle. + * @param type The notification type. + * @param title The title of the message. + * @param primary The main point of the message. + * @param secondary The secondary information. + * @param cb The callback to call when the user closes + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_notify_message(void *handle, PurpleNotifyMsgType type, + const char *title, const char *primary, + const char *secondary, PurpleNotifyCloseCallback cb, + * Displays a single email notification to the user. + * @param handle The plugin or connection handle. + * @param subject The subject of the email. + * @param from The from address. + * @param to The destination address. + * @param url The URL where the message can be read. + * @param cb The callback to call when the user closes + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_notify_email(void *handle, const char *subject, + const char *from, const char *to, + const char *url, PurpleNotifyCloseCallback cb, + * Displays a notification for multiple emails to the user. + * @param handle The plugin or connection handle. + * @param count The number of emails. '0' can be used to signify that + * the user has no unread emails and the UI should remove + * the mail notification. + * @param detailed @c TRUE if there is information for each email in the + * @param subjects The array of subjects. + * @param froms The array of from addresses. + * @param tos The array of destination addresses. + * @param urls The URLs where the messages can be read. + * @param cb The callback to call when the user closes + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_notify_emails(void *handle, size_t count, gboolean detailed, + const char **subjects, const char **froms, + const char **tos, const char **urls, + PurpleNotifyCloseCallback cb, gpointer user_data); + * Displays a notification with formatted text. + * The text is essentially a stripped-down format of HTML, the same that + * @param handle The plugin or connection handle. + * @param title The title of the message. + * @param primary The main point of the message. + * @param secondary The secondary information. + * @param text The formatted text. + * @param cb The callback to call when the user closes + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_notify_formatted(void *handle, const char *title, + const char *primary, const char *secondary, + const char *text, PurpleNotifyCloseCallback cb, gpointer user_data); + * Displays user information with formatted text, passing information giving + * the connection and username from which the user information came. + * The text is essentially a stripped-down format of HTML, the same that + * @param gc The PurpleConnection handle associated with the information. + * @param who The username associated with the information. + * @param user_info The PurpleNotifyUserInfo which contains the information + * @param cb The callback to call when the user closes the notification. + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_notify_userinfo(PurpleConnection *gc, const char *who, + PurpleNotifyUserInfo *user_info, PurpleNotifyCloseCallback cb, + * Create a new PurpleNotifyUserInfo which is suitable for passing to + * purple_notify_userinfo() + * @return A new PurpleNotifyUserInfo, which the caller must destroy when done +PurpleNotifyUserInfo *purple_notify_user_info_new(void); + * Destroy a PurpleNotifyUserInfo + * @param user_info The PurpleNotifyUserInfo +void purple_notify_user_info_destroy(PurpleNotifyUserInfo *user_info); + * Retrieve the array of PurpleNotifyUserInfoEntry objects from a + * This GList may be manipulated directly with normal GList functions such + * as g_list_insert(). Only PurpleNotifyUserInfoEntry are allowed in the + * list. If a PurpleNotifyUserInfoEntry item is added to the list, it + * should not be g_free()'d by the caller; PurpleNotifyUserInfo will g_free + * To remove a PurpleNotifyUserInfoEntry, use + * purple_notify_user_info_remove_entry(). Do not use the GList directly. + * @param user_info The PurpleNotifyUserInfo + * @constreturn A GList of PurpleNotifyUserInfoEntry objects +GList *purple_notify_user_info_get_entries(PurpleNotifyUserInfo *user_info); + * Create a textual representation of a PurpleNotifyUserInfo, separating + * @param user_info The PurpleNotifyUserInfo + * @param newline The separation character +char *purple_notify_user_info_get_text_with_newline(PurpleNotifyUserInfo *user_info, const char *newline); + * Add a label/value pair to a PurpleNotifyUserInfo object. + * PurpleNotifyUserInfo keeps track of the order in which pairs are added. + * @param user_info The PurpleNotifyUserInfo + * @param label A label, which for example might be displayed by a + * UI with a colon after it ("Status:"). Do not include + * a colon. If NULL, value will be displayed without a + * @param value The value, which might be displayed by a UI after + * the label. This should be valid HTML. If you want + * to insert plaintext then use + * purple_notify_user_info_add_pair_plaintext(), instead. + * If this is NULL the label will still be displayed; + * the UI should treat label as independent and not + * include a colon if it would otherwise. + * TODO: In 3.0.0 this function should be renamed to + * purple_notify_user_info_add_pair_html(). And optionally + * purple_notify_user_info_add_pair_plaintext() could be renamed to + * purple_notify_user_info_add_pair(). +void purple_notify_user_info_add_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value); + * Like purple_notify_user_info_add_pair, but value should be plaintext + * and will be escaped using g_markup_escape_text(). +void purple_notify_user_info_add_pair_plaintext(PurpleNotifyUserInfo *user_info, const char *label, const char *value); + * Prepend a label/value pair to a PurpleNotifyUserInfo object + * @param user_info The PurpleNotifyUserInfo + * @param label A label, which for example might be displayed by a + * UI with a colon after it ("Status:"). Do not include + * a colon. If NULL, value will be displayed without a + * @param value The value, which might be displayed by a UI after + * the label. If NULL, label will still be displayed; + * the UI should then treat label as independent and not + * include a colon if it would otherwise. +void purple_notify_user_info_prepend_pair(PurpleNotifyUserInfo *user_info, const char *label, const char *value); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_NOTIFY_C_) + * Remove a PurpleNotifyUserInfoEntry from a PurpleNotifyUserInfo object + * without freeing the entry. + * @param user_info The PurpleNotifyUserInfo + * @param user_info_entry The PurpleNotifyUserInfoEntry + * @deprecated Nothing is using this function and it should be removed + * in 3.0.0. Or, if we decide we want to keep it in 3.0.0 + * then we should make purple_notify_user_info_entry_destroy + * public so that entries can be free'd after they're removed. +void purple_notify_user_info_remove_entry(PurpleNotifyUserInfo *user_info, PurpleNotifyUserInfoEntry *user_info_entry); + * Create a new PurpleNotifyUserInfoEntry + * If added to a PurpleNotifyUserInfo object, this should not be free()'d, + * as PurpleNotifyUserInfo will do so when destroyed. + * purple_notify_user_info_add_pair() and + * purple_notify_user_info_prepend_pair() are convenience methods for + * creating entries and adding them to a PurpleNotifyUserInfo. + * @param label A label, which for example might be displayed by a UI + * with a colon after it ("Status:"). Do not include a + * colon. If NULL, value will be displayed without a label. + * @param value The value, which might be displayed by a UI after the + * label. If NULL, label will still be displayed; the UI + * should then treat label as independent and not include a + * colon if it would otherwise. + * @result A new PurpleNotifyUserInfoEntry +PurpleNotifyUserInfoEntry *purple_notify_user_info_entry_new(const char *label, const char *value); + * Add a section break. A UI might display this as a horizontal line. + * @param user_info The PurpleNotifyUserInfo +void purple_notify_user_info_add_section_break(PurpleNotifyUserInfo *user_info); + * Prepend a section break. A UI might display this as a horizontal line. + * @param user_info The PurpleNotifyUserInfo +void purple_notify_user_info_prepend_section_break(PurpleNotifyUserInfo *user_info); + * Add a section header. A UI might display this in a different font + * @param user_info The PurpleNotifyUserInfo + * @param label The name of the section +void purple_notify_user_info_add_section_header(PurpleNotifyUserInfo *user_info, const char *label); + * Prepend a section header. A UI might display this in a different font + * @param user_info The PurpleNotifyUserInfo + * @param label The name of the section +void purple_notify_user_info_prepend_section_header(PurpleNotifyUserInfo *user_info, const char *label); + * Remove the last item which was added to a PurpleNotifyUserInfo. This + * could be used to remove a section header which is not needed. +void purple_notify_user_info_remove_last_item(PurpleNotifyUserInfo *user_info); + * Get the label for a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry +const gchar *purple_notify_user_info_entry_get_label(PurpleNotifyUserInfoEntry *user_info_entry); + * Set the label for a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry + * @param label The label +void purple_notify_user_info_entry_set_label(PurpleNotifyUserInfoEntry *user_info_entry, const char *label); + * Get the value for a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry +const gchar *purple_notify_user_info_entry_get_value(PurpleNotifyUserInfoEntry *user_info_entry); + * Set the value for a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry + * @param value The value +void purple_notify_user_info_entry_set_value(PurpleNotifyUserInfoEntry *user_info_entry, const char *value); + * Get the type of a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry + * @return The PurpleNotifyUserInfoEntryType +PurpleNotifyUserInfoEntryType purple_notify_user_info_entry_get_type(PurpleNotifyUserInfoEntry *user_info_entry); + * Set the type of a PurpleNotifyUserInfoEntry + * @param user_info_entry The PurpleNotifyUserInfoEntry + * @param type The PurpleNotifyUserInfoEntryType +void purple_notify_user_info_entry_set_type(PurpleNotifyUserInfoEntry *user_info_entry, + PurpleNotifyUserInfoEntryType type); + * Opens a URI or somehow presents it to the user. + * @param handle The plugin or connection handle. + * @param uri The URI to display or go to. + * @return A UI-specific handle, if any. This may only be presented if + * the UI code displays a dialog instead of a webpage, or something +void *purple_notify_uri(void *handle, const char *uri); + * Closes a notification. + * This should be used only by the UI operation functions and part of the + * @param type The notification type. + * @param ui_handle The notification UI handle. +void purple_notify_close(PurpleNotifyType type, void *ui_handle); + * Closes all notifications registered with the specified handle. + * @param handle The handle. +void purple_notify_close_with_handle(void *handle); + * A wrapper for purple_notify_message that displays an information message. +#define purple_notify_info(handle, title, primary, secondary) \ + purple_notify_message((handle), PURPLE_NOTIFY_MSG_INFO, (title), \ + (primary), (secondary), NULL, NULL) + * A wrapper for purple_notify_message that displays a warning message. +#define purple_notify_warning(handle, title, primary, secondary) \ + purple_notify_message((handle), PURPLE_NOTIFY_MSG_WARNING, (title), \ + (primary), (secondary), NULL, NULL) + * A wrapper for purple_notify_message that displays an error message. +#define purple_notify_error(handle, title, primary, secondary) \ + purple_notify_message((handle), PURPLE_NOTIFY_MSG_ERROR, (title), \ + (primary), (secondary), NULL, NULL) +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used when displaying a + * @param ops The UI operations structure. +void purple_notify_set_ui_ops(PurpleNotifyUiOps *ops); + * Returns the UI operations structure to be used when displaying a + * @return The UI operations structure. +PurpleNotifyUiOps *purple_notify_get_ui_ops(void); +/**************************************************************************/ +/** @name Notify Subsystem */ +/**************************************************************************/ + * Returns the notify subsystem handle. + * @return The notify subsystem handle. +void *purple_notify_get_handle(void); + * Initializes the notify subsystem. +void purple_notify_init(void); + * Uninitializes the notify subsystem. +void purple_notify_uninit(void); +#endif /* _PURPLE_NOTIFY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/ntlm.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,73 @@
+ * Copyright (C) 2005, Thomas Butter <butter@uni-mannheim.de> + * ntlm structs are taken from NTLM description on + * http://www.innovation.ch/java/ntlm.html + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Generates the base64 encoded type 1 message needed for NTLM authentication + * @param hostname Your hostname + * @param domain The domain to authenticate to + * @return base64 encoded string to send to the server. This should + * be g_free'd by the caller. +gchar *purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain); + * Parses the ntlm type 2 message + * @param type2 String containing the base64 encoded type2 message + * @param flags If not @c NULL, this will store the flags for the message + * @return The nonce for use in message type3. This is a statically + * allocated 8 byte binary string. +guint8 *purple_ntlm_parse_type2(const gchar *type2, guint32 *flags); + * Generates a type3 message + * @param username The username + * @param passw The password + * @param hostname The hostname + * @param domain The domain to authenticate against + * @param nonce The nonce returned by purple_ntlm_parse_type2 + * @param flags Pointer to the flags returned by purple_ntlm_parse_type2 + * @return A base64 encoded type3 message. This should be g_free'd by +gchar *purple_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags); +#endif /* _PURPLE_NTLM_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/object.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,276 @@
+ * @file object.h MSNObject API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + MSN_OBJECT_UNKNOWN = -1, /**< Unknown object */ + MSN_OBJECT_RESERVED1 = 1, /**< Reserved */ + MSN_OBJECT_EMOTICON = 2, /**< Custom Emoticon */ + MSN_OBJECT_USERTILE = 3, /**< UserTile (buddy icon) */ + MSN_OBJECT_RESERVED2 = 4, /**< Reserved */ + MSN_OBJECT_BACKGROUND = 5 /**< Background */ + PurpleStoredImage *img; + * Creates a MsnObject structure. + * @return A new MsnObject structure. +MsnObject *msn_object_new(void); + * Creates a MsnObject structure from a string. + * @param str The string. + * @return The new MsnObject structure. +MsnObject *msn_object_new_from_string(const char *str); + * Creates a MsnObject structure from a stored image + * @param img The image associated to object + * @param location The object location as stored in MsnObject + * @param creator The creator of the object + * @param type The type of the object + * @return A new MsnObject structure +MsnObject *msn_object_new_from_image(PurpleStoredImage *img, + const char *location, const char *creator, MsnObjectType type); + * Destroys an MsnObject structure. + * @param obj The object structure. +void msn_object_destroy(MsnObject *obj); + * Outputs a string representation of an MsnObject. + * @param obj The object. + * @return The string representation. This must be freed. +char *msn_object_to_string(const MsnObject *obj); + * Sets the creator field in a MsnObject. + * @param creator The creator value. +void msn_object_set_creator(MsnObject *obj, const char *creator); + * Sets the size field in a MsnObject. + * @param size The size value. +void msn_object_set_size(MsnObject *obj, int size); + * Sets the type field in a MsnObject. + * @param type The type value. +void msn_object_set_type(MsnObject *obj, MsnObjectType type); + * Sets the location field in a MsnObject. + * @param location The location value. +void msn_object_set_location(MsnObject *obj, const char *location); + * Sets the friendly name field in a MsnObject. + * @param friendly The friendly name value. +void msn_object_set_friendly(MsnObject *obj, const char *friendly); + * Sets the SHA1D field in a MsnObject. + * @param sha1d The sha1d value. +void msn_object_set_sha1d(MsnObject *obj, const char *sha1d); + * Sets the SHA1C field in a MsnObject. + * @param sha1c The sha1c value. +void msn_object_set_sha1c(MsnObject *obj, const char *sha1c); + * Associates an image with a MsnObject. + * @param obj The object. + * @param img The image to associate. +void msn_object_set_image(MsnObject *obj, PurpleStoredImage *img); + * Sets the url field in a MsnObject. + * @param url The url value. +void msn_object_set_url(MsnObject *obj, const char *url); + * Sets the url1 field in a MsnObject. + * @param url1 The url1 value. +void msn_object_set_url1(MsnObject *obj, const char *url); + * Returns a MsnObject's creator value. + * @param obj The object. + * @return The creator value. +const char *msn_object_get_creator(const MsnObject *obj); + * Returns a MsnObject's size value. + * @param obj The object. + * @return The size value. +int msn_object_get_size(const MsnObject *obj); + * Returns a MsnObject's type. + * @param obj The object. + * @return The object type. +MsnObjectType msn_object_get_type(const MsnObject *obj); + * Returns a MsnObject's location value. + * @param obj The object. + * @return The location value. +const char *msn_object_get_location(const MsnObject *obj); + * Returns a MsnObject's friendly name value. + * @param obj The object. + * @return The friendly name value. +const char *msn_object_get_friendly(const MsnObject *obj); + * Returns a MsnObject's SHA1D value. + * @param obj The object. + * @return The SHA1D value. +const char *msn_object_get_sha1d(const MsnObject *obj); + * Returns a MsnObject's SHA1C value. + * @param obj The object. + * @return The SHA1C value. +const char *msn_object_get_sha1c(const MsnObject *obj); + * Returns a MsnObject's SHA1C value if it exists, otherwise SHA1D. + * @param obj The object. + * @return The SHA1C value. +const char *msn_object_get_sha1(const MsnObject *obj); + * Returns the image associated with the MsnObject. + * @param obj The object. + * @return The associated image. +PurpleStoredImage *msn_object_get_image(const MsnObject *obj); + * Returns a MsnObject's url value. + * @param obj The object. + * @return The url value. +const char *msn_object_get_url(const MsnObject *obj); + * Returns a MsnObject's url1 value. + * @param obj The object. + * @return The url1 value. +const char *msn_object_get_url1(const MsnObject *obj); +MsnObject * msn_object_find_local(const char *sha1); +void msn_object_set_local(MsnObject *obj); +#endif /* MSN_OBJECT_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/oim.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,163 @@
+ * @file oim.h Header file for oim.c + * MaYuan<mayuan2006@gmail.com> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +typedef struct _MsnOim MsnOim; +/* OIM Retrieval Info */ +#define MSN_OIM_RETRIEVE_HOST "rsi.hotmail.com" +#define MSN_OIM_RETRIEVE_URL "/rsi/rsi.asmx" +/* OIM GetMetadata SOAP Template */ +#define MSN_OIM_GET_METADATA_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/GetMetadata" +#define MSN_OIM_GET_METADATA_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<PassportCookie xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\">"\ + "<GetMetadata xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\" />"\ +/*OIM GetMessage SOAP Template*/ +#define MSN_OIM_GET_SOAP_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/GetMessage" +#define MSN_OIM_GET_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<PassportCookie xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\">"\ + "<GetMessage xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\">"\ + "<messageId>%s</messageId>"\ + "<alsoMarkAsRead>false</alsoMarkAsRead>"\ +/*OIM DeleteMessages SOAP Template*/ +#define MSN_OIM_DEL_SOAP_ACTION "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/DeleteMessages" +#define MSN_OIM_DEL_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + "<PassportCookie xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\">"\ + "<DeleteMessages xmlns=\"http://www.hotmail.msn.com/ws/2004/09/oim/rsi\">"\ + "<messageId>%s</messageId>"\ +/*OIM Send SOAP Template*/ +#define MSN_OIM_MSG_TEMPLATE "MIME-Version: 1.0\n"\ + "Content-Type: text/plain; charset=UTF-8\n"\ + "Content-Transfer-Encoding: base64\n"\ + "X-OIM-Message-Type: OfflineMessage\n"\ + "X-OIM-Run-Id: {%s}\n"\ + "X-OIM-Sequence-Num: %d\n\n" +#define MSN_OIM_SEND_HOST "ows.messenger.msn.com" +#define MSN_OIM_SEND_URL "/OimWS/oim.asmx" +#define MSN_OIM_SEND_SOAP_ACTION "http://messenger.live.com/ws/2006/09/oim/Store2" +#define MSN_OIM_SEND_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""\ + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""\ + " xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"\ + " friendlyName=\"%s\""\ + " xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\""\ + " buildVer=\"8.5.1288\"/>"\ + "<To memberName=\"%s\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\"/>"\ + "<Ticket passport=\"EMPTY\" appid=\"%s\" lockkey=\"%s\" xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\"/>"\ + "<Sequence xmlns=\"http://schemas.xmlsoap.org/ws/2003/03/rm\">"\ + "<Identifier xmlns=\"http://schemas.xmlsoap.org/ws/2002/07/utility\">http://messenger.msn.com</Identifier>"\ + "<MessageNumber>%d</MessageNumber>"\ + "<MessageType xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\">text</MessageType>"\ + "<Content xmlns=\"http://messenger.msn.com/ws/2004/09/oim/\">%s</Content>"\ +/**************************************************** + * **************************************************/ +MsnOim * msn_oim_new(MsnSession *session); +void msn_oim_destroy(MsnOim *oim); +void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg); +void msn_oim_prep_send_msg_info(MsnOim *oim, const char *membername, + const char *friendname, const char *tomember, +void msn_oim_send_msg(MsnOim *oim); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/oscar.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1350 @@
+ * Purple's oscar protocol plugin + * This file is the legal property of its developers. + * Please see the AUTHORS file distributed alongside this file. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Main libfaim header. Must be included in client for prototypes/macros. + * "come on, i turned a chick lesbian; i think this is the hackish equivalent" +#include "libc_interface.h" +typedef struct _ByteStream ByteStream; +typedef struct _ClientInfo ClientInfo; +typedef struct _FlapConnection FlapConnection; +typedef struct _FlapFrame FlapFrame; +typedef struct _IcbmArgsCh2 IcbmArgsCh2; +typedef struct _IcbmCookie IcbmCookie; +typedef struct _OscarData OscarData; +typedef struct _QueuedSnac QueuedSnac; +typedef guint32 aim_snacid_t; +#define FAIM_SNAC_HASH_SIZE 16 + * Current Maximum Length for usernames (not including NULL) + * Currently only names up to 16 characters can be registered + * however it is apparently legal for them to be larger. + * Current Maximum Length for Instant Messages + * This was found basically by experiment, but not wholly + * accurate experiment. It should not be regarded + * as completely correct. But its a decent approximation. + * Note that although we can send this much, its impossible + * for WinAIM clients (up through the latest (4.0.1957)) to + * send any more than 1kb. Amaze all your windows friends + * with utterly oversized instant messages! + * Maximum size of a Buddy Icon. +#define AIM_ICONIDENT "AVT1picture.id" + * Found by trial and error. +#define MAXAVAILMSGLEN 251 + * Maximum length for the password of an ICQ account +#define AIM_MD5_STRING "AOL Instant Messenger (SM)" + * Client info. Filled in by the client and passed in to + * aim_send_login(). The information ends up getting passed to OSCAR + * through the initial login command. + const char *clientstring; + const char *country; /* two-letter abbrev */ + const char *lang; /* two-letter abbrev */ + * We need to use the major-minor-micro versions from the official + * AIM and ICQ programs here or AOL won't let us use certain features. + * 0x00000611 is the distid given to us by AOL for use as the default +#define CLIENTINFO_PURPLE_AIM { \ +#define CLIENTINFO_PURPLE_ICQ { \ + OSCAR_DISCONNECT_DONE, /* not considered an error */ + OSCAR_DISCONNECT_LOCAL_CLOSED, /* peer connections only, not considered an error */ + OSCAR_DISCONNECT_REMOTE_CLOSED, + OSCAR_DISCONNECT_REMOTE_REFUSED, /* peer connections only */ + OSCAR_DISCONNECT_LOST_CONNECTION, + OSCAR_DISCONNECT_INVALID_DATA, + OSCAR_DISCONNECT_COULD_NOT_CONNECT, + OSCAR_DISCONNECT_RETRYING /* peer connections only */ +} OscarDisconnectReason; +#define OSCAR_CAPABILITY_BUDDYICON 0x0000000000000001LL +#define OSCAR_CAPABILITY_TALK 0x0000000000000002LL +#define OSCAR_CAPABILITY_DIRECTIM 0x0000000000000004LL +#define OSCAR_CAPABILITY_CHAT 0x0000000000000008LL +#define OSCAR_CAPABILITY_GETFILE 0x0000000000000010LL +#define OSCAR_CAPABILITY_SENDFILE 0x0000000000000020LL +#define OSCAR_CAPABILITY_GAMES 0x0000000000000040LL +#define OSCAR_CAPABILITY_ADDINS 0x0000000000000080LL +#define OSCAR_CAPABILITY_SENDBUDDYLIST 0x0000000000000100LL +#define OSCAR_CAPABILITY_GAMES2 0x0000000000000200LL +#define OSCAR_CAPABILITY_ICQ_DIRECT 0x0000000000000400LL +#define OSCAR_CAPABILITY_APINFO 0x0000000000000800LL +#define OSCAR_CAPABILITY_ICQRTF 0x0000000000001000LL +#define OSCAR_CAPABILITY_EMPTY 0x0000000000002000LL +#define OSCAR_CAPABILITY_ICQSERVERRELAY 0x0000000000004000LL +#define OSCAR_CAPABILITY_UNICODEOLD 0x0000000000008000LL +#define OSCAR_CAPABILITY_TRILLIANCRYPT 0x0000000000010000LL +#define OSCAR_CAPABILITY_UNICODE 0x0000000000020000LL +#define OSCAR_CAPABILITY_INTEROPERATE 0x0000000000040000LL +#define OSCAR_CAPABILITY_SHORTCAPS 0x0000000000080000LL +#define OSCAR_CAPABILITY_HIPTOP 0x0000000000100000LL +#define OSCAR_CAPABILITY_SECUREIM 0x0000000000200000LL +#define OSCAR_CAPABILITY_SMS 0x0000000000400000LL +#define OSCAR_CAPABILITY_VIDEO 0x0000000000800000LL +#define OSCAR_CAPABILITY_ICHATAV 0x0000000001000000LL +#define OSCAR_CAPABILITY_LIVEVIDEO 0x0000000002000000LL +#define OSCAR_CAPABILITY_CAMERA 0x0000000004000000LL +#define OSCAR_CAPABILITY_ICHAT_SCREENSHARE 0x0000000008000000LL +#define OSCAR_CAPABILITY_TYPING 0x0000000010000000LL +#define OSCAR_CAPABILITY_NEWCAPS 0x0000000020000000LL +#define OSCAR_CAPABILITY_XTRAZ 0x0000000040000000LL +#define OSCAR_CAPABILITY_GENERICUNKNOWN 0x0000000080000000LL +#define OSCAR_CAPABILITY_HTML_MSGS 0x0000000100000000LL +#define OSCAR_CAPABILITY_LAST 0x0000000200000000LL +#define OSCAR_STATUS_ID_INVISIBLE "invisible" +#define OSCAR_STATUS_ID_OFFLINE "offline" +#define OSCAR_STATUS_ID_AVAILABLE "available" +#define OSCAR_STATUS_ID_AWAY "away" +#define OSCAR_STATUS_ID_DND "dnd" +#define OSCAR_STATUS_ID_NA "na" +#define OSCAR_STATUS_ID_OCCUPIED "occupied" +#define OSCAR_STATUS_ID_FREE4CHAT "free4chat" +#define OSCAR_STATUS_ID_CUSTOM "custom" +#define OSCAR_STATUS_ID_MOBILE "mobile" +#define OSCAR_STATUS_ID_EVIL "evil" +#define OSCAR_STATUS_ID_DEPRESSION "depression" +#define OSCAR_STATUS_ID_ATHOME "athome" +#define OSCAR_STATUS_ID_ATWORK "atwork" +#define OSCAR_STATUS_ID_LUNCH "lunch" + * Byte Stream type. Sort of. + * Use of this type serves a couple purposes: + * - Buffer/buflen pairs are passed all around everywhere. This turns + * that into one value, as well as abstracting it slightly. + * - Through the abstraction, it is possible to enable bounds checking + * for robustness at the cost of performance. But a clean failure on + * weird packets is much better than a segfault. + * - I like having variables named "bs". + * Don't touch the insides of this struct. Or I'll have to kill you. + ByteStream data; /* payload stream */ + OscarData *od; /**< Pointer to parent session. */ + time_t lastactivity; /**< Time of last transmit. */ + OscarDisconnectReason disconnect_reason; + guint16 disconnect_code; + /* A few variables that are only used when connecting */ + PurpleProxyConnectData *connect_data; + gpointer new_conn_data; + PurpleSslConnection *gsc; + gssize header_received; + FlapFrame buffer_incoming; + PurpleCircBuffer *buffer_outgoing; + guint watcher_incoming; + guint watcher_outgoing; + guint16 seqnum_out; /**< The sequence number of most recently sent packet. */ + guint16 seqnum_in; /**< The sequence number of most recently received packet. */ + GSList *rateclasses; /* Contains nodes of struct rateclass. */ + struct rateclass *default_rateclass; + GHashTable *rateclass_members; /* Key is family and subtype, value is pointer to the rateclass struct to use. */ + GQueue *queued_snacs; /**< Contains QueuedSnacs. */ + GQueue *queued_lowpriority_snacs; /**< Contains QueuedSnacs to send only once queued_snacs is empty */ + void *internal; /* internal conn-specific libfaim data */ + struct _IcbmCookie *next; + * AIM Session: The main client-data interface. + /** Only used when connecting with clientLogin */ + PurpleUtilFetchUrlData *url_data; + gboolean iconconnecting; + guint maxwatchers; /* max users who can watch you */ + guint maxbuddies; /* max users you can watch */ + guint maxgroups; /* max groups in server list */ + guint maxpermits; /* max users on permit list */ + guint maxdenies; /* max users on deny list */ + guint maxsiglen; /* max size (bytes) of profile */ + guint maxawaymsglen; /* max size (bytes) of posted away message */ + * Outstanding snac handling + * TODO: Should these be per-connection? -mid + void *snac_hash[FAIM_SNAC_HASH_SIZE]; + aim_snacid_t snacid_next; + * TODO: Data specific to a certain family should go into a + * hashtable and the core parts of libfaim shouldn't + * need to know about them. + IcbmCookie *msgcookies; + /** Only used when connecting with the old-style BUCP login. */ + struct aim_authresp_info *authinfo; + struct aim_emailinfo *emailinfo; + struct aim_userinfo_s *userinfo; + /* Server-stored information (ssi) */ + gboolean received_data; + struct aim_ssi_item *official; + struct aim_ssi_item *local; + struct aim_ssi_tmp *pending; + gboolean waiting_for_ack; + gboolean in_transaction; + /** Contains pointers to handler functions for each family/subtype. */ + GHashTable *handlerlist; + /** A linked list containing FlapConnections. */ + GSList *oscar_connections; + /** A linked list containing PeerConnections. */ + GSList *peer_connections; +/* Valid for calling aim_icq_setstatus() and for aim_userinfo_t->icqinfo.status */ +#define AIM_ICQ_STATE_NORMAL 0x00000000 +#define AIM_ICQ_STATE_AWAY 0x00000001 +#define AIM_ICQ_STATE_DND 0x00000002 +#define AIM_ICQ_STATE_OUT 0x00000004 +#define AIM_ICQ_STATE_BUSY 0x00000010 +#define AIM_ICQ_STATE_CHAT 0x00000020 +#define AIM_ICQ_STATE_INVISIBLE 0x00000100 +#define AIM_ICQ_STATE_EVIL 0x00003000 +#define AIM_ICQ_STATE_DEPRESSION 0x00004000 +#define AIM_ICQ_STATE_ATHOME 0x00005000 +#define AIM_ICQ_STATE_ATWORK 0x00006000 +#define AIM_ICQ_STATE_LUNCH 0x00002001 +#define AIM_ICQ_STATE_EVIL 0x00003000 +#define AIM_ICQ_STATE_WEBAWARE 0x00010000 +#define AIM_ICQ_STATE_HIDEIP 0x00020000 +#define AIM_ICQ_STATE_BIRTHDAY 0x00080000 +#define AIM_ICQ_STATE_ICQHOMEPAGE 0x00200000 +#define AIM_ICQ_STATE_DIRECTREQUIREAUTH 0x10000000 + * Only used when connecting with the old-style BUCP login. +struct aim_clientrelease + * Only used when connecting with the old-style BUCP login. +struct aim_authresp_info + struct aim_clientrelease latestrelease; + struct aim_clientrelease latestbeta; +/* Callback data for redirect. */ +struct aim_redirect_data + const char *ssl_cert_cn; + struct { /* group == SNAC_FAMILY_CHAT */ +int oscar_connect_to_bos(PurpleConnection *gc, OscarData *od, const char *host, guint16 port, guint8 *cookie, guint16 cookielen, const char *tls_certname); + * Only used when connecting with the old-style BUCP login. +int aim_request_login(OscarData *od, FlapConnection *conn, const char *bn); + * Only used when connecting with the old-style BUCP login. +int aim_send_login(OscarData *od, FlapConnection *conn, const char *bn, const char *password, gboolean truncate_pass, ClientInfo *ci, const char *key, gboolean allow_multiple_logins); + * Only used when connecting with the old-style BUCP login. +/* 0x000b */ int aim_auth_securid_send(OscarData *od, const char *securid); + * Only used when connecting with clientLogin. +void send_client_login(OscarData *od, const char *username); +FlapConnection *flap_connection_new(OscarData *, int type); +void flap_connection_close(OscarData *od, FlapConnection *conn); +void flap_connection_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message); +void flap_connection_schedule_destroy(FlapConnection *conn, OscarDisconnectReason reason, const gchar *error_message); +FlapConnection *flap_connection_findbygroup(OscarData *od, guint16 group); +FlapConnection *flap_connection_getbytype(OscarData *, int type); +FlapConnection *flap_connection_getbytype_all(OscarData *, int type); +void flap_connection_recv_cb(gpointer data, gint source, PurpleInputCondition cond); +void flap_connection_recv_cb_ssl(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond); +void flap_connection_send(FlapConnection *conn, FlapFrame *frame); +void flap_connection_send_version(OscarData *od, FlapConnection *conn); +void flap_connection_send_version_with_cookie(OscarData *od, FlapConnection *conn, guint16 length, const guint8 *chipsahoy); +void flap_connection_send_version_with_cookie_and_clientinfo(OscarData *od, FlapConnection *conn, guint16 length, const guint8 *chipsahoy, ClientInfo *ci, gboolean allow_multiple_login); +void flap_connection_send_snac(OscarData *od, FlapConnection *conn, guint16 family, const guint16 subtype, aim_snacid_t snacid, ByteStream *data); +void flap_connection_send_snac_with_priority(OscarData *od, FlapConnection *conn, guint16 family, const guint16 subtype, aim_snacid_t snacid, ByteStream *data, gboolean high_priority); +void flap_connection_send_keepalive(OscarData *od, FlapConnection *conn); +FlapFrame *flap_frame_new(OscarData *od, guint16 channel, int datalen); +typedef int (*aim_rxcallback_t)(OscarData *od, FlapConnection *conn, FlapFrame *frame, ...); +OscarData *oscar_data_new(void); +void oscar_data_destroy(OscarData *); +void oscar_data_addhandler(OscarData *od, guint16 family, guint16 subtype, aim_rxcallback_t newhandler, guint16 flags); +aim_rxcallback_t aim_callhandler(OscarData *od, guint16 family, guint16 subtype); +/* 0x0001 - family_oservice.c */ +/* 0x0002 */ void aim_srv_clientready(OscarData *od, FlapConnection *conn); +/* 0x0004 */ void aim_srv_requestnew(OscarData *od, guint16 serviceid); +/* 0x0006 */ void aim_srv_reqrates(OscarData *od, FlapConnection *conn); +/* 0x0008 */ void aim_srv_rates_addparam(OscarData *od, FlapConnection *conn); +/* 0x000e */ void aim_srv_reqpersonalinfo(OscarData *od, FlapConnection *conn); +/* 0x0011 */ void aim_srv_setidle(OscarData *od, guint32 idletime); +/* 0x0017 */ void aim_srv_setversions(OscarData *od, FlapConnection *conn); +/* 0x001e */ int aim_srv_setextrainfo(OscarData *od, gboolean seticqstatus, guint32 icqstatus, gboolean setstatusmsg, const char *statusmsg, const char *itmsurl); +void aim_srv_set_dc_info(OscarData *od); +void aim_bos_reqrights(OscarData *od, FlapConnection *conn); +#define AIM_RATE_CODE_LIMIT 0x0003 +#define AIM_OFT_SUBTYPE_SEND_DIR 0x0002 +#define AIM_TRANSFER_DENY_DECLINE 0x0001 +#define AIM_IMPARAM_FLAG_CHANNEL_MSGS_ALLOWED 0x00000001 +#define AIM_IMPARAM_FLAG_MISSED_CALLS_ENABLED 0x00000002 +#define AIM_IMPARAM_FLAG_EVENTS_ALLOWED 0x00000008 +#define AIM_IMPARAM_FLAG_SMS_SUPPORTED 0x00000010 +#define AIM_IMPARAM_FLAG_OFFLINE_MSGS_ALLOWED 0x00000100 + * This flag tells the server that we always send HTML in messages + * sent from an ICQ account to an ICQ account. (If this flag is + * not sent then plaintext is sent ICQ<-->ICQ (HTML is sent in all + * If we send an HTML message to an old client that doesn't support + * HTML messages, then the oscar servers will merrily strip the HTML + * All incoming IMs are treated as HTML. +#define AIM_IMPARAM_FLAG_USE_HTML_FOR_ICQ 0x00000400 +struct aim_icbmparameters + guint32 flags; /* AIM_IMPARAM_FLAG_ */ + guint16 maxmsglen; /* message size that you will accept */ + guint16 maxsenderwarn; /* this and below are *10 (999=99.9%) */ + guint32 minmsginterval; /* in milliseconds? */ + * TODO: Should probably combine this with struct chat_connection. +struct aim_chat_roominfo + char *show; /* AOL did something funny to us */ + PurpleConversation *conv; + * All this chat struct stuff should be in family_chat.c +void oscar_chat_destroy(struct chat_connection *cc); +#define AIM_IMFLAGS_AWAY 0x0001 /* mark as an autoreply */ +#define AIM_IMFLAGS_ACK 0x0002 /* request a receipt notice */ +#define AIM_IMFLAGS_BUDDYREQ 0x0010 /* buddy icon requested */ +#define AIM_IMFLAGS_HASICON 0x0020 /* already has icon */ +#define AIM_IMFLAGS_SUBENC_MACINTOSH 0x0040 /* damn that Steve Jobs! */ +#define AIM_IMFLAGS_CUSTOMFEATURES 0x0080 /* features field present */ +#define AIM_IMFLAGS_OFFLINE 0x0800 /* send to offline user */ +#define AIM_IMFLAGS_TYPINGNOT 0x1000 /* typing notification */ +#define AIM_CHARSET_ASCII 0x0000 /* ISO 646 */ +#define AIM_CHARSET_UNICODE 0x0002 /* ISO 10646 (UTF-16/UCS-2BE) */ +#define AIM_CHARSET_LATIN_1 0x0003 /* ISO 8859-1 */ + * Arguments to aim_send_im_ext(). + * This is really complicated. But immensely versatile. +struct aim_sendimext_args + /* These are _required_ */ + guint32 flags; /* often 0 */ + /* Only used if AIM_IMFLAGS_HASICON is set */ + * This information is provided in the Incoming ICBM callback for +struct aim_incomingim_ch1_args + guint32 icbmflags; /* some flags apply only to ->msg, not all mpmsg */ + time_t timestamp; /* Only set for offline messages */ + /* Only provided if AIM_IMFLAGS_HASICON is set */ +/* Valid values for channel 2 args->status */ +#define AIM_RENDEZVOUS_PROPOSE 0x0000 +#define AIM_RENDEZVOUS_CANCEL 0x0001 +#define AIM_RENDEZVOUS_CONNECTED 0x0002 + guint64 type; /* One of the OSCAR_CAPABILITY_ constants */ + const char *verifiedip; + const char *msg; /* invite message or file description */ + struct aim_chat_roominfo roominfo; + void *destructor; /* used internally only */ +struct aim_incomingim_ch4_args + guint32 uin; /* Of the sender of the ICBM */ + gchar *msg; /* Reason for auth request, deny, or accept */ +/* SNAC sending functions */ +/* 0x0002 */ int aim_im_setparams(OscarData *od, struct aim_icbmparameters *params); +/* 0x0004 */ int aim_im_reqparams(OscarData *od); +/* 0x0006 */ int aim_im_sendch1_ext(OscarData *od, struct aim_sendimext_args *args); +/* 0x0006 */ int aim_im_sendch1(OscarData *, const char *destbn, guint16 flags, const char *msg); +/* 0x0006 */ int aim_im_sendch2_chatinvite(OscarData *od, const char *bn, const char *msg, guint16 exchange, const char *roomname, guint16 instance); +/* 0x0006 */ int aim_im_sendch2_icon(OscarData *od, const char *bn, const guint8 *icon, int iconlen, time_t stamp, guint16 iconsum); +/* 0x0006 */ void aim_im_sendch2_cancel(PeerConnection *peer_conn); +/* 0x0006 */ void aim_im_sendch2_connected(PeerConnection *peer_conn); +/* 0x0006 */ void aim_im_sendch2_odc_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber); +/* 0x0006 */ void aim_im_sendch2_odc_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber); +/* 0x0006 */ void aim_im_sendch2_sendfile_requestdirect(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 port, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); +/* 0x0006 */ void aim_im_sendch2_sendfile_requestproxy(OscarData *od, guchar *cookie, const char *bn, const guint8 *ip, guint16 pin, guint16 requestnumber, const gchar *filename, guint32 size, guint16 numfiles); +/* 0x000b */ int aim_im_denytransfer(OscarData *od, const char *bn, const guchar *cookie, guint16 code); +/* 0x0010 */ int aim_im_reqofflinemsgs(OscarData *od); +/* 0x0014 */ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *bn, guint16 type2); +/* 0x000b */ int icq_relay_xstatus (OscarData *od, const char *sn, const guchar* cookie); +void aim_icbm_makecookie(guchar* cookie); +void aim_im_send_icq_confirmation(OscarData *od, const char *bn, const guchar *cookie); +/* 0x0002 - family_locate.c */ + * AIM User Info, Standard Form. +#define AIM_FLAG_ADMINISTRATOR 0x0002 +#define AIM_FLAG_AOL 0x0004 +#define AIM_FLAG_AWAY 0x0020 +#define AIM_FLAG_WIRELESS 0x0080 +#define AIM_FLAG_ICQ 0x0040 +#define AIM_FLAG_ACTIVEBUDDY 0x0400 +#define AIM_USERINFO_PRESENT_FLAGS 0x00000001 +#define AIM_USERINFO_PRESENT_MEMBERSINCE 0x00000002 +#define AIM_USERINFO_PRESENT_ONLINESINCE 0x00000004 +#define AIM_USERINFO_PRESENT_IDLE 0x00000008 +#define AIM_USERINFO_PRESENT_ICQEXTSTATUS 0x00000010 +#define AIM_USERINFO_PRESENT_ICQIPADDR 0x00000020 +#define AIM_USERINFO_PRESENT_ICQDATA 0x00000040 +#define AIM_USERINFO_PRESENT_CAPABILITIES 0x00000080 +#define AIM_USERINFO_PRESENT_SESSIONLEN 0x00000100 +#define AIM_USERINFO_PRESENT_CREATETIME 0x00000200 + struct userinfo_node *next; +typedef struct aim_userinfo_s + guint16 warnlevel; /* evil percent * 10 (999 = 99.9%) */ + guint16 idletime; /* in seconds */ + guint32 createtime; /* time_t */ + guint32 membersince; /* time_t */ + guint32 onlinesince; /* time_t */ + guint32 sessionlen; /* in seconds */ + guint8 crap[0x25]; /* until we figure it out... */ + char *itmsurl_encoding; + struct aim_userinfo_s *next; +#define AIM_SENDMEMBLOCK_FLAG_ISREQUEST 0 +#define AIM_SENDMEMBLOCK_FLAG_ISHASH 1 +int aim_sendmemblock(OscarData *od, FlapConnection *conn, guint32 offset, guint32 len, const guint8 *buf, guint8 flag); +#define AIM_COOKIETYPE_CHAT 0x01 +#define AIM_COOKIETYPE_INVITE 0x02 +aim_userinfo_t *aim_locate_finduserinfo(OscarData *od, const char *bn); +void aim_locate_dorequest(OscarData *od); +/* 0x0002 */ int aim_locate_reqrights(OscarData *od); +/* 0x0004 */ int aim_locate_setcaps(OscarData *od, guint64 caps); +/* 0x0004 */ int aim_locate_setprofile(OscarData *od, const char *profile_encoding, const gchar *profile, const int profile_len, const char *awaymsg_encoding, const gchar *awaymsg, const int awaymsg_len); +/* 0x0015 */ int aim_locate_getinfoshort(OscarData *od, const char *bn, guint32 flags); +guint64 aim_locate_getcaps(OscarData *od, ByteStream *bs, int len); +guint64 aim_locate_getcaps_short(OscarData *od, ByteStream *bs, int len); +void aim_info_free(aim_userinfo_t *); +int aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *); +int aim_putuserinfo(ByteStream *bs, aim_userinfo_t *info); +PurpleMood* icq_get_purple_moods(PurpleAccount *account); +const char* icq_get_custom_icon_description(const char *mood); +guint8* icq_get_custom_icon_data(const char *mood); +int icq_im_xstatus_request(OscarData *od, const char *sn); +/* 0x0003 - family_buddy.c */ +/* 0x0002 */ void aim_buddylist_reqrights(OscarData *, FlapConnection *); +/* 0x000a - family_userlookup.c */ +int aim_search_address(OscarData *, const char *); +struct aim_chat_exchangeinfo +#define AIM_CHATFLAGS_NOREFLECT 0x0001 +#define AIM_CHATFLAGS_AWAY 0x0002 +int aim_chat_send_im(OscarData *od, FlapConnection *conn, guint16 flags, const gchar *msg, int msglen, const char *encoding, const char *language); +int aim_chat_join(OscarData *od, guint16 exchange, const char *roomname, guint16 instance); +void aim_chatnav_reqrights(OscarData *od, FlapConnection *conn); +int aim_chatnav_createroom(OscarData *od, FlapConnection *conn, const char *name, guint16 exchange); +/* 0x0010 - family_bart.c */ +int aim_bart_upload(OscarData *od, const guint8 *icon, guint16 iconlen); +int aim_bart_request(OscarData *od, const char *bn, guint8 iconcsumtype, const guint8 *iconstr, guint16 iconstrlen); +/* 0x0013 - family_feedbag.c */ +#define AIM_SSI_TYPE_BUDDY 0x0000 +#define AIM_SSI_TYPE_GROUP 0x0001 +#define AIM_SSI_TYPE_PERMIT 0x0002 +#define AIM_SSI_TYPE_DENY 0x0003 +#define AIM_SSI_TYPE_PDINFO 0x0004 +#define AIM_SSI_TYPE_PRESENCEPREFS 0x0005 +#define AIM_SSI_TYPE_ICQDENY 0x000e +#define AIM_SSI_TYPE_ICONINFO 0x0014 +/* These flags are set in the 0x00c9 TLV of SSI type 0x0005 */ +#define AIM_SSI_PRESENCE_FLAG_SHOWIDLE 0x00000400 +#define AIM_SSI_PRESENCE_FLAG_NORECENTBUDDIES 0x00020000 + struct aim_ssi_item *next; + struct aim_ssi_item *item; + struct aim_ssi_tmp *next; +/* These build the actual SNACs and queue them to be sent */ +/* 0x0002 */ int aim_ssi_reqrights(OscarData *od); +/* 0x0004 */ int aim_ssi_reqdata(OscarData *od); +/* 0x0007 */ int aim_ssi_enable(OscarData *od); +/* 0x0011 */ int aim_ssi_modbegin(OscarData *od); +/* 0x0012 */ int aim_ssi_modend(OscarData *od); +/* 0x0018 */ int aim_ssi_sendauthrequest(OscarData *od, const char *bn, const char *msg); +/* 0x001a */ int aim_ssi_sendauthreply(OscarData *od, const char *bn, guint8 reply, const char *msg); +/* Client functions for retrieving SSI data */ +struct aim_ssi_item *aim_ssi_itemlist_find(struct aim_ssi_item *list, guint16 gid, guint16 bid); +struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *bn, guint16 type); +struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *bn); +char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *bn); +int aim_ssi_getpermdeny(struct aim_ssi_item *list); +guint32 aim_ssi_getpresence(struct aim_ssi_item *list); +char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *bn); +char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *bn); +gboolean aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *bn); +/* Client functions for changing SSI data */ +int aim_ssi_addbuddy(OscarData *od, const char *name, const char *group, GSList *tlvlist, const char *alias, const char *comment, const char *smsnum, gboolean needauth); +int aim_ssi_delbuddy(OscarData *od, const char *name, const char *group); +int aim_ssi_delgroup(OscarData *od, const char *group); +int aim_ssi_movebuddy(OscarData *od, const char *oldgn, const char *newgn, const char *bn); +int aim_ssi_aliasbuddy(OscarData *od, const char *gn, const char *bn, const char *alias); +int aim_ssi_editcomment(OscarData *od, const char *gn, const char *bn, const char *alias); +int aim_ssi_rename_group(OscarData *od, const char *oldgn, const char *newgn); +int aim_ssi_cleanlist(OscarData *od); +int aim_ssi_deletelist(OscarData *od); +int aim_ssi_setpermdeny(OscarData *od, guint8 permdeny); +int aim_ssi_setpresence(OscarData *od, guint32 presence); +int aim_ssi_seticon(OscarData *od, const guint8 *iconsum, guint8 iconsumlen); +int aim_ssi_delicon(OscarData *od); +int aim_ssi_add_to_private_list(OscarData *od, const char* name, guint16 list_type); +int aim_ssi_del_from_private_list(OscarData* od, const char* name, guint16 list_type); +guint16 aim_ssi_getdenyentrytype(OscarData* od); + /* general and "home" information (0x00c8) */ + /* personal (0x00dc) */ + /* additional personal information (0x00e6) */ + char *status_note_title; + gboolean for_auth_request; + char *auth_request_reason; +int aim_icq_setsecurity(OscarData *od, gboolean auth_required, gboolean webaware); +int aim_icq_changepasswd(OscarData *od, const char *passwd); +int aim_icq_getalias(OscarData *od, const char *uin, gboolean for_auth_request, char *auth_request_reason); +int aim_icq_getallinfo(OscarData *od, const char *uin); +int aim_icq_sendsms(OscarData *od, const char *name, const char *msg, const char *alias); +/* 0x0017 - family_auth.c */ +void aim_sendcookie(OscarData *, FlapConnection *, const guint16 length, const guint8 *); +void aim_admin_changepasswd(OscarData *, FlapConnection *, const char *newpw, const char *curpw); +void aim_admin_reqconfirm(OscarData *od, FlapConnection *conn); +void aim_admin_getinfo(OscarData *od, FlapConnection *conn, guint16 info); +void aim_admin_setemail(OscarData *od, FlapConnection *conn, const char *newemail); +void aim_admin_setnick(OscarData *od, FlapConnection *conn, const char *newnick); +/* 0x0018 - family_alert.c */ + struct aim_emailinfo *next; +int aim_email_sendcookies(OscarData *od); +int aim_email_activate(OscarData *od); +/* tlv.c - TLV handling */ +typedef struct aim_tlv_s +/* TLV handling functions */ +char *aim_tlv_getvalue_as_string(aim_tlv_t *tlv); +aim_tlv_t *aim_tlv_gettlv(GSList *list, const guint16 type, const int nth); +int aim_tlv_getlength(GSList *list, const guint16 type, const int nth); +char *aim_tlv_getstr(GSList *list, const guint16 type, const int nth); +guint8 aim_tlv_get8(GSList *list, const guint16 type, const int nth); +guint16 aim_tlv_get16(GSList *list, const guint16 type, const int nth); +guint32 aim_tlv_get32(GSList *list, const guint16 type, const int nth); +/* TLV list handling functions */ +GSList *aim_tlvlist_read(ByteStream *bs); +GSList *aim_tlvlist_readnum(ByteStream *bs, guint16 num); +GSList *aim_tlvlist_readlen(ByteStream *bs, guint16 len); +GSList *aim_tlvlist_copy(GSList *orig); +int aim_tlvlist_count(GSList *list); +int aim_tlvlist_size(GSList *list); +int aim_tlvlist_cmp(GSList *one, GSList *two); +int aim_tlvlist_write(ByteStream *bs, GSList **list); +void aim_tlvlist_free(GSList *list); +int aim_tlvlist_add_raw(GSList **list, const guint16 type, const guint16 length, const guint8 *value); +int aim_tlvlist_add_noval(GSList **list, const guint16 type); +int aim_tlvlist_add_8(GSList **list, const guint16 type, const guint8 value); +int aim_tlvlist_add_16(GSList **list, const guint16 type, const guint16 value); +int aim_tlvlist_add_32(GSList **list, const guint16 type, const guint32 value); +int aim_tlvlist_add_str(GSList **list, const guint16 type, const char *value); +int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint64 caps, const char *mood); +int aim_tlvlist_add_userinfo(GSList **list, guint16 type, aim_userinfo_t *userinfo); +int aim_tlvlist_add_chatroom(GSList **list, guint16 type, guint16 exchange, const char *roomname, guint16 instance); +int aim_tlvlist_add_frozentlvlist(GSList **list, guint16 type, GSList **tl); +int aim_tlvlist_replace_raw(GSList **list, const guint16 type, const guint16 lenth, const guint8 *value); +int aim_tlvlist_replace_str(GSList **list, const guint16 type, const char *str); +int aim_tlvlist_replace_noval(GSList **list, const guint16 type); +int aim_tlvlist_replace_8(GSList **list, const guint16 type, const guint8 value); +int aim_tlvlist_replace_16(GSList **list, const guint16 type, const guint16 value); +int aim_tlvlist_replace_32(GSList **list, const guint16 type, const guint32 value); +void aim_tlvlist_remove(GSList **list, const guint16 type); +/* These are really ugly. You'd think this was LISP. I wish it was. */ +#define aimutil_put8(buf, data) ((*(buf) = (guint8)(data)&0xff),1) +#define aimutil_get8(buf) ((*(buf))&0xff) +#define aimutil_put16(buf, data) ( \ + (*(buf) = (guint8)((data)>>8)&0xff), \ + (*((buf)+1) = (guint8)(data)&0xff), \ +#define aimutil_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff)) +#define aimutil_put32(buf, data) ( \ + (*((buf)) = (guint8)((data)>>24)&0xff), \ + (*((buf)+1) = (guint8)((data)>>16)&0xff), \ + (*((buf)+2) = (guint8)((data)>>8)&0xff), \ + (*((buf)+3) = (guint8)(data)&0xff), \ +#define aimutil_get32(buf) ((((*(buf))<<24)&0xff000000) + \ + (((*((buf)+1))<<16)&0x00ff0000) + \ + (((*((buf)+2))<< 8)&0x0000ff00) + \ + (((*((buf)+3) )&0x000000ff))) +/* Little-endian versions (damn ICQ) */ +#define aimutil_putle8(buf, data) ( \ + (*(buf) = (guint8)(data) & 0xff), \ +#define aimutil_getle8(buf) ( \ +#define aimutil_putle16(buf, data) ( \ + (*((buf)+0) = (guint8)((data) >> 0) & 0xff), \ + (*((buf)+1) = (guint8)((data) >> 8) & 0xff), \ +#define aimutil_getle16(buf) ( \ + (((*((buf)+0)) << 0) & 0x00ff) + \ + (((*((buf)+1)) << 8) & 0xff00) \ +#define aimutil_putle32(buf, data) ( \ + (*((buf)+0) = (guint8)((data) >> 0) & 0xff), \ + (*((buf)+1) = (guint8)((data) >> 8) & 0xff), \ + (*((buf)+2) = (guint8)((data) >> 16) & 0xff), \ + (*((buf)+3) = (guint8)((data) >> 24) & 0xff), \ +#define aimutil_getle32(buf) ( \ + (((*((buf)+0)) << 0) & 0x000000ff) + \ + (((*((buf)+1)) << 8) & 0x0000ff00) + \ + (((*((buf)+2)) << 16) & 0x00ff0000) + \ + (((*((buf)+3)) << 24) & 0xff000000)) +const char *oscar_get_msgerr_reason(size_t reason); +int oscar_get_ui_info_int(const char *str, int default_value); +const char *oscar_get_ui_info_string(const char *str, const char *default_value); +gchar *oscar_get_clientstring(void); +guint16 aimutil_iconsum(const guint8 *buf, int buflen); +gboolean oscar_util_valid_name(const char *bn); +gboolean oscar_util_valid_name_icq(const char *bn); +gboolean oscar_util_valid_name_sms(const char *bn); +int oscar_util_name_compare(const char *bn1, const char *bn2); +gchar *oscar_util_format_string(const char *str, const char *name); +gchar *oscar_format_buddies(GSList *buddies, const gchar *no_buddies_message); +#define AIM_MODULENAME_MAXLEN 16 +#define AIM_MODFLAG_MULTIFAMILY 0x0001 +typedef struct aim_module_s + char name[AIM_MODULENAME_MAXLEN+1]; + int (*snachandler)(OscarData *od, FlapConnection *conn, struct aim_module_s *mod, FlapFrame *rx, aim_modsnac_t *snac, ByteStream *bs); + void (*shutdown)(OscarData *od, struct aim_module_s *mod); + struct aim_module_s *next; +int aim__registermodule(OscarData *od, int (*modfirst)(OscarData *, aim_module_t *)); +void aim__shutdownmodules(OscarData *od); +aim_module_t *aim__findmodulebygroup(OscarData *od, guint16 group); +aim_module_t *aim__findmodule(OscarData *od, const char *name); +int admin_modfirst(OscarData *od, aim_module_t *mod); +int buddylist_modfirst(OscarData *od, aim_module_t *mod); +int bos_modfirst(OscarData *od, aim_module_t *mod); +int search_modfirst(OscarData *od, aim_module_t *mod); +int stats_modfirst(OscarData *od, aim_module_t *mod); +int auth_modfirst(OscarData *od, aim_module_t *mod); +int msg_modfirst(OscarData *od, aim_module_t *mod); +int misc_modfirst(OscarData *od, aim_module_t *mod); +int chatnav_modfirst(OscarData *od, aim_module_t *mod); +int chat_modfirst(OscarData *od, aim_module_t *mod); +int locate_modfirst(OscarData *od, aim_module_t *mod); +int service_modfirst(OscarData *od, aim_module_t *mod); +int popups_modfirst(OscarData *od, aim_module_t *mod); +int bart_modfirst(OscarData *od, aim_module_t *mod); +int ssi_modfirst(OscarData *od, aim_module_t *mod); +int icq_modfirst(OscarData *od, aim_module_t *mod); +int email_modfirst(OscarData *od, aim_module_t *mod); +void aim_genericreq_n(OscarData *od, FlapConnection *conn, guint16 family, guint16 subtype); +void aim_genericreq_n_snacid(OscarData *od, FlapConnection *conn, guint16 family, guint16 subtype); +void aim_genericreq_l(OscarData *od, FlapConnection *conn, guint16 family, guint16 subtype, guint32 *); +int byte_stream_new(ByteStream *bs, size_t len); +int byte_stream_init(ByteStream *bs, guint8 *data, size_t len); +void byte_stream_destroy(ByteStream *bs); +int byte_stream_bytes_left(ByteStream *bs); +int byte_stream_curpos(ByteStream *bs); +int byte_stream_setpos(ByteStream *bs, size_t off); +void byte_stream_rewind(ByteStream *bs); +int byte_stream_advance(ByteStream *bs, int n); +guint8 byte_stream_get8(ByteStream *bs); +guint16 byte_stream_get16(ByteStream *bs); +guint32 byte_stream_get32(ByteStream *bs); +guint8 byte_stream_getle8(ByteStream *bs); +guint16 byte_stream_getle16(ByteStream *bs); +guint32 byte_stream_getle32(ByteStream *bs); +int byte_stream_getrawbuf(ByteStream *bs, guint8 *buf, size_t len); +guint8 *byte_stream_getraw(ByteStream *bs, size_t len); +char *byte_stream_getstr(ByteStream *bs, size_t len); +int byte_stream_put8(ByteStream *bs, guint8 v); +int byte_stream_put16(ByteStream *bs, guint16 v); +int byte_stream_put32(ByteStream *bs, guint32 v); +int byte_stream_putle8(ByteStream *bs, guint8 v); +int byte_stream_putle16(ByteStream *bs, guint16 v); +int byte_stream_putle32(ByteStream *bs, guint32 v); +int byte_stream_putraw(ByteStream *bs, const guint8 *v, size_t len); +int byte_stream_putstr(ByteStream *bs, const char *str); +int byte_stream_putbs(ByteStream *bs, ByteStream *srcbs, size_t len); +int byte_stream_putuid(ByteStream *bs, OscarData *od); +int byte_stream_putcaps(ByteStream *bs, guint64 caps); + * Inserts a BART asset block into the given byte stream. The flags + * and length are set appropriately based on the value of data. +void byte_stream_put_bart_asset(ByteStream *bs, guint16 type, ByteStream *data); + * A helper function that calls byte_stream_put_bart_asset with the + * appropriate data ByteStream given the datastr. +void byte_stream_put_bart_asset_str(ByteStream *bs, guint16 type, const char *datastr); + * Generic SNAC structure. Rarely if ever used. +typedef struct aim_snac_s { + struct aim_snac_s *next; +void aim_initsnachash(OscarData *od); +aim_snacid_t aim_newsnac(OscarData *, aim_snac_t *newsnac); +aim_snacid_t aim_cachesnac(OscarData *od, const guint16 family, const guint16 type, const guint16 flags, const void *data, const int datalen); +aim_snac_t *aim_remsnac(OscarData *, aim_snacid_t id); +void aim_cleansnacs(OscarData *, int maxage); +int aim_putsnac(ByteStream *, guint16 family, guint16 type, aim_snacid_t id); + struct timeval last; /**< The time when we last sent a SNAC of this rate class. */ +int aim_cachecookie(OscarData *od, IcbmCookie *cookie); +IcbmCookie *aim_uncachecookie(OscarData *od, guint8 *cookie, int type); +IcbmCookie *aim_mkcookie(guint8 *, int, void *); +IcbmCookie *aim_checkcookie(OscarData *, const unsigned char *, const int); +int aim_freecookie(OscarData *od, IcbmCookie *cookie); +int aim_cookie_free(OscarData *od, IcbmCookie *cookie); +int aim_chat_readroominfo(ByteStream *bs, struct aim_chat_roominfo *outinfo); +void flap_connection_destroy_chat(OscarData *od, FlapConnection *conn); +/* userinfo.c - displaying user information */ +void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean use_html_status); +void oscar_user_info_append_extra_info(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo); +void oscar_user_info_display_error(OscarData *od, guint16 error_reason, char *buddy); +void oscar_user_info_display_icq(OscarData *od, struct aim_icq_info *info); +void oscar_user_info_display_aim(OscarData *od, aim_userinfo_t *userinfo); +/* authorization.c - OSCAR authorization requests */ +void oscar_auth_sendrequest(PurpleConnection *gc, const char *name, const char *msg); +void oscar_auth_sendrequest_menu(PurpleBlistNode *node, gpointer ignored); +void oscar_auth_recvrequest(PurpleConnection *gc, gchar *name, gchar *nick, gchar *reason); +void oscar_set_aim_permdeny(PurpleConnection *gc); + unsigned long ico_me_len; + unsigned long ico_me_csum; + unsigned long ico_csum; +void oscar_free_name_data(struct name_data *data); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/p2p.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,264 @@
+ * @file p2p.h MSN P2P functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * For outgoing messages this is the number of bytes from buffer that + * have already been sent out. For incoming messages this is the + * number of bytes that have been written to buffer. +#define P2P_PACKET_HEADER_SIZE (6 * 4 + 3 * 8) + guint8 data_header_len; + guint16 package_number; + guint16 protocol_version; + guint16 implementation_id; + TF_FIRST = 0x01, /**< The first package. */ + TF_MSNOBJ = 0x04, /**< Payload contains binary data for MsnObject. */ + TF_FILE = 0x06 /**< Payload contains binary data. */ + P2P_HEADER_TLV_TYPE_PEER_INFO = 0x01, /**< Client peer info */ + P2P_HEADER_TLV_TYPE_ACK = 0x02, /**< ACK */ + P2P_HEADER_TLV_TYPE_NAK = 0x03 /**< NAK */ + P2P_DATA_TLV_REMAINING = 0x01, /**< Indicates the remaining data to transfer.*/ + P2P_PI_CAPS = 0x0000010f +#define P2P_PACKET_FOOTER_SIZE (1 * 4) + MSN_P2P_VERSION_ONE = 0, + MSN_P2P_VERSION_TWO = 1, + P2P_NO_FLAG = 0x0, /**< No flags specified */ + P2P_OUT_OF_ORDER = 0x1, /**< Chunk out-of-order */ + P2P_ACK = 0x2, /**< Acknowledgement */ + P2P_PENDING_INVITE = 0x4, /**< There is a pending invite */ + P2P_BINARY_ERROR = 0x8, /**< Error on the binary level */ + P2P_FILE = 0x10, /**< File */ + P2P_MSN_OBJ_DATA = 0x20, /**< MsnObject data */ + P2P_CLOSE = 0x40, /**< Close session */ + P2P_TLP_ERROR = 0x80, /**< Error at transport layer protocol */ + P2P_DC_HANDSHAKE = 0x100, /**< Direct Handshake */ + P2P_WLM2009_COMP = 0x1000000, /**< Compatibility with WLM 2009 */ + P2P_FILE_DATA = 0x1000030 /**< File transfer data */ + * http://msnpiki.msnfanatic.com/index.php/MSNC:P2Pv1_Headers#Flags + * http://trac.kmess.org/changeset/ba04d0c825769d23370511031c47f6be75fe9b86 + P2P_APPID_SESSION = 0x0, /**< Negotiating session */ + P2P_APPID_OBJ = 0x1, /**< MsnObject (Display or Emoticon) */ + P2P_APPID_FILE = 0x2, /**< File transfer */ + P2P_APPID_EMOTE = 0xB, /**< CustomEmoticon */ + P2P_APPID_DISPLAY = 0xC /**< Display Image */ + P2P_OPCODE_NONE = 0x00, +msn_p2p_info_new(MsnP2PVersion version); +msn_p2p_info_dup(MsnP2PInfo *info); +msn_p2p_info_free(MsnP2PInfo *info); +msn_p2p_header_from_wire(MsnP2PInfo *info, const char *wire, size_t max_len); +msn_p2p_header_to_wire(MsnP2PInfo *info, size_t *len); +msn_p2p_footer_from_wire(MsnP2PInfo *info, const char *wire); +msn_p2p_footer_to_wire(MsnP2PInfo *info, size_t *len); +msn_p2p_info_to_string(MsnP2PInfo *info, GString *str); +msn_p2p_msg_is_data(const MsnP2PInfo *info); +msn_p2p_info_is_valid(MsnP2PInfo *info); +msn_p2p_info_is_first(MsnP2PInfo *info); +msn_p2p_info_is_final(MsnP2PInfo *info); +msn_p2p_info_create_ack(MsnP2PInfo *old_info, MsnP2PInfo *new_info); +msn_p2p_info_require_ack(MsnP2PInfo *info); +msn_p2p_info_is_ack(MsnP2PInfo *info); +msn_p2p_info_init_first(MsnP2PInfo *new_info, MsnP2PInfo *old_info); +msn_p2p_info_get_session_id(MsnP2PInfo *info); +msn_p2p_info_get_id(MsnP2PInfo *info); +msn_p2p_info_get_offset(MsnP2PInfo *info); +msn_p2p_info_get_total_size(MsnP2PInfo *info); +msn_p2p_info_get_length(MsnP2PInfo *info); +msn_p2p_info_get_flags(MsnP2PInfo *info); +msn_p2p_info_get_ack_id(MsnP2PInfo *info); +msn_p2p_info_get_ack_sub_id(MsnP2PInfo *info); +msn_p2p_info_get_ack_size(MsnP2PInfo *info); +msn_p2p_info_get_app_id(MsnP2PInfo *info); +msn_p2p_info_set_session_id(MsnP2PInfo *info, guint32 session_id); +msn_p2p_info_set_id(MsnP2PInfo *info, guint32 id); +msn_p2p_info_set_offset(MsnP2PInfo *info, guint64 offset); +msn_p2p_info_set_total_size(MsnP2PInfo *info, guint64 total_size); +msn_p2p_info_set_length(MsnP2PInfo *info, guint32 length); +msn_p2p_info_set_flags(MsnP2PInfo *info, guint32 flags); +msn_p2p_info_set_ack_id(MsnP2PInfo *info, guint32 ack_id); +msn_p2p_info_set_ack_sub_id(MsnP2PInfo *info, guint32 ack_sub_id); +msn_p2p_info_set_ack_size(MsnP2PInfo *info, guint64 ack_size); +msn_p2p_info_set_app_id(MsnP2PInfo *info, guint32 app_id); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/page.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,81 @@
+ * @file page.h Paging functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnPage MsnPage; + * Creates a new, empty page. +MsnPage *msn_page_new(void); +void msn_page_destroy(MsnPage *page); + * Generates the payload data of a page. + * @param page The page. + * @param ret_size The returned size of the payload. + * @return The payload data of a page. +char *msn_page_gen_payload(const MsnPage *page, size_t *ret_size); + * Sets the body of a page. + * @param page The page. + * @param body The body of the page. +void msn_page_set_body(MsnPage *page, const char *body); + * Returns the body of the page. + * @param page The page. + * @return The body of the page. +const char *msn_page_get_body(const MsnPage *page); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/peer.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,282 @@
+ * Purple's oscar protocol plugin + * This file is the legal property of its developers. + * Please see the AUTHORS file distributed alongside this file. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _ChecksumData ChecksumData; +typedef struct _OdcFrame OdcFrame; +typedef struct _OftFrame OftFrame; +typedef struct _ProxyFrame ProxyFrame; +typedef struct _PeerConnection PeerConnection; +#define PEER_CONNECTION_FLAG_INITIATED_BY_ME 0x0001 +#define PEER_CONNECTION_FLAG_APPROVED 0x0002 +#define PEER_CONNECTION_FLAG_TRIED_DIRECT 0x0004 +#define PEER_CONNECTION_FLAG_TRIED_INCOMING 0x0008 +#define PEER_CONNECTION_FLAG_TRIED_PROXY 0x0010 +#define PEER_CONNECTION_FLAG_IS_INCOMING 0x0020 +#define PEER_TYPE_PROMPT 0x0101 /* "I am going to send you this file, is that ok?" */ +#define PEER_TYPE_RESUMEACCEPT 0x0106 /* We are accepting the resume */ +#define PEER_TYPE_ACK 0x0202 /* "Yes, it is ok for you to send me that file" */ +#define PEER_TYPE_DONE 0x0204 /* "I received that file with no problems" or "I already have that file, great!" */ +#define PEER_TYPE_RESUME 0x0205 /* Resume transferring, sent by whoever receives */ +#define PEER_TYPE_RESUMEACK 0x0207 /* Our resume accept was ACKed */ +#define PEER_TYPE_GETFILE_REQUESTLISTING 0x1108 /* "I have a listing.txt file, do you want it?" */ +#define PEER_TYPE_GETFILE_RECEIVELISTING 0x1209 /* "Yes, please send me your listing.txt file" */ +#define PEER_TYPE_GETFILE_RECEIVEDLISTING 0x120a /* received corrupt listing.txt file? I'm just guessing about this one... */ +#define PEER_TYPE_GETFILE_ACKLISTING 0x120b /* "I received the listing.txt file successfully" */ +#define PEER_TYPE_GETFILE_REQUESTFILE 0x120c /* "Please send me this file" */ +#define AIM_PEER_PROXY_SERVER "ars.oscar.aol.com" +#define ICQ_PEER_PROXY_SERVER "ars.icq.com" +#define PEER_PROXY_PORT 5190 /* The port we should always connect to */ +#define PEER_PROXY_PACKET_VERSION 0x044a +/* Thanks to Keith Lea and the Joust project for documenting these */ +#define PEER_PROXY_TYPE_ERROR 0x0001 +#define PEER_PROXY_TYPE_CREATE 0x0002 +#define PEER_PROXY_TYPE_CREATED 0x0003 +#define PEER_PROXY_TYPE_JOIN 0x0004 +#define PEER_PROXY_TYPE_READY 0x0005 + /* guchar magic[4]; */ /* 0 */ + /* guint16 length; */ /* 4 */ + guint16 subtype; /* 8 */ + guchar cookie[8]; /* 12 */ + /* guint32 payloadlength; */ /* 28 */ + guint16 encoding; /* 32 */ + guint16 flags; /* 38 */ + guchar bn[32]; /* 44 */ + ByteStream payload; /* 76 */ + /* guchar magic[4]; */ /* 0 */ + /* guint16 length; */ /* 4 */ + guchar cookie[8]; /* 8 */ + guint16 encrypt; /* 16 */ + guint16 compress; /* 18 */ + guint16 totfiles; /* 20 */ + guint16 filesleft; /* 22 */ + guint16 totparts; /* 24 */ + guint16 partsleft; /* 26 */ + guint32 totsize; /* 28 */ + guint32 modtime; /* 36 */ + guint32 checksum; /* 40 */ + guint32 rfrcsum; /* 44 */ + guint32 rfsize; /* 48 */ + guint32 cretime; /* 52 */ + guint32 rfcsum; /* 56 */ + guint32 nrecvd; /* 60 */ + guint32 recvcsum; /* 64 */ + guchar idstring[32]; /* 68 */ + guint8 flags; /* 100 */ + guint8 lnameoffset; /* 101 */ + guint8 lsizeoffset; /* 102 */ + guchar dummy[69]; /* 103 */ + guchar macfileinfo[16]; /* 172 */ + guint16 nencode; /* 188 */ + guint16 nlanguage; /* 190 */ + guchar *name; /* 192 */ + /* Payload? */ /* 256 */ + /* guint16 length; */ /* 0 */ + guint16 version; /* 2 */ + guint32 unknown; /* 6 */ + guint16 flags; /* 10 */ + ByteStream payload; /* 12 */ + guint16 lastrequestnumber; + int flags; /**< Bitmask of PEER_CONNECTION_FLAG_ */ + time_t lastactivity; /**< Time of last transmit. */ + OscarDisconnectReason disconnect_reason; + * A pointer to either an OdcFrame or an OftFrame. + * This is only used when the peer connection is being established. + PurpleProxyConnectData *client_connect_data; + PurpleProxyConnectData *verified_connect_data; + * This is only used when the peer connection is being established. + PurpleNetworkListenData *listen_data; + * This is only used when the peer connection is being established. + guint connect_timeout_timer; + * This is only used while the remote user is attempting to + gssize header_received; + guint8 proxy_header[12]; + gssize proxy_header_received; + ByteStream buffer_incoming; + PurpleCircBuffer *buffer_outgoing; + guint watcher_incoming; + guint watcher_outgoing; + * IP address of the proxy server, if applicable. + * IP address of the remote user from THEIR point of view. + * IP address of the remote user from the oscar server's + ChecksumData *checksum_data; + guint sending_data_timer; + * For all peer connections + * Create a new PeerConnection structure and initialize it with some + * @param type The type of the peer connection. One of + * OSCAR_CAPABILITY_DIRECTIM or OSCAR_CAPABILITY_SENDFILE. +PeerConnection *peer_connection_new(OscarData *od, guint64 type, const char *bn); +void peer_connection_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message); +void peer_connection_schedule_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message); +PeerConnection *peer_connection_find_by_type(OscarData *od, const char *bn, guint64 type); +PeerConnection *peer_connection_find_by_cookie(OscarData *od, const char *bn, const guchar *cookie); +void peer_connection_listen_cb(gpointer data, gint source, PurpleInputCondition cond); +void peer_connection_recv_cb(gpointer data, gint source, PurpleInputCondition cond); +void peer_connection_send(PeerConnection *conn, ByteStream *bs); +void peer_connection_trynext(PeerConnection *conn); +void peer_connection_finalize_connection(PeerConnection *conn); +void peer_connection_propose(OscarData *od, guint64 type, const char *bn); +void peer_connection_got_proposition(OscarData *od, const gchar *bn, const gchar *message, IcbmArgsCh2 *args); +void peer_odc_close(PeerConnection *conn); +void peer_odc_recv_frame(PeerConnection *conn, ByteStream *bs); +void peer_odc_send_cookie(PeerConnection *conn); +void peer_odc_send_typing(PeerConnection *conn, PurpleTypingState typing); +void peer_odc_send_im(PeerConnection *conn, const char *msg, int len, int encoding, gboolean autoreply); +void peer_oft_close(PeerConnection *conn); +void peer_oft_recv_frame(PeerConnection *conn, ByteStream *bs); +void peer_oft_send_prompt(PeerConnection *conn); +void peer_oft_checksum_destroy(ChecksumData *checksum_data); +/* Xfer callbacks for receiving a file */ +void peer_oft_recvcb_init(PurpleXfer *xfer); +void peer_oft_recvcb_end(PurpleXfer *xfer); +void peer_oft_recvcb_ack_recv(PurpleXfer *xfer, const guchar *buffer, size_t size); +/* Xfer callbacks for sending a file */ +void peer_oft_sendcb_init(PurpleXfer *xfer); +void peer_oft_sendcb_ack(PurpleXfer *xfer, const guchar *buffer, size_t size); +/* Xfer callbacks for both sending and receiving */ +void peer_oft_cb_generic_cancel(PurpleXfer *xfer); +void peer_proxy_connection_established_cb(gpointer data, gint source, const gchar *error_message); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/plugin.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,740 @@
+ * @file plugin.h Plugin API + * @see @ref plugin-signals + * @see @ref plugin-i18n + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PLUGIN_H_ +#define _PURPLE_PLUGIN_H_ +/** @copydoc _PurplePlugin */ +typedef struct _PurplePlugin PurplePlugin; +/** @copydoc _PurplePluginInfo */ +typedef struct _PurplePluginInfo PurplePluginInfo; +/** @copydoc _PurplePluginUiInfo */ +typedef struct _PurplePluginUiInfo PurplePluginUiInfo; +/** @copydoc _PurplePluginLoaderInfo */ +typedef struct _PurplePluginLoaderInfo PurplePluginLoaderInfo; +/** @copydoc _PurplePluginAction */ +typedef struct _PurplePluginAction PurplePluginAction; +typedef int PurplePluginPriority; /**< Plugin priority. */ + PURPLE_PLUGIN_UNKNOWN = -1, /**< Unknown type. */ + PURPLE_PLUGIN_STANDARD = 0, /**< Standard plugin. */ + PURPLE_PLUGIN_LOADER, /**< Loader plugin. */ + PURPLE_PLUGIN_PROTOCOL /**< Protocol plugin. */ +#define PURPLE_PRIORITY_DEFAULT 0 +#define PURPLE_PRIORITY_HIGHEST 9999 +#define PURPLE_PRIORITY_LOWEST -9999 +#define PURPLE_PLUGIN_FLAG_INVISIBLE 0x01 +#define PURPLE_PLUGIN_MAGIC 5 /* once we hit 6.0.0 I think we can remove this */ + * Detailed information about a plugin. + * This is used in the version 2.0 API and up. +struct _PurplePluginInfo + unsigned int major_version; + unsigned int minor_version; + PurplePluginPriority priority; + * If a plugin defines a 'load' function, and it returns FALSE, + * then the plugin will not be loaded. + gboolean (*load)(PurplePlugin *plugin); + gboolean (*unload)(PurplePlugin *plugin); + void (*destroy)(PurplePlugin *plugin); + void *ui_info; /**< Used only by UI-specific plugins to build a preference screen with a custom UI */ + PurplePluginUiInfo *prefs_info; /**< Used by any plugin to display preferences. If #ui_info has been specified, this will be ignored. */ + * This callback has a different use depending on whether this + * plugin type is PURPLE_PLUGIN_STANDARD or PURPLE_PLUGIN_PROTOCOL. + * If PURPLE_PLUGIN_STANDARD then the list of actions will show up + * in the Tools menu, under a submenu with the name of the plugin. + * context will be NULL. + * If PURPLE_PLUGIN_PROTOCOL then the list of actions will show up + * in the Accounts menu, under a submenu with the name of the + * account. context will be set to the PurpleConnection for that + * account. This callback will only be called for online accounts. + GList *(*actions)(PurplePlugin *plugin, gpointer context); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + * Extra information for loader plugins. +struct _PurplePluginLoaderInfo + gboolean (*probe)(PurplePlugin *plugin); + gboolean (*load)(PurplePlugin *plugin); + gboolean (*unload)(PurplePlugin *plugin); + void (*destroy)(PurplePlugin *plugin); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + gboolean native_plugin; /**< Native C plugin. */ + gboolean loaded; /**< The loaded state. */ + void *handle; /**< The module handle. */ + char *path; /**< The path to the plugin. */ + PurplePluginInfo *info; /**< The plugin information. */ + void *ipc_data; /**< IPC data. */ + void *extra; /**< Plugin-specific data. */ + gboolean unloadable; /**< Unloadable */ + GList *dependent_plugins; /**< Plugins depending on this */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +#define PURPLE_PLUGIN_LOADER_INFO(plugin) \ + ((PurplePluginLoaderInfo *)(plugin)->info->extra_info) +struct _PurplePluginUiInfo { + PurplePluginPrefFrame *(*get_plugin_pref_frame)(PurplePlugin *plugin); + int page_num; /**< Reserved */ + PurplePluginPrefFrame *frame; /**< Reserved */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +#define PURPLE_PLUGIN_HAS_PREF_FRAME(plugin) \ + ((plugin)->info != NULL && (plugin)->info->prefs_info != NULL) +#define PURPLE_PLUGIN_UI_INFO(plugin) \ + ((PurplePluginUiInfo*)(plugin)->info->prefs_info) + * The structure used in the actions member of PurplePluginInfo +struct _PurplePluginAction { + void (*callback)(PurplePluginAction *); + /** set to the owning plugin */ + /** NULL for plugin actions menu, set to the PurpleConnection for + account actions menu */ +#define PURPLE_PLUGIN_HAS_ACTIONS(plugin) \ + ((plugin)->info != NULL && (plugin)->info->actions != NULL) +#define PURPLE_PLUGIN_ACTIONS(plugin, context) \ + (PURPLE_PLUGIN_HAS_ACTIONS(plugin)? \ + (plugin)->info->actions(plugin, context): NULL) + * Handles the initialization of modules. +#if !defined(PURPLE_PLUGINS) || defined(PURPLE_STATIC_PRPL) +# define _FUNC_NAME(x) purple_init_##x##_plugin +# define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \ + gboolean _FUNC_NAME(pluginname)(void);\ + gboolean _FUNC_NAME(pluginname)(void) { \ + PurplePlugin *plugin = purple_plugin_new(TRUE, NULL); \ + plugin->info = &(plugininfo); \ + purple_plugin_load((plugin)); \ + return purple_plugin_register(plugin); \ +#else /* PURPLE_PLUGINS && !PURPLE_STATIC_PRPL */ +# define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \ + G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin); \ + G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin) { \ + plugin->info = &(plugininfo); \ + return purple_plugin_register(plugin); \ +/**************************************************************************/ +/**************************************************************************/ + * Creates a new plugin structure. + * @param native Whether or not the plugin is native. + * @param path The path to the plugin, or @c NULL if statically compiled. + * @return A new PurplePlugin structure. +PurplePlugin *purple_plugin_new(gboolean native, const char *path); + * Probes a plugin, retrieving the information on it and adding it to the + * list of available plugins. + * @param filename The plugin's filename. + * @return The plugin handle. + * @see purple_plugin_load() + * @see purple_plugin_destroy() +PurplePlugin *purple_plugin_probe(const char *filename); + * Registers a plugin and prepares it for loading. + * This shouldn't be called by anything but the internal module code. + * Plugins should use the PURPLE_INIT_PLUGIN() macro to register themselves + * @param plugin The plugin to register. + * @return @c TRUE if the plugin was registered successfully. Otherwise + * @c FALSE is returned (this happens if the plugin does not contain + * the necessary information). +gboolean purple_plugin_register(PurplePlugin *plugin); + * Attempts to load a previously probed plugin. + * @param plugin The plugin to load. + * @return @c TRUE if successful, or @c FALSE otherwise. + * @see purple_plugin_reload() + * @see purple_plugin_unload() +gboolean purple_plugin_load(PurplePlugin *plugin); + * Unloads the specified plugin. + * @param plugin The plugin handle. + * @return @c TRUE if successful, or @c FALSE otherwise. + * @see purple_plugin_load() + * @see purple_plugin_reload() +gboolean purple_plugin_unload(PurplePlugin *plugin); + * This function adds the plugin to a list of plugins to "disable at the next + * startup" by excluding said plugins from the list of plugins to save. The + * UI needs to call purple_plugins_save_loaded() after calling this for it +void purple_plugin_disable(PurplePlugin *plugin); + * @param plugin The old plugin handle. + * @return @c TRUE if successful, or @c FALSE otherwise. + * @see purple_plugin_load() + * @see purple_plugin_unload() +gboolean purple_plugin_reload(PurplePlugin *plugin); + * Unloads a plugin and destroys the structure from memory. + * @param plugin The plugin handle. +void purple_plugin_destroy(PurplePlugin *plugin); + * Returns whether or not a plugin is currently loaded. + * @param plugin The plugin. + * @return @c TRUE if loaded, or @c FALSE otherwise. +gboolean purple_plugin_is_loaded(const PurplePlugin *plugin); + * Returns whether or not a plugin is unloadable. + * If this returns @c TRUE, the plugin is guaranteed to not + * be loadable. However, a return value of @c FALSE does not + * guarantee the plugin is loadable. + * @param plugin The plugin. + * @return @c TRUE if the plugin is known to be unloadable,\ +gboolean purple_plugin_is_unloadable(const PurplePlugin *plugin); + * Returns a plugin's id. + * @param plugin The plugin. + * @return The plugin's id. +const gchar *purple_plugin_get_id(const PurplePlugin *plugin); + * Returns a plugin's name. + * @param plugin The plugin. + * @return THe name of the plugin, or @c NULL. +const gchar *purple_plugin_get_name(const PurplePlugin *plugin); + * Returns a plugin's version. + * @param plugin The plugin. + * @return The plugin's version or @c NULL. +const gchar *purple_plugin_get_version(const PurplePlugin *plugin); + * Returns a plugin's summary. + * @param plugin The plugin. + * @return The plugin's summary. +const gchar *purple_plugin_get_summary(const PurplePlugin *plugin); + * Returns a plugin's description. + * @param plugin The plugin. + * @return The plugin's description. +const gchar *purple_plugin_get_description(const PurplePlugin *plugin); + * Returns a plugin's author. + * @param plugin The plugin. + * @return The plugin's author. +const gchar *purple_plugin_get_author(const PurplePlugin *plugin); + * Returns a plugin's homepage. + * @param plugin The plugin. + * @return The plugin's homepage. +const gchar *purple_plugin_get_homepage(const PurplePlugin *plugin); +/**************************************************************************/ +/** @name Plugin IPC API */ +/**************************************************************************/ + * Registers an IPC command in a plugin. + * @param plugin The plugin to register the command with. + * @param command The name of the command. + * @param func The function to execute. + * @param marshal The marshalling function. + * @param ret_value The return value type. + * @param num_params The number of parameters. + * @param ... The parameter types. + * @return TRUE if the function was registered successfully, or +gboolean purple_plugin_ipc_register(PurplePlugin *plugin, const char *command, + PurpleSignalMarshalFunc marshal, + PurpleValue *ret_value, int num_params, ...); + * Unregisters an IPC command in a plugin. + * @param plugin The plugin to unregister the command from. + * @param command The name of the command. +void purple_plugin_ipc_unregister(PurplePlugin *plugin, const char *command); + * Unregisters all IPC commands in a plugin. + * @param plugin The plugin to unregister the commands from. +void purple_plugin_ipc_unregister_all(PurplePlugin *plugin); + * Returns a list of value types used for an IPC command. + * @param plugin The plugin. + * @param command The name of the command. + * @param ret_value The returned return value. + * @param num_params The returned number of parameters. + * @param params The returned list of parameters. + * @return TRUE if the command was found, or FALSE otherwise. +gboolean purple_plugin_ipc_get_params(PurplePlugin *plugin, const char *command, + PurpleValue **ret_value, int *num_params, + PurpleValue ***params); + * Executes an IPC command. + * @param plugin The plugin to execute the command on. + * @param command The name of the command. + * @param ok TRUE if the call was successful, or FALSE otherwise. + * @param ... The parameters to pass. + * @return The return value, which will be NULL if the command doesn't +void *purple_plugin_ipc_call(PurplePlugin *plugin, const char *command, +/**************************************************************************/ +/** @name Plugins API */ +/**************************************************************************/ + * Add a new directory to search for plugins + * @param path The new search path. +void purple_plugins_add_search_path(const char *path); + * Returns a list of plugin search paths. + * @constreturn A list of searched paths. +GList *purple_plugins_get_search_paths(void); + * Unloads all loaded plugins. +void purple_plugins_unload_all(void); + * Unloads all plugins of a specific type. +void purple_plugins_unload(PurplePluginType type); + * Destroys all registered plugins. +void purple_plugins_destroy_all(void); + * Saves the list of loaded plugins to the specified preference key + * @param key The preference key to save the list of plugins to. +void purple_plugins_save_loaded(const char *key); + * Attempts to load all the plugins in the specified preference key + * that were loaded when purple last quit. + * @param key The preference key containing the list of plugins. +void purple_plugins_load_saved(const char *key); + * Probes for plugins in the registered module paths. + * @param ext The extension type to probe for, or @c NULL for all. + * @see purple_plugin_set_probe_path() +void purple_plugins_probe(const char *ext); + * Returns whether or not plugin support is enabled. + * @return TRUE if plugin support is enabled, or FALSE otherwise. +gboolean purple_plugins_enabled(void); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Registers a function that will be called when probing is finished. + * @param func The callback function. + * @param data Data to pass to the callback. + * @deprecated If you need this, ask for a plugin-probe signal to be added. +void purple_plugins_register_probe_notify_cb(void (*func)(void *), void *data); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Unregisters a function that would be called when probing is finished. + * @param func The callback function. + * @deprecated If you need this, ask for a plugin-probe signal to be added. +void purple_plugins_unregister_probe_notify_cb(void (*func)(void *)); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Registers a function that will be called when a plugin is loaded. + * @param func The callback function. + * @param data Data to pass to the callback. + * @deprecated Use the plugin-load signal instead. +void purple_plugins_register_load_notify_cb(void (*func)(PurplePlugin *, void *), +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Unregisters a function that would be called when a plugin is loaded. + * @param func The callback function. + * @deprecated Use the plugin-load signal instead. +void purple_plugins_unregister_load_notify_cb(void (*func)(PurplePlugin *, void *)); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Registers a function that will be called when a plugin is unloaded. + * @param func The callback function. + * @param data Data to pass to the callback. + * @deprecated Use the plugin-unload signal instead. +void purple_plugins_register_unload_notify_cb(void (*func)(PurplePlugin *, void *), +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_) + * Unregisters a function that would be called when a plugin is unloaded. + * @param func The callback function. + * @deprecated Use the plugin-unload signal instead. +void purple_plugins_unregister_unload_notify_cb(void (*func)(PurplePlugin *, + * Finds a plugin with the specified name. + * @param name The plugin name. + * @return The plugin if found, or @c NULL if not found. +PurplePlugin *purple_plugins_find_with_name(const char *name); + * Finds a plugin with the specified filename (filename with a path). + * @param filename The plugin filename. + * @return The plugin if found, or @c NULL if not found. +PurplePlugin *purple_plugins_find_with_filename(const char *filename); + * Finds a plugin with the specified basename (filename without a path). + * @param basename The plugin basename. + * @return The plugin if found, or @c NULL if not found. +PurplePlugin *purple_plugins_find_with_basename(const char *basename); + * Finds a plugin with the specified plugin ID. + * @param id The plugin ID. + * @return The plugin if found, or @c NULL if not found. +PurplePlugin *purple_plugins_find_with_id(const char *id); + * Returns a list of all loaded plugins. + * @constreturn A list of all loaded plugins. +GList *purple_plugins_get_loaded(void); + * Returns a list of all valid protocol plugins. A protocol + * plugin is considered invalid if it does not contain the call + * to the PURPLE_INIT_PLUGIN() macro, or if it was compiled + * against an incompatable API version. + * @constreturn A list of all protocol plugins. +GList *purple_plugins_get_protocols(void); + * Returns a list of all plugins, whether loaded or not. + * @constreturn A list of all plugins. +GList *purple_plugins_get_all(void); +/**************************************************************************/ +/** @name Plugins SubSytem API */ +/**************************************************************************/ + * Returns the plugin subsystem handle. + * @return The plugin sybsystem handle. +void *purple_plugins_get_handle(void); + * Initializes the plugin subsystem +void purple_plugins_init(void); + * Uninitializes the plugin subsystem +void purple_plugins_uninit(void); + * Allocates and returns a new PurplePluginAction. + * @param label The description of the action to show to the user. + * @param callback The callback to call when the user selects this action. +PurplePluginAction *purple_plugin_action_new(const char* label, void (*callback)(PurplePluginAction *)); + * Frees a PurplePluginAction + * @param action The PurplePluginAction to free. +void purple_plugin_action_free(PurplePluginAction *action); +#endif /* _PURPLE_PLUGIN_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/pluginpref.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,269 @@
+ * @file pluginpref.h Plugin Preferences API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PLUGINPREF_H_ +#define _PURPLE_PLUGINPREF_H_ +typedef struct _PurplePluginPrefFrame PurplePluginPrefFrame; +typedef struct _PurplePluginPref PurplePluginPref; + * String format for preferences. + PURPLE_STRING_FORMAT_TYPE_NONE = 0, /**< The string is plain text. */ + PURPLE_STRING_FORMAT_TYPE_MULTILINE = 1 << 0, /**< The string can have newlines. */ + PURPLE_STRING_FORMAT_TYPE_HTML = 1 << 1 /**< The string can be in HTML. */ +} PurpleStringFormatType; + PURPLE_PLUGIN_PREF_NONE, + PURPLE_PLUGIN_PREF_CHOICE, + PURPLE_PLUGIN_PREF_INFO, /**< no-value label */ + PURPLE_PLUGIN_PREF_STRING_FORMAT /**< The preference has a string value. */ +/**************************************************************************/ +/** @name Plugin Preference API */ +/**************************************************************************/ + * Create a new plugin preference frame + * @return a new PurplePluginPrefFrame +PurplePluginPrefFrame *purple_plugin_pref_frame_new(void); + * Destroy a plugin preference frame + * @param frame The plugin frame to destroy +void purple_plugin_pref_frame_destroy(PurplePluginPrefFrame *frame); + * Adds a plugin preference to a plugin preference frame + * @param frame The plugin frame to add the preference to + * @param pref The preference to add to the frame +void purple_plugin_pref_frame_add(PurplePluginPrefFrame *frame, PurplePluginPref *pref); + * Get the plugin preferences from a plugin preference frame + * @param frame The plugin frame to get the plugin preferences from + * @constreturn a GList of plugin preferences +GList *purple_plugin_pref_frame_get_prefs(PurplePluginPrefFrame *frame); + * Create a new plugin preference + * @return a new PurplePluginPref +PurplePluginPref *purple_plugin_pref_new(void); + * Create a new plugin preference with name + * @param name The name of the pref + * @return a new PurplePluginPref +PurplePluginPref *purple_plugin_pref_new_with_name(const char *name); + * Create a new plugin preference with label + * @param label The label to be displayed + * @return a new PurplePluginPref +PurplePluginPref *purple_plugin_pref_new_with_label(const char *label); + * Create a new plugin preference with name and label + * @param name The name of the pref + * @param label The label to be displayed + * @return a new PurplePluginPref +PurplePluginPref *purple_plugin_pref_new_with_name_and_label(const char *name, const char *label); + * Destroy a plugin preference + * @param pref The preference to destroy +void purple_plugin_pref_destroy(PurplePluginPref *pref); + * Set a plugin pref name + * @param pref The plugin pref + * @param name The name of the pref +void purple_plugin_pref_set_name(PurplePluginPref *pref, const char *name); + * Get a plugin pref name + * @param pref The plugin pref + * @return The name of the pref +const char *purple_plugin_pref_get_name(PurplePluginPref *pref); + * Set a plugin pref label + * @param pref The plugin pref + * @param label The label for the plugin pref +void purple_plugin_pref_set_label(PurplePluginPref *pref, const char *label); + * Get a plugin pref label + * @param pref The plugin pref + * @return The label for the plugin pref +const char *purple_plugin_pref_get_label(PurplePluginPref *pref); + * Set the bounds for an integer pref + * @param pref The plugin pref + * @param min The min value + * @param max The max value +void purple_plugin_pref_set_bounds(PurplePluginPref *pref, int min, int max); + * Get the bounds for an integer pref + * @param pref The plugin pref + * @param min The min value + * @param max The max value +void purple_plugin_pref_get_bounds(PurplePluginPref *pref, int *min, int *max); + * Set the type of a plugin pref + * @param pref The plugin pref +void purple_plugin_pref_set_type(PurplePluginPref *pref, PurplePluginPrefType type); + * Get the type of a plugin pref + * @param pref The plugin pref +PurplePluginPrefType purple_plugin_pref_get_type(PurplePluginPref *pref); + * Set the choices for a choices plugin pref + * @param pref The plugin pref + * @param label The label for the choice + * @param choice A gpointer of the choice +void purple_plugin_pref_add_choice(PurplePluginPref *pref, const char *label, gpointer choice); + * Get the choices for a choices plugin pref + * @param pref The plugin pref + * @constreturn GList of the choices +GList *purple_plugin_pref_get_choices(PurplePluginPref *pref); + * Set the max length for a string plugin pref + * @param pref The plugin pref + * @param max_length The max length of the string +void purple_plugin_pref_set_max_length(PurplePluginPref *pref, unsigned int max_length); + * Get the max length for a string plugin pref + * @param pref The plugin pref + * @return the max length +unsigned int purple_plugin_pref_get_max_length(PurplePluginPref *pref); + * Sets the masking of a string plugin pref + * @param pref The plugin pref + * @param mask The value to set +void purple_plugin_pref_set_masked(PurplePluginPref *pref, gboolean mask); + * Gets the masking of a string plugin pref + * @param pref The plugin pref +gboolean purple_plugin_pref_get_masked(PurplePluginPref *pref); + * Sets the format type for a formattable-string plugin pref. You need to set the + * pref type to PURPLE_PLUGIN_PREF_STRING_FORMAT first before setting the format. + * @param pref The plugin pref + * @param format The format of the string +void purple_plugin_pref_set_format_type(PurplePluginPref *pref, PurpleStringFormatType format); + * Gets the format type of the formattable-string plugin pref. + * @param pref The plugin pref + * @return The format of the pref +PurpleStringFormatType purple_plugin_pref_get_format_type(PurplePluginPref *pref); +#endif /* _PURPLE_PLUGINPREF_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/pounce.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,389 @@
+ * @file pounce.h Buddy Pounce API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_POUNCE_H_ +#define _PURPLE_POUNCE_H_ +typedef struct _PurplePounce PurplePounce; + * Events that trigger buddy pounces. + PURPLE_POUNCE_NONE = 0x000, /**< No events. */ + PURPLE_POUNCE_SIGNON = 0x001, /**< The buddy signed on. */ + PURPLE_POUNCE_SIGNOFF = 0x002, /**< The buddy signed off. */ + PURPLE_POUNCE_AWAY = 0x004, /**< The buddy went away. */ + PURPLE_POUNCE_AWAY_RETURN = 0x008, /**< The buddy returned from away. */ + PURPLE_POUNCE_IDLE = 0x010, /**< The buddy became idle. */ + PURPLE_POUNCE_IDLE_RETURN = 0x020, /**< The buddy is no longer idle. */ + PURPLE_POUNCE_TYPING = 0x040, /**< The buddy started typing. */ + PURPLE_POUNCE_TYPED = 0x080, /**< The buddy has entered text. */ + PURPLE_POUNCE_TYPING_STOPPED = 0x100, /**< The buddy stopped typing. */ + PURPLE_POUNCE_MESSAGE_RECEIVED = 0x200 /**< The buddy sent a message */ + PURPLE_POUNCE_OPTION_NONE = 0x00, /**< No Option */ + PURPLE_POUNCE_OPTION_AWAY = 0x01 /**< Pounce only when away */ +/** A pounce callback. */ +typedef void (*PurplePounceCb)(PurplePounce *, PurplePounceEvent, void *); + * A buddy pounce structure. + * Buddy pounces are actions triggered by a buddy-related event. For + * example, a sound can be played or an IM window opened when a buddy + * signs on or returns from away. Such responses are handled in the + * UI. The events themselves are done in the core. + char *ui_type; /**< The type of UI. */ + PurplePounceEvent events; /**< The event(s) to pounce on. */ + PurplePounceOption options; /**< The pounce options */ + PurpleAccount *pouncer; /**< The user who is pouncing. */ + char *pouncee; /**< The buddy to pounce on. */ + GHashTable *actions; /**< The registered actions. */ + gboolean save; /**< Whether or not the pounce should + be saved after activation. */ + void *data; /**< Pounce-specific data. */ +/**************************************************************************/ +/** @name Buddy Pounce API */ +/**************************************************************************/ + * Creates a new buddy pounce. + * @param ui_type The type of UI the pounce is for. + * @param pouncer The account that will pounce. + * @param pouncee The buddy to pounce on. + * @param event The event(s) to pounce on. + * @param option Pounce options. + * @return The new buddy pounce structure. +PurplePounce *purple_pounce_new(const char *ui_type, PurpleAccount *pouncer, + const char *pouncee, PurplePounceEvent event, + PurplePounceOption option); + * Destroys a buddy pounce. + * @param pounce The buddy pounce. +void purple_pounce_destroy(PurplePounce *pounce); + * Destroys all buddy pounces for the account + * @param account The account to remove all pounces from. +void purple_pounce_destroy_all_by_account(PurpleAccount *account); + * Destroys all buddy pounces for a buddy + * @param buddy The buddy whose pounces are to be removed +void purple_pounce_destroy_all_by_buddy(PurpleBuddy *buddy); + * Sets the events a pounce should watch for. + * @param pounce The buddy pounce. + * @param events The events to watch for. +void purple_pounce_set_events(PurplePounce *pounce, PurplePounceEvent events); + * Sets the options for a pounce. + * @param pounce The buddy pounce. + * @param options The options for the pounce. +void purple_pounce_set_options(PurplePounce *pounce, PurplePounceOption options); + * Sets the account that will do the pouncing. + * @param pounce The buddy pounce. + * @param pouncer The account that will pounce. +void purple_pounce_set_pouncer(PurplePounce *pounce, PurpleAccount *pouncer); + * Sets the buddy a pounce should pounce on. + * @param pounce The buddy pounce. + * @param pouncee The buddy to pounce on. +void purple_pounce_set_pouncee(PurplePounce *pounce, const char *pouncee); + * Sets whether or not the pounce should be saved after execution. + * @param pounce The buddy pounce. + * @param save @c TRUE if the pounce should be saved, or @c FALSE otherwise. +void purple_pounce_set_save(PurplePounce *pounce, gboolean save); + * Registers an action type for the pounce. + * @param pounce The buddy pounce. + * @param name The action name. +void purple_pounce_action_register(PurplePounce *pounce, const char *name); + * Enables or disables an action for a pounce. + * @param pounce The buddy pounce. + * @param action The name of the action. + * @param enabled The enabled state. +void purple_pounce_action_set_enabled(PurplePounce *pounce, const char *action, + * Sets a value for an attribute in an action. + * If @a value is @c NULL, the value will be unset. + * @param pounce The buddy pounce. + * @param action The action name. + * @param attr The attribute name. + * @param value The value. +void purple_pounce_action_set_attribute(PurplePounce *pounce, const char *action, + const char *attr, const char *value); + * Sets the pounce-specific data. + * @param pounce The buddy pounce. + * @param data Data specific to the pounce. +void purple_pounce_set_data(PurplePounce *pounce, void *data); + * Returns the events a pounce should watch for. + * @param pounce The buddy pounce. + * @return The events the pounce is watching for. +PurplePounceEvent purple_pounce_get_events(const PurplePounce *pounce); + * Returns the options for a pounce. + * @param pounce The buddy pounce. + * @return The options for the pounce. +PurplePounceOption purple_pounce_get_options(const PurplePounce *pounce); + * Returns the account that will do the pouncing. + * @param pounce The buddy pounce. + * @return The account that will pounce. +PurpleAccount *purple_pounce_get_pouncer(const PurplePounce *pounce); + * Returns the buddy a pounce should pounce on. + * @param pounce The buddy pounce. + * @return The buddy to pounce on. +const char *purple_pounce_get_pouncee(const PurplePounce *pounce); + * Returns whether or not the pounce should save after execution. + * @param pounce The buddy pounce. + * @return @c TRUE if the pounce should be saved after execution, or +gboolean purple_pounce_get_save(const PurplePounce *pounce); + * Returns whether or not an action is enabled. + * @param pounce The buddy pounce. + * @param action The action name. + * @return @c TRUE if the action is enabled, or @c FALSE otherwise. +gboolean purple_pounce_action_is_enabled(const PurplePounce *pounce, + * Returns the value for an attribute in an action. + * @param pounce The buddy pounce. + * @param action The action name. + * @param attr The attribute name. + * @return The attribute value, if it exists, or @c NULL. +const char *purple_pounce_action_get_attribute(const PurplePounce *pounce, + * Returns the pounce-specific data. + * @param pounce The buddy pounce. + * @return The data specific to a buddy pounce. +void *purple_pounce_get_data(const PurplePounce *pounce); + * Executes a pounce with the specified pouncer, pouncee, and event type. + * @param pouncer The account that will do the pouncing. + * @param pouncee The buddy that is being pounced. + * @param events The events that triggered the pounce. +void purple_pounce_execute(const PurpleAccount *pouncer, const char *pouncee, + PurplePounceEvent events); +/**************************************************************************/ +/** @name Buddy Pounce Subsystem API */ +/**************************************************************************/ + * Finds a pounce with the specified event(s) and buddy. + * @param pouncer The account to match against. + * @param pouncee The buddy to match against. + * @param events The event(s) to match against. + * @return The pounce if found, or @c NULL otherwise. +PurplePounce *purple_find_pounce(const PurpleAccount *pouncer, + const char *pouncee, PurplePounceEvent events); + * @return @c TRUE if the pounces could be loaded. +gboolean purple_pounces_load(void); + * Registers a pounce handler for a UI. + * @param ui The UI name. + * @param cb The callback function. + * @param new_pounce The function called when a pounce is created. + * @param free_pounce The function called when a pounce is freed. +void purple_pounces_register_handler(const char *ui, PurplePounceCb cb, + void (*new_pounce)(PurplePounce *pounce), + void (*free_pounce)(PurplePounce *pounce)); + * Unregisters a pounce handle for a UI. + * @param ui The UI name. +void purple_pounces_unregister_handler(const char *ui); + * Returns a list of all registered buddy pounces. + * @constreturn The list of buddy pounces. +GList *purple_pounces_get_all(void); + * Returns a list of registered buddy pounces for the ui-type. + * @param ui The ID of the UI using the core. + * @return The list of buddy pounces. The list should be freed by + * the caller when it's no longer used. +GList *purple_pounces_get_all_for_ui(const char *ui); + * Returns the buddy pounce subsystem handle. + * @return The subsystem handle. +void *purple_pounces_get_handle(void); + * Initializes the pounces subsystem. +void purple_pounces_init(void); + * Uninitializes the pounces subsystem. +void purple_pounces_uninit(void); +#endif /* _PURPLE_POUNCE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/prefs.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,371 @@
+ * @file prefs.h Prefs API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PREFS_H_ +#define _PURPLE_PREFS_H_ + * Preference data types. +typedef enum _PurplePrefType + PURPLE_PREF_NONE, /**< No type. */ + PURPLE_PREF_BOOLEAN, /**< Boolean. */ + PURPLE_PREF_INT, /**< Integer. */ + PURPLE_PREF_STRING, /**< String. */ + PURPLE_PREF_STRING_LIST, /**< List of strings. */ + PURPLE_PREF_PATH, /**< Path. */ + PURPLE_PREF_PATH_LIST /**< List of paths. */ + * The type of callbacks for preference changes. + * @param name the name of the preference which has changed. + * @param type the type of the preferenced named @a name + * @param val the new value of the preferencs; should be cast to the correct + * type. For instance, to recover the value of a #PURPLE_PREF_INT + * preference, use <tt>GPOINTER_TO_INT(val)</tt>. Alternatively, + * just call purple_prefs_get_int(), purple_prefs_get_string_list() + * @param data Arbitrary data specified when the callback was connected with + * purple_prefs_connect_callback(). + * @see purple_prefs_connect_callback() +typedef void (*PurplePrefCallback) (const char *name, PurplePrefType type, + gconstpointer val, gpointer data); +/**************************************************************************/ + Preferences are named according to a directory-like structure. + Example: "/plugins/core/potato/is_from_idaho" (probably a boolean) */ +/**************************************************************************/ + * Returns the prefs subsystem handle. + * @return The prefs subsystem handle. +void *purple_prefs_get_handle(void); + * Initialize core prefs +void purple_prefs_init(void); + * Uninitializes the prefs subsystem. +void purple_prefs_uninit(void); + * Add a new typeless pref. + * @param name The name of the pref +void purple_prefs_add_none(const char *name); + * Add a new boolean pref. + * @param name The name of the pref + * @param value The initial value to set +void purple_prefs_add_bool(const char *name, gboolean value); + * Add a new integer pref. + * @param name The name of the pref + * @param value The initial value to set +void purple_prefs_add_int(const char *name, int value); + * Add a new string pref. + * @param name The name of the pref + * @param value The initial value to set +void purple_prefs_add_string(const char *name, const char *value); + * Add a new string list pref. + * @param name The name of the pref + * @param value The initial value to set + * @note This function takes a copy of the strings in the value list. The list + * itself and original copies of the strings are up to the caller to +void purple_prefs_add_string_list(const char *name, GList *value); + * @param name The name of the pref + * @param value The initial value to set +void purple_prefs_add_path(const char *name, const char *value); + * Add a new path list pref. + * @param name The name of the pref + * @param value The initial value to set + * @note This function takes a copy of the strings in the value list. The list + * itself and original copies of the strings are up to the caller to +void purple_prefs_add_path_list(const char *name, GList *value); + * @param name The name of the pref +void purple_prefs_remove(const char *name); + * @param oldname The old name of the pref + * @param newname The new name for the pref +void purple_prefs_rename(const char *oldname, const char *newname); + * Rename a boolean pref, toggling it's value + * @param oldname The old name of the pref + * @param newname The new name for the pref +void purple_prefs_rename_boolean_toggle(const char *oldname, const char *newname); +void purple_prefs_destroy(void); + * @param name The name of the pref + * @param value The value to set + * @deprecated We're not really sure what purpose this function serves, so it + * will be removed in 3.0.0. Preferences values set using this + * function aren't serialized to prefs.xml, which could be + * misleading. There is also no purple_prefs_get_generic, which + * means that if you can't really get the value (other in a + * connected callback). If you think you have a use for this then +/* TODO: When this is removed, also remove struct purple_pref->value.generic */ +void purple_prefs_set_generic(const char *name, gpointer value); + * Set boolean pref value + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_bool(const char *name, gboolean value); + * Set integer pref value + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_int(const char *name, int value); + * Set string pref value + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_string(const char *name, const char *value); + * Set string list pref value + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_string_list(const char *name, GList *value); + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_path(const char *name, const char *value); + * Set path list pref value + * @param name The name of the pref + * @param value The value to set +void purple_prefs_set_path_list(const char *name, GList *value); + * Check if a pref exists + * @param name The name of the pref + * @return TRUE if the pref exists. Otherwise FALSE. +gboolean purple_prefs_exists(const char *name); + * @param name The name of the pref + * @return The type of the pref +PurplePrefType purple_prefs_get_type(const char *name); + * Get boolean pref value + * @param name The name of the pref + * @return The value of the pref +gboolean purple_prefs_get_bool(const char *name); + * Get integer pref value + * @param name The name of the pref + * @return The value of the pref +int purple_prefs_get_int(const char *name); + * Get string pref value + * @param name The name of the pref + * @return The value of the pref +const char *purple_prefs_get_string(const char *name); + * Get string list pref value + * @param name The name of the pref + * @return The value of the pref +GList *purple_prefs_get_string_list(const char *name); + * @param name The name of the pref + * @return The value of the pref +const char *purple_prefs_get_path(const char *name); + * Get path list pref value + * @param name The name of the pref + * @return The value of the pref +GList *purple_prefs_get_path_list(const char *name); + * Returns a list of children for a pref + * @param name The parent pref + * @return A list of newly allocated strings denoting the names of the children. + * Returns @c NULL if there are no children or if pref doesn't exist. + * The caller must free all the strings and the list. +GList *purple_prefs_get_children_names(const char *name); + * Add a callback to a pref (and its children) + * @param handle The handle of the receiver. + * @param name The name of the preference + * @param cb The callback function + * @param data The data to pass to the callback function. + * @return An id to disconnect the callback + * @see purple_prefs_disconnect_callback +guint purple_prefs_connect_callback(void *handle, const char *name, PurplePrefCallback cb, + * Remove a callback to a pref +void purple_prefs_disconnect_callback(guint callback_id); + * Remove all pref callbacks by handle +void purple_prefs_disconnect_by_handle(void *handle); + * Trigger callbacks as if the pref changed +void purple_prefs_trigger_callback(const char *name); +gboolean purple_prefs_load(void); + * Rename legacy prefs and delete some that no longer exist. +void purple_prefs_update_old(void); +#endif /* _PURPLE_PREFS_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/presence.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,103 @@
+ * @file presence.h Presence + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_PRESENCE_H_ +#define PURPLE_JABBER_PRESENCE_H_ + JABBER_PRESENCE_ERROR = -2, + JABBER_PRESENCE_PROBE = -1, + JABBER_PRESENCE_AVAILABLE, + JABBER_PRESENCE_UNAVAILABLE, + JABBER_PRESENCE_SUBSCRIBE, + JABBER_PRESENCE_SUBSCRIBED, + JABBER_PRESENCE_UNSUBSCRIBE, + JABBER_PRESENCE_UNSUBSCRIBED +typedef struct _JabberPresenceChatInfo JabberPresenceChatInfo; +typedef struct _JabberPresence JabberPresence; +struct _JabberPresenceChatInfo { +struct _JabberPresence { + JabberPresenceType type; + JabberPresenceChatInfo chat_info; + xmlnode *caps; /* TODO: Temporary, see presence.c:parse_caps */ + JabberBuddyState state; + char *vcard_avatar_hash; +typedef void (JabberPresenceHandler)(JabberStream *js, JabberPresence *presence, +void jabber_presence_register_handler(const char *node, const char *xmlns, + JabberPresenceHandler *handler); +void jabber_presence_init(void); +void jabber_presence_uninit(void); +void jabber_set_status(PurpleAccount *account, PurpleStatus *status); + * Send a full presence stanza. + * @param js A JabberStream object. + * @param force Force sending the presence stanza, irrespective of whether + * the contents seem to have changed. +void jabber_presence_send(JabberStream *js, gboolean force); +xmlnode *jabber_presence_create(JabberBuddyState state, const char *msg, int priority); /* DEPRECATED */ +xmlnode *jabber_presence_create_js(JabberStream *js, JabberBuddyState state, const char *msg, int priority); +void jabber_presence_parse(JabberStream *js, xmlnode *packet); +void jabber_presence_subscription_set(JabberStream *js, const char *who, +void jabber_presence_fake_to_self(JabberStream *js, PurpleStatus *status); +void purple_status_to_jabber(const PurpleStatus *status, JabberBuddyState *state, char **msg, int *priority); +#endif /* PURPLE_JABBER_PRESENCE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/privacy.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,194 @@
+ * @file privacy.h Privacy API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PRIVACY_H_ +#define _PURPLE_PRIVACY_H_ +typedef enum _PurplePrivacyType + PURPLE_PRIVACY_ALLOW_ALL = 1, + PURPLE_PRIVACY_DENY_ALL, + PURPLE_PRIVACY_ALLOW_USERS, + PURPLE_PRIVACY_DENY_USERS, + PURPLE_PRIVACY_ALLOW_BUDDYLIST + * Privacy core/UI operations. + void (*permit_added)(PurpleAccount *account, const char *name); + void (*permit_removed)(PurpleAccount *account, const char *name); + void (*deny_added)(PurpleAccount *account, const char *name); + void (*deny_removed)(PurpleAccount *account, const char *name); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); + * Adds a user to the account's permit list. + * @param account The account. + * @param name The name of the user to add to the list. + * @param local_only If TRUE, only the local list is updated, and not + * @return TRUE if the user was added successfully, or @c FALSE otherwise. +gboolean purple_privacy_permit_add(PurpleAccount *account, const char *name, + * Removes a user from the account's permit list. + * @param account The account. + * @param name The name of the user to add to the list. + * @param local_only If TRUE, only the local list is updated, and not + * @return TRUE if the user was removed successfully, or @c FALSE otherwise. +gboolean purple_privacy_permit_remove(PurpleAccount *account, const char *name, + * Adds a user to the account's deny list. + * @param account The account. + * @param name The name of the user to add to the list. + * @param local_only If TRUE, only the local list is updated, and not + * @return TRUE if the user was added successfully, or @c FALSE otherwise. +gboolean purple_privacy_deny_add(PurpleAccount *account, const char *name, + * Removes a user from the account's deny list. + * @param account The account. + * @param name The name of the user to add to the list. + * @param local_only If TRUE, only the local list is updated, and not + * @return TRUE if the user was removed successfully, or @c FALSE otherwise. +gboolean purple_privacy_deny_remove(PurpleAccount *account, const char *name, + * Allow a user to send messages. If current privacy setting for the account is: + * PURPLE_PRIVACY_ALLOW_USERS: The user is added to the allow-list. + * PURPLE_PRIVACY_DENY_USERS : The user is removed from the deny-list. + * PURPLE_PRIVACY_ALLOW_ALL : No changes made. + * PURPLE_PRIVACY_DENY_ALL : The privacy setting is changed to + * PURPLE_PRIVACY_ALLOW_USERS and the user + * is added to the allow-list. + * PURPLE_PRIVACY_ALLOW_BUDDYLIST: No changes made if the user is already in + * the buddy-list. Otherwise the setting is + * changed to PURPLE_PRIVACY_ALLOW_USERS, all the + * buddies are added to the allow-list, and the + * user is also added to the allow-list. + * @param account The account. + * @param who The name of the user. + * @param local Whether the change is local-only. + * @param restore Should the previous allow/deny list be restored if the + * privacy setting is changed. +void purple_privacy_allow(PurpleAccount *account, const char *who, gboolean local, + * Block messages from a user. If current privacy setting for the account is: + * PURPLE_PRIVACY_ALLOW_USERS: The user is removed from the allow-list. + * PURPLE_PRIVACY_DENY_USERS : The user is added to the deny-list. + * PURPLE_PRIVACY_DENY_ALL : No changes made. + * PURPLE_PRIVACY_ALLOW_ALL : The privacy setting is changed to + * PURPLE_PRIVACY_DENY_USERS and the user is + * added to the deny-list. + * PURPLE_PRIVACY_ALLOW_BUDDYLIST: If the user is not in the buddy-list, + * then no changes made. Otherwise, the setting + * is changed to PURPLE_PRIVACY_ALLOW_USERS, all + * the buddies are added to the allow-list, and + * this user is removed from the list. + * @param account The account. + * @param who The name of the user. + * @param local Whether the change is local-only. + * @param restore Should the previous allow/deny list be restored if the + * privacy setting is changed. +void purple_privacy_deny(PurpleAccount *account, const char *who, gboolean local, + * Check the privacy-setting for a user. + * @param account The account. + * @param who The name of the user. + * @return @c FALSE if the specified account's privacy settings block the user or @c TRUE otherwise. The meaning of "block" is protocol-dependent and generally relates to status and/or sending of messages. +gboolean purple_privacy_check(PurpleAccount *account, const char *who); + * Sets the UI operations structure for the privacy subsystem. + * @param ops The UI operations structure. +void purple_privacy_set_ui_ops(PurplePrivacyUiOps *ops); + * Returns the UI operations structure for the privacy subsystem. + * @return The UI operations structure. +PurplePrivacyUiOps *purple_privacy_get_ui_ops(void); + * Initializes the privacy subsystem. +void purple_privacy_init(void); +#endif /* _PURPLE_PRIVACY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/proxy.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,372 @@
+ * @file proxy.h Proxy API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PROXY_H_ +#define _PURPLE_PROXY_H_ + * A type of proxy connection. + PURPLE_PROXY_USE_GLOBAL = -1, /**< Use the global proxy information. */ + PURPLE_PROXY_NONE = 0, /**< No proxy. */ + PURPLE_PROXY_HTTP, /**< HTTP proxy. */ + PURPLE_PROXY_SOCKS4, /**< SOCKS 4 proxy. */ + PURPLE_PROXY_SOCKS5, /**< SOCKS 5 proxy. */ + PURPLE_PROXY_USE_ENVVAR, /**< Use environmental settings. */ + PURPLE_PROXY_TOR /**< Use a Tor proxy (SOCKS 5 really) */ + * Information on proxy settings. + PurpleProxyType type; /**< The proxy type. */ + char *host; /**< The host. */ + int port; /**< The port number. */ + char *username; /**< The username. */ + char *password; /**< The password. */ +typedef struct _PurpleProxyConnectData PurpleProxyConnectData; +typedef void (*PurpleProxyConnectFunction)(gpointer data, gint source, const gchar *error_message); +/**************************************************************************/ +/** @name Proxy structure API */ +/**************************************************************************/ + * Creates a proxy information structure. + * @return The proxy information structure. +PurpleProxyInfo *purple_proxy_info_new(void); + * Destroys a proxy information structure. + * @param info The proxy information structure to destroy. +void purple_proxy_info_destroy(PurpleProxyInfo *info); + * Sets the type of proxy. + * @param info The proxy information. + * @param type The proxy type. +void purple_proxy_info_set_type(PurpleProxyInfo *info, PurpleProxyType type); + * @param info The proxy information. + * @param host The host. +void purple_proxy_info_set_host(PurpleProxyInfo *info, const char *host); + * @param info The proxy information. + * @param port The port. +void purple_proxy_info_set_port(PurpleProxyInfo *info, int port); + * Sets the proxy username. + * @param info The proxy information. + * @param username The username. +void purple_proxy_info_set_username(PurpleProxyInfo *info, const char *username); + * Sets the proxy password. + * @param info The proxy information. + * @param password The password. +void purple_proxy_info_set_password(PurpleProxyInfo *info, const char *password); + * Returns the proxy's type. + * @param info The proxy information. +PurpleProxyType purple_proxy_info_get_type(const PurpleProxyInfo *info); + * Returns the proxy's host. + * @param info The proxy information. +const char *purple_proxy_info_get_host(const PurpleProxyInfo *info); + * Returns the proxy's port. + * @param info The proxy information. +int purple_proxy_info_get_port(const PurpleProxyInfo *info); + * Returns the proxy's username. + * @param info The proxy information. + * @return The username. +const char *purple_proxy_info_get_username(const PurpleProxyInfo *info); + * Returns the proxy's password. + * @param info The proxy information. + * @return The password. +const char *purple_proxy_info_get_password(const PurpleProxyInfo *info); +/**************************************************************************/ +/** @name Global Proxy API */ +/**************************************************************************/ + * Returns purple's global proxy information. + * @return The global proxy information. +PurpleProxyInfo *purple_global_proxy_get_info(void); + * Set purple's global proxy information. + * @param info The proxy information. +void purple_global_proxy_set_info(PurpleProxyInfo *info); +/**************************************************************************/ +/**************************************************************************/ + * Returns the proxy subsystem handle. + * @return The proxy subsystem handle. +void *purple_proxy_get_handle(void); + * Initializes the proxy subsystem. +void purple_proxy_init(void); + * Uninitializes the proxy subsystem. +void purple_proxy_uninit(void); + * Returns configuration of a proxy. + * @param account The account for which the configuration is needed. + * @return The configuration of a proxy. +PurpleProxyInfo *purple_proxy_get_setup(PurpleAccount *account); + * Makes a connection to the specified host and port. Note that this + * function name can be misleading--although it is called "proxy + * connect," it is used for establishing any outgoing TCP connection, + * whether through a proxy or not. + * @param handle A handle that should be associated with this + * connection attempt. The handle can be used + * to cancel the connection attempt using the + * purple_proxy_connect_cancel_with_handle() + * @param account The account making the connection. + * @param host The destination host. + * @param port The destination port. + * @param connect_cb The function to call when the connection is + * established. If the connection failed then + * fd will be -1 and error message will be set + * to something descriptive (hopefully). + * @param data User-defined data. + * @return NULL if there was an error, or a reference to an + * opaque data structure that can be used to cancel + * the pending connection, if needed. +PurpleProxyConnectData *purple_proxy_connect(void *handle, + PurpleAccount *account, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data); + * Makes a connection to the specified host and port. Note that this + * function name can be misleading--although it is called "proxy + * connect," it is used for establishing any outgoing UDP connection, + * whether through a proxy or not. + * @param handle A handle that should be associated with this + * connection attempt. The handle can be used + * to cancel the connection attempt using the + * purple_proxy_connect_cancel_with_handle() + * @param account The account making the connection. + * @param host The destination host. + * @param port The destination port. + * @param connect_cb The function to call when the connection is + * established. If the connection failed then + * fd will be -1 and error message will be set + * to something descriptive (hopefully). + * @param data User-defined data. + * @return NULL if there was an error, or a reference to an + * opaque data structure that can be used to cancel + * the pending connection, if needed. +PurpleProxyConnectData *purple_proxy_connect_udp(void *handle, + PurpleAccount *account, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data); + * Makes a connection through a SOCKS5 proxy. + * Note that if the account that is making the connection uses a proxy, this + * connection to a SOCKS5 proxy will be made through the account proxy. + * @param handle A handle that should be associated with this + * connection attempt. The handle can be used + * to cancel the connection attempt using the + * purple_proxy_connect_cancel_with_handle() + * @param account The account making the connection. + * @param gpi The PurpleProxyInfo specifying the proxy settings + * @param host The destination host. + * @param port The destination port. + * @param connect_cb The function to call when the connection is + * established. If the connection failed then + * fd will be -1 and error message will be set + * to something descriptive (hopefully). + * @param data User-defined data. + * @return NULL if there was an error, or a reference to an + * opaque data structure that can be used to cancel + * the pending connection, if needed. +PurpleProxyConnectData *purple_proxy_connect_socks5_account(void *handle, + PurpleAccount *account, PurpleProxyInfo *gpi, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PROXY_C_) + * Makes a connection through a SOCKS5 proxy. + * @param handle A handle that should be associated with this + * connection attempt. The handle can be used + * to cancel the connection attempt using the + * purple_proxy_connect_cancel_with_handle() + * @param gpi The PurpleProxyInfo specifying the proxy settings + * @param host The destination host. + * @param port The destination port. + * @param connect_cb The function to call when the connection is + * established. If the connection failed then + * fd will be -1 and error message will be set + * to something descriptive (hopefully). + * @param data User-defined data. + * @return NULL if there was an error, or a reference to an + * opaque data structure that can be used to cancel + * the pending connection, if needed. + * @deprecated Use purple_proxy_connect_socks5_account instead +PurpleProxyConnectData *purple_proxy_connect_socks5(void *handle, + const char *host, int port, + PurpleProxyConnectFunction connect_cb, gpointer data); + * Cancel an in-progress connection attempt. This should be called + * by the PRPL if the user disables an account while it is still + * performing the initial sign on. Or when establishing a file + * transfer, if we attempt to connect to a remote user but they + * are behind a firewall then the PRPL can cancel the connection + * attempt early rather than just letting the OS's TCP/IP stack + * time-out the connection. +void purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data); + * Closes all proxy connections registered with the specified handle. + * @param handle The handle. +void purple_proxy_connect_cancel_with_handle(void *handle); +#endif /* _PURPLE_PROXY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/prpl.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1015 @@
+ * @file prpl.h Protocol Plugin functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/* this file should be all that prpls need to include. therefore, by including + * this file, they should get glib, proxy, purple_connection, prpl, etc. */ +typedef struct _PurplePluginProtocolInfo PurplePluginProtocolInfo; +/** @copydoc _PurpleAttentionType */ +typedef struct _PurpleAttentionType PurpleAttentionType; +/**************************************************************************/ +/** @name Basic Protocol Information */ +/**************************************************************************/ + PURPLE_ICON_SCALE_DISPLAY = 0x01, /**< We scale the icon when we display it */ + PURPLE_ICON_SCALE_SEND = 0x02 /**< We scale the icon before we send it to the server */ + * A description of a Buddy Icon specification. This tells Purple what kind of image file + * it should give this prpl, and what kind of image file it should expect back. + * Dimensions less than 1 should be ignored and the image not scaled. +typedef struct _PurpleBuddyIconSpec PurpleBuddyIconSpec; + * A description of a file transfer thumbnail specification. + * This tells the UI if and what image formats the prpl support for file +typedef struct _PurpleThumbnailSpec PurpleThumbnailSpec; + * This \#define exists just to make it easier to fill out the buddy icon + * field in the prpl info struct for protocols that couldn't care less. +#define NO_BUDDY_ICONS {NULL, 0, 0, 0, 0, 0, 0} +#include "conversation.h" +/** @copydoc PurpleBuddyIconSpec */ +struct _PurpleBuddyIconSpec { + /** This is a comma-delimited list of image formats or @c NULL if icons + * are not supported. Neither the core nor the prpl will actually + * check to see if the data it's given matches this; it's entirely up + * to the UI to do what it wants + int min_width; /**< Minimum width of this icon */ + int min_height; /**< Minimum height of this icon */ + int max_width; /**< Maximum width of this icon */ + int max_height; /**< Maximum height of this icon */ + size_t max_filesize; /**< Maximum size in bytes */ + PurpleIconScaleRules scale_rules; /**< How to stretch this icon */ +/** Represents an entry containing information that must be supplied by the + * user when joining a chat. +struct proto_chat_entry { + const char *label; /**< User-friendly name of the entry */ + const char *identifier; /**< Used by the PRPL to identify the option */ + gboolean required; /**< True if it's required */ + gboolean is_int; /**< True if the entry expects an integer */ + int min; /**< Minimum value in case of integer */ + int max; /**< Maximum value in case of integer */ + gboolean secret; /**< True if the entry is secret (password) */ +/** Represents "nudges" and "buzzes" that you may send to a buddy to attract + * their attention (or vice-versa). +struct _PurpleAttentionType + const char *name; /**< Shown in GUI elements */ + const char *incoming_description; /**< Shown when sent */ + const char *outgoing_description; /**< Shown when receied */ + const char *icon_name; /**< Icon to display (optional) */ + const char *unlocalized_name; /**< Unlocalized name for UIs needing it */ + /* Reserved fields for future purposes */ + * These should all be stuff that some plugins can do and others can't. + * User names are unique to a chat and are not shared between rooms. + * XMPP lets you choose what name you want in chats, so it shouldn't + * be pulling the aliases from the buddy list for the chat list; + OPT_PROTO_UNIQUE_CHATNAME = 0x00000004, + * Chat rooms have topics. + * IRC and XMPP support this. + OPT_PROTO_CHAT_TOPIC = 0x00000008, + * Don't require passwords for sign-in. + * Zephyr doesn't require passwords, so there's no + * need for a password prompt. + OPT_PROTO_NO_PASSWORD = 0x00000010, + * MSN and Yahoo notify you when you have new mail. + OPT_PROTO_MAIL_CHECK = 0x00000020, + * Oscar lets you send images in direct IMs. + OPT_PROTO_IM_IMAGE = 0x00000040, + * Allow passwords to be optional. + * Passwords in IRC are optional, and are needed for certain + OPT_PROTO_PASSWORD_OPTIONAL = 0x00000080, + * Allows font size to be specified in sane point size + * Probably just XMPP and Y!M + OPT_PROTO_USE_POINTSIZE = 0x00000100, + * Set the Register button active even when the username has not + * Gadu-Gadu doesn't need a username to register new account (because + * usernames are assigned by the server). + OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200, + * Indicates that slash commands are native to this protocol. + * Used as a hint that unknown commands should not be sent as messages. + OPT_PROTO_SLASH_COMMANDS_NATIVE = 0x00000400, + * Indicates that this protocol supports sending a user-supplied message + * along with an invitation. + OPT_PROTO_INVITE_MESSAGE = 0x00000800 +} PurpleProtocolOptions; + * A protocol plugin information structure. + * Every protocol plugin initializes this structure. It is the gateway + * between purple and the protocol plugin. Many of these callbacks can be + * NULL. If a callback must be implemented, it has a comment indicating so. +struct _PurplePluginProtocolInfo + PurpleProtocolOptions options; /**< Protocol options. */ + GList *user_splits; /**< A GList of PurpleAccountUserSplit */ + GList *protocol_options; /**< A GList of PurpleAccountOption */ + PurpleBuddyIconSpec icon_spec; /**< The icon spec. */ + * Returns the base icon name for the given buddy and account. + * If buddy is NULL and the account is non-NULL, it will return the + * name to use for the account's icon. If both are NULL, it will + * return the name to use for the protocol's icon. + * This must be implemented. + const char *(*list_icon)(PurpleAccount *account, PurpleBuddy *buddy); + * Fills the four char**'s with string identifiers for "emblems" + * that the UI will interpret and display as relevant + const char *(*list_emblem)(PurpleBuddy *buddy); + * Gets a short string representing this buddy's status. This will + * be shown on the buddy list. + char *(*status_text)(PurpleBuddy *buddy); + * Allows the prpl to add text to a buddy's tooltip. + void (*tooltip_text)(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full); + * Returns a list of #PurpleStatusType which exist for this account; + * this must be implemented, and must add at least the offline and + GList *(*status_types)(PurpleAccount *account); + * Returns a list of #PurpleMenuAction structs, which represent extra + * actions to be shown in (for example) the right-click menu for @a + GList *(*blist_node_menu)(PurpleBlistNode *node); + * Returns a list of #proto_chat_entry structs, which represent + * information required by the PRPL to join a chat. libpurple will + * call join_chat along with the information filled by the user. + * @return A list of #proto_chat_entry structs + GList *(*chat_info)(PurpleConnection *); + * Returns a hashtable which maps #proto_chat_entry struct identifiers + * to default options as strings based on chat_name. The resulting + * hashtable should be created with g_hash_table_new_full(g_str_hash, + * g_str_equal, NULL, g_free);. Use #get_chat_name if you instead need + * to extract a chat name from a hashtable. + * @param chat_name The chat name to be turned into components + * @return Hashtable containing the information extracted from chat_name + GHashTable *(*chat_info_defaults)(PurpleConnection *, const char *chat_name); + /* All the server-related functions */ + /** This must be implemented. */ + void (*login)(PurpleAccount *); + /** This must be implemented. */ + void (*close)(PurpleConnection *); + * This PRPL function should return a positive value on success. + * If the message is too big to be sent, return -E2BIG. If + * the account is not connected, return -ENOTCONN. If the + * PRPL is unable to send the message for another reason, return + * some other negative value. You can use one of the valid + * errno values, or just big something. If the message should + * not be echoed to the conversation window, return 0. + int (*send_im)(PurpleConnection *, const char *who, + PurpleMessageFlags flags); + void (*set_info)(PurpleConnection *, const char *info); + * @return If this protocol requires the PURPLE_TYPING message to + * be sent repeatedly to signify that the user is still + * typing, then the PRPL should return the number of + * seconds to wait before sending a subsequent notification. + * Otherwise the PRPL should return 0. + unsigned int (*send_typing)(PurpleConnection *, const char *name, PurpleTypingState state); + * Should arrange for purple_notify_userinfo() to be called with + void (*get_info)(PurpleConnection *, const char *who); + void (*set_status)(PurpleAccount *account, PurpleStatus *status); + void (*set_idle)(PurpleConnection *, int idletime); + void (*change_passwd)(PurpleConnection *, const char *old_pass, + * Add a buddy to a group on the server. + * This PRPL function may be called in situations in which the buddy is + * already in the specified group. If the protocol supports + * authorization and the user is not already authorized to see the + * status of \a buddy, \a add_buddy should request authorization. + * @deprecated Since 2.8.0, add_buddy_with_invite is preferred. + * @see add_buddy_with_invite + void (*add_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group); + void (*add_buddies)(PurpleConnection *, GList *buddies, GList *groups); + void (*remove_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group); + void (*remove_buddies)(PurpleConnection *, GList *buddies, GList *groups); + void (*add_permit)(PurpleConnection *, const char *name); + void (*add_deny)(PurpleConnection *, const char *name); + void (*rem_permit)(PurpleConnection *, const char *name); + void (*rem_deny)(PurpleConnection *, const char *name); + void (*set_permit_deny)(PurpleConnection *); + * Called when the user requests joining a chat. Should arrange for + * #serv_got_joined_chat to be called. + * @param components A hashtable containing information required to + * join the chat as described by the entries returned + * by #chat_info. It may also be called when accepting + * an invitation, in which case this matches the + * data parameter passed to #serv_got_chat_invite. + void (*join_chat)(PurpleConnection *, GHashTable *components); + * Called when the user refuses a chat invitation. + * @param components A hashtable containing information required to + * join the chat as passed to #serv_got_chat_invite. + void (*reject_chat)(PurpleConnection *, GHashTable *components); + * Returns a chat name based on the information in components. Use + * #chat_info_defaults if you instead need to generate a hashtable + * @param components A hashtable containing information about the chat. + char *(*get_chat_name)(GHashTable *components); + * Invite a user to join a chat. + * @param id The id of the chat to invite the user to. + * @param message A message displayed to the user when the invitation + * @param who The name of the user to send the invation to. + void (*chat_invite)(PurpleConnection *, int id, + const char *message, const char *who); + * Called when the user requests leaving a chat. + * @param id The id of the chat to leave + void (*chat_leave)(PurpleConnection *, int id); + * Send a whisper to a user in a chat. + * @param id The id of the chat. + * @param who The name of the user to send the whisper to. + * @param message The message of the whisper. + void (*chat_whisper)(PurpleConnection *, int id, + const char *who, const char *message); + * Send a message to a chat. + * This PRPL function should return a positive value on success. + * If the message is too big to be sent, return -E2BIG. If + * the account is not connected, return -ENOTCONN. If the + * PRPL is unable to send the message for another reason, return + * some other negative value. You can use one of the valid + * errno values, or just big something. If the message should + * not be echoed to the conversation window, return 0. + * @param id The id of the chat to send the message to. + * @param message The message to send to the chat. + * @param flags A bitwise OR of #PurpleMessageFlags representing + * @return A positive number or 0 in case of succes, + * a negative error number in case of failure. + int (*chat_send)(PurpleConnection *, int id, const char *message, PurpleMessageFlags flags); + /** If implemented, this will be called regularly for this prpl's + * active connections. You'd want to do this if you need to repeatedly + * send some kind of keepalive packet to the server to avoid being + * disconnected. ("Regularly" is defined by + * <code>KEEPALIVE_INTERVAL</code> in <tt>libpurple/connection.c</tt>.) + void (*keepalive)(PurpleConnection *); + /** new user registration */ + void (*register_user)(PurpleAccount *); + * @deprecated Use #PurplePluginProtocolInfo.get_info instead. + void (*get_cb_info)(PurpleConnection *, int, const char *who); + * @deprecated Use #PurplePluginProtocolInfo.get_cb_real_name and + * #PurplePluginProtocolInfo.status_text instead. + void (*get_cb_away)(PurpleConnection *, int, const char *who); + /** save/store buddy's alias on server list/roster */ + void (*alias_buddy)(PurpleConnection *, const char *who, + /** change a buddy's group on a server list/roster */ + void (*group_buddy)(PurpleConnection *, const char *who, + const char *old_group, const char *new_group); + /** rename a group on a server list/roster */ + void (*rename_group)(PurpleConnection *, const char *old_name, + PurpleGroup *group, GList *moved_buddies); + void (*buddy_free)(PurpleBuddy *); + void (*convo_closed)(PurpleConnection *, const char *who); + * Convert the username @a who to its canonical form. (For example, + * AIM treats "fOo BaR" and "foobar" as the same user; this function + * should return the same normalized string for both of those.) + const char *(*normalize)(const PurpleAccount *, const char *who); + * Set the buddy icon for the given connection to @a img. The prpl + * does NOT own a reference to @a img; if it needs one, it must + * #purple_imgstore_ref(@a img) itself. + void (*set_buddy_icon)(PurpleConnection *, PurpleStoredImage *img); + void (*remove_group)(PurpleConnection *gc, PurpleGroup *group); + /** Gets the real name of a participant in a chat. For example, on + * XMPP this turns a chat room nick <tt>foo</tt> into + * <tt>room\@server/foo</tt> + * @param gc the connection on which the room is. + * @param id the ID of the chat room. + * @param who the nickname of the chat participant. + * @return the real name of the participant. This string must be + char *(*get_cb_real_name)(PurpleConnection *gc, int id, const char *who); + void (*set_chat_topic)(PurpleConnection *gc, int id, const char *topic); + PurpleChat *(*find_blist_chat)(PurpleAccount *account, const char *name); + /* room listing prpl callbacks */ + PurpleRoomlist *(*roomlist_get_list)(PurpleConnection *gc); + void (*roomlist_cancel)(PurpleRoomlist *list); + void (*roomlist_expand_category)(PurpleRoomlist *list, PurpleRoomlistRoom *category); + /* file transfer callbacks */ + gboolean (*can_receive_file)(PurpleConnection *, const char *who); + void (*send_file)(PurpleConnection *, const char *who, const char *filename); + PurpleXfer *(*new_xfer)(PurpleConnection *, const char *who); + /** Checks whether offline messages to @a buddy are supported. + * @return @c TRUE if @a buddy can be sent messages while they are + * offline, or @c FALSE if not. + gboolean (*offline_message)(const PurpleBuddy *buddy); + PurpleWhiteboardPrplOps *whiteboard_prpl_ops; + /** For use in plugins that may understand the underlying protocol */ + int (*send_raw)(PurpleConnection *gc, const char *buf, int len); + /* room list serialize */ + char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room); + /** Remove the user from the server. The account can either be + * connected or disconnected. After the removal is finished, the + * connection will stay open and has to be closed! + /* This is here rather than next to register_user for API compatibility + void (*unregister_user)(PurpleAccount *, PurpleAccountUnregistrationCb cb, void *user_data); + /* Attention API for sending & receiving zaps/nudges/buzzes etc. */ + gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type); + GList *(*get_attention_types)(PurpleAccount *acct); + * The size of the PurplePluginProtocolInfo. This should always be sizeof(PurplePluginProtocolInfo). + * This allows adding more functions to this struct without requiring a major version bump. + unsigned long struct_size; + * If more functions are added, they should accessed using the following syntax: + * if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, new_function)) + * prpl->new_function(...); + * if (prpl->new_function != NULL) + * prpl->new_function(...); + * The PURPLE_PROTOCOL_PLUGIN_HAS_FUNC macro can be used for the older member + * functions (e.g. login, send_im etc.) too. + /** This allows protocols to specify additional strings to be used for + * various purposes. The idea is to stuff a bunch of strings in this hash + * table instead of expanding the struct for every addition. This hash + * table is allocated every call and MUST be unrefed by the caller. + * @param account The account to specify. This can be NULL. + * @return The protocol's string hash table. The hash table should be + * destroyed by the caller when it's no longer needed. + GHashTable *(*get_account_text_table)(PurpleAccount *account); + * Initiate a media session with the given contact. + * @param account The account to initiate the media session on. + * @param who The remote user to initiate the session with. + * @param type The type of media session to initiate. + * @return TRUE if the call succeeded else FALSE. (Doesn't imply the media session or stream will be successfully created) + gboolean (*initiate_media)(PurpleAccount *account, const char *who, + PurpleMediaSessionType type); + * Checks to see if the given contact supports the given type of media session. + * @param account The account the contact is on. + * @param who The remote user to check for media capability with. + * @return The media caps the contact supports. + PurpleMediaCaps (*get_media_caps)(PurpleAccount *account, + * Returns an array of "PurpleMood"s, with the last one having + * "mood" set to @c NULL. + PurpleMood *(*get_moods)(PurpleAccount *account); + * Set the user's "friendly name" (or alias or nickname or + * whatever term you want to call it) on the server. The + * protocol plugin should call success_cb or failure_cb + * *asynchronously* (if it knows immediately that the set will fail, + * call one of the callbacks from an idle/0-second timeout) depending + * on if the nickname is set successfully. + * @param gc The connection for which to set an alias + * @param alias The new server-side alias/nickname for this account, + * or NULL to unset the alias/nickname (or return it to + * a protocol-specific "default"). + * @param success_cb Callback to be called if the public alias is set + * @param failure_cb Callback to be called if setting the public alias + * @see purple_account_set_public_alias + void (*set_public_alias)(PurpleConnection *gc, const char *alias, + PurpleSetPublicAliasSuccessCallback success_cb, + PurpleSetPublicAliasFailureCallback failure_cb); + * Retrieve the user's "friendly name" as set on the server. + * The protocol plugin should call success_cb or failure_cb + * *asynchronously* (even if it knows immediately that the get will fail, + * call one of the callbacks from an idle/0-second timeout) depending + * on if the nickname is retrieved. + * @param gc The connection for which to retireve the alias + * @param success_cb Callback to be called with the retrieved alias + * @param failure_cb Callback to be called if the prpl is unable to + * @see purple_account_get_public_alias + void (*get_public_alias)(PurpleConnection *gc, + PurpleGetPublicAliasSuccessCallback success_cb, + PurpleGetPublicAliasFailureCallback failure_cb); + * Add a buddy to a group on the server. + * This PRPL function may be called in situations in which the buddy is + * already in the specified group. If the protocol supports + * authorization and the user is not already authorized to see the + * status of \a buddy, \a add_buddy should request authorization. + * If authorization is required, then use the supplied invite message. + void (*add_buddy_with_invite)(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group, const char *message); + void (*add_buddies_with_invite)(PurpleConnection *pc, GList *buddies, GList *groups, const char *message); +#define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \ + (((G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < G_STRUCT_OFFSET(PurplePluginProtocolInfo, struct_size)) \ + || (G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < prpl->struct_size)) && \ +#define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \ + ((plugin)->info->type == PURPLE_PLUGIN_PROTOCOL) +#define PURPLE_PLUGIN_PROTOCOL_INFO(plugin) \ + ((PurplePluginProtocolInfo *)(plugin)->info->extra_info) +/**************************************************************************/ +/** @name Attention Type API */ +/**************************************************************************/ + * Creates a new #PurpleAttentionType object and sets its mandatory parameters. + * @param ulname A non-localized string that can be used by UIs in need of such + * non-localized strings. This should be the same as @a name, + * without localization. + * @param name A localized string that the UI may display for the event. This + * should be the same string as @a ulname, with localization. + * @param inc_desc A localized description shown when the event is received. + * @param out_desc A localized description shown when the event is sent. + * @return A pointer to the new object. +PurpleAttentionType *purple_attention_type_new(const char *ulname, const char *name, + const char *inc_desc, const char *out_desc); + * Sets the displayed name of the attention-demanding event. + * @param type The attention type. + * @param name The localized name that will be displayed by UIs. This should be + * the same string given as the unlocalized name, but with +void purple_attention_type_set_name(PurpleAttentionType *type, const char *name); + * Sets the description of the attention-demanding event shown in conversations + * when the event is received. + * @param type The attention type. + * @param desc The localized description for incoming events. +void purple_attention_type_set_incoming_desc(PurpleAttentionType *type, const char *desc); + * Sets the description of the attention-demanding event shown in conversations + * when the event is sent. + * @param type The attention type. + * @param desc The localized description for outgoing events. +void purple_attention_type_set_outgoing_desc(PurpleAttentionType *type, const char *desc); + * Sets the name of the icon to display for the attention event; this is optional. + * @param type The attention type. + * @param name The icon's name. + * @note Icons are optional for attention events. +void purple_attention_type_set_icon_name(PurpleAttentionType *type, const char *name); + * Sets the unlocalized name of the attention event; some UIs may need this, + * @param type The attention type. + * @param ulname The unlocalized name. This should be the same string given as + * the localized name, but without localization. +void purple_attention_type_set_unlocalized_name(PurpleAttentionType *type, const char *ulname); + * Get the attention type's name as displayed by the UI. + * @param type The attention type. +const char *purple_attention_type_get_name(const PurpleAttentionType *type); + * Get the attention type's description shown when the event is received. + * @param type The attention type. + * @return The description. +const char *purple_attention_type_get_incoming_desc(const PurpleAttentionType *type); + * Get the attention type's description shown when the event is sent. + * @param type The attention type. + * @return The description. +const char *purple_attention_type_get_outgoing_desc(const PurpleAttentionType *type); + * Get the attention type's icon name. + * @param type The attention type. + * @return The icon name or @c NULL if unset/empty. + * @note Icons are optional for attention events. +const char *purple_attention_type_get_icon_name(const PurpleAttentionType *type); + * Get the attention type's unlocalized name; this is useful for some UIs. + * @param type The attention type + * @return The unlocalized name. +const char *purple_attention_type_get_unlocalized_name(const PurpleAttentionType *type); +/**************************************************************************/ +/** @name Protocol Plugin API */ +/**************************************************************************/ + * Notifies Purple that our account's idle state and time have changed. + * This is meant to be called from protocol plugins. + * @param account The account. + * @param idle The user's idle state. + * @param idle_time The user's idle time. +void purple_prpl_got_account_idle(PurpleAccount *account, gboolean idle, + * Notifies Purple of our account's log-in time. + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param login_time The user's log-in time. +void purple_prpl_got_account_login_time(PurpleAccount *account, time_t login_time); + * Notifies Purple that our account's status has changed. + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param status_id The status ID. + * @param ... A NULL-terminated list of attribute IDs and values, + * beginning with the value for @a attr_id. +void purple_prpl_got_account_status(PurpleAccount *account, + const char *status_id, ...) G_GNUC_NULL_TERMINATED; + * Notifies Purple that our account's actions have changed. This is only + * called after the initial connection. Emits the account-actions-changed + * This is meant to be called from protocol plugins. + * @param account The account. + * @see account-actions-changed +void purple_prpl_got_account_actions(PurpleAccount *account); + * Notifies Purple that a buddy's idle state and time have changed. + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param name The name of the buddy. + * @param idle The user's idle state. + * @param idle_time The user's idle time. This is the time at + * which the user became idle, in seconds since + * the epoch. If the PRPL does not know this value + * then it should pass 0. +void purple_prpl_got_user_idle(PurpleAccount *account, const char *name, + gboolean idle, time_t idle_time); + * Notifies Purple of a buddy's log-in time. + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param name The name of the buddy. + * @param login_time The user's log-in time. +void purple_prpl_got_user_login_time(PurpleAccount *account, const char *name, + * Notifies Purple that a buddy's status has been activated. + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param name The name of the buddy. + * @param status_id The status ID. + * @param ... A NULL-terminated list of attribute IDs and values, + * beginning with the value for @a attr_id. +void purple_prpl_got_user_status(PurpleAccount *account, const char *name, + const char *status_id, ...) G_GNUC_NULL_TERMINATED; + * Notifies libpurple that a buddy's status has been deactivated + * This is meant to be called from protocol plugins. + * @param account The account the user is on. + * @param name The name of the buddy. + * @param status_id The status ID. +void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, + const char *status_id); + * Informs the server that our account's status changed. + * @param account The account the user is on. + * @param old_status The previous status. + * @param new_status The status that was activated, or deactivated + * (in the case of independent statuses). +void purple_prpl_change_account_status(PurpleAccount *account, + PurpleStatus *old_status, + PurpleStatus *new_status); + * Retrieves the list of stock status types from a prpl. + * @param account The account the user is on. + * @param presence The presence for which we're going to get statuses + * @return List of statuses +GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence); + * Send an attention request message. + * @param gc The connection to send the message on. + * @param who Whose attention to request. + * @param type_code An index into the prpl's attention_types list determining the type + * of the attention request command to send. 0 if prpl only defines one + * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). + * Note that you can't send arbitrary PurpleAttentionType's, because there is + * only a fixed set of attention commands. +void purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code); + * Process an incoming attention message. + * @param gc The connection that received the attention message. + * @param who Who requested your attention. + * @param type_code An index into the prpl's attention_types list determining the type + * of the attention request command to send. +void purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code); + * Process an incoming attention message in a chat. + * @param gc The connection that received the attention message. + * @param id The chat id. + * @param who Who requested your attention. + * @param type_code An index into the prpl's attention_types list determining the type + * of the attention request command to send. +void purple_prpl_got_attention_in_chat(PurpleConnection *gc, int id, const char *who, guint type_code); + * Determines if the contact supports the given media session type. + * @param account The account the user is on. + * @param who The name of the contact to check capabilities for. + * @return The media caps the contact supports. +PurpleMediaCaps purple_prpl_get_media_caps(PurpleAccount *account, + * Initiates a media session with the given contact. + * @param account The account the user is on. + * @param who The name of the contact to start a session with. + * @param type The type of media session to start. + * @return TRUE if the call succeeded else FALSE. (Doesn't imply the media session or stream will be successfully created) +gboolean purple_prpl_initiate_media(PurpleAccount *account, + PurpleMediaSessionType type); + * Signals that the prpl received capabilities for the given contact. + * This function is intended to be used only by prpls. + * @param account The account the user is on. + * @param who The name of the contact for which capabilities have been received. +void purple_prpl_got_media_caps(PurpleAccount *account, const char *who); +/**************************************************************************/ +/** @name Protocol Plugin Subsystem API */ +/**************************************************************************/ + * Finds a protocol plugin structure of the specified type. + * @param id The protocol plugin; +PurplePlugin *purple_find_prpl(const char *id); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/purple.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,105 @@
+ * @file purple.h Header files and defines + * This file contains all the necessary preprocessor directives to include + * libpurple's headers and other preprocessor directives required for plugins + * or UIs to build. Including this file eliminates the need to directly + * include any other libpurple files. + * @ingroup core libpurple + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_PURPLE_H_ +#define _PURPLE_PURPLE_H_ +#ifndef G_GNUC_NULL_TERMINATED +# define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) +# define G_GNUC_NULL_TERMINATED +#include <certificate.h> +#include <conversation.h> +#include <desktopitem.h> +#include <mediamanager.h> +#include <savedstatuses.h> +#include <sound-theme.h> +#include <sound-theme-loader.h> +#include <theme-loader.h> +#include <theme-manager.h> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/request.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1608 @@
+ * @file request.h Request API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_REQUEST_H_ +#define _PURPLE_REQUEST_H_ +#include <glib-object.h> +/** @copydoc _PurpleRequestField */ +typedef struct _PurpleRequestField PurpleRequestField; +#define PURPLE_DEFAULT_ACTION_NONE -1 + PURPLE_REQUEST_INPUT = 0, /**< Text input request. */ + PURPLE_REQUEST_CHOICE, /**< Multiple-choice request. */ + PURPLE_REQUEST_ACTION, /**< Action request. */ + PURPLE_REQUEST_FIELDS, /**< Multiple fields request. */ + PURPLE_REQUEST_FILE, /**< File open or save request. */ + PURPLE_REQUEST_FOLDER /**< Folder selection request. */ + PURPLE_REQUEST_FIELD_NONE, + PURPLE_REQUEST_FIELD_STRING, + PURPLE_REQUEST_FIELD_INTEGER, + PURPLE_REQUEST_FIELD_BOOLEAN, + PURPLE_REQUEST_FIELD_CHOICE, + PURPLE_REQUEST_FIELD_LIST, + PURPLE_REQUEST_FIELD_LABEL, + PURPLE_REQUEST_FIELD_IMAGE, + PURPLE_REQUEST_FIELD_ACCOUNT +} PurpleRequestFieldType; + * Multiple fields request data. + GList *required_fields; + * A group of fields with a title. + PurpleRequestFields *fields_list; +} PurpleRequestFieldGroup; +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_REQUEST_C_) +struct _PurpleRequestField + PurpleRequestFieldType type; + PurpleRequestFieldGroup *group; + gboolean default_value; + GHashTable *selected_table; + gboolean multiple_selection; + PurpleAccount *default_account; + PurpleAccount *account; + PurpleFilterAccountFunc filter_func; + * Request UI operations. + /** @see purple_request_input(). */ + void *(*request_input)(const char *title, const char *primary, + const char *secondary, const char *default_value, + gboolean multiline, gboolean masked, gchar *hint, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, + PurpleConversation *conv, void *user_data); + /** @see purple_request_choice_varg(). */ + void *(*request_choice)(const char *title, const char *primary, + const char *secondary, int default_value, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, + PurpleConversation *conv, void *user_data, + /** @see purple_request_action_varg(). */ + void *(*request_action)(const char *title, const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, + PurpleConversation *conv, void *user_data, + size_t action_count, va_list actions); + /** @see purple_request_fields(). */ + void *(*request_fields)(const char *title, const char *primary, + const char *secondary, PurpleRequestFields *fields, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, + PurpleConversation *conv, void *user_data); + /** @see purple_request_file(). */ + void *(*request_file)(const char *title, const char *filename, + gboolean savedialog, GCallback ok_cb, + GCallback cancel_cb, PurpleAccount *account, + const char *who, PurpleConversation *conv, + void (*close_request)(PurpleRequestType type, void *ui_handle); + /** @see purple_request_folder(). */ + void *(*request_folder)(const char *title, const char *dirname, + GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, + PurpleConversation *conv, void *user_data); + /** @see purple_request_action_with_icon_varg(). */ + void *(*request_action_with_icon)(const char *title, const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, + PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, + size_t action_count, va_list actions); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); +typedef void (*PurpleRequestInputCb)(void *, const char *); +/** The type of callbacks passed to purple_request_action(). The first + * argument is the @a user_data parameter; the second is the index in the list + * of actions of the one chosen. +typedef void (*PurpleRequestActionCb)(void *, int); +typedef void (*PurpleRequestChoiceCb)(void *, int); +typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields); +typedef void (*PurpleRequestFileCb)(void *, const char *filename); +/**************************************************************************/ +/** @name Field List API */ +/**************************************************************************/ + * Creates a list of fields to pass to purple_request_fields(). + * @return A PurpleRequestFields structure. +PurpleRequestFields *purple_request_fields_new(void); + * Destroys a list of fields. + * @param fields The list of fields to destroy. +void purple_request_fields_destroy(PurpleRequestFields *fields); + * Adds a group of fields to the list. + * @param fields The fields list. + * @param group The group to add. +void purple_request_fields_add_group(PurpleRequestFields *fields, + PurpleRequestFieldGroup *group); + * Returns a list of all groups in a field list. + * @param fields The fields list. + * @constreturn A list of groups. +GList *purple_request_fields_get_groups(const PurpleRequestFields *fields); + * Returns whether or not the field with the specified ID exists. + * @param fields The fields list. + * @param id The ID of the field. + * @return TRUE if the field exists, or FALSE. +gboolean purple_request_fields_exists(const PurpleRequestFields *fields, + * Returns a list of all required fields. + * @param fields The fields list. + * @constreturn The list of required fields. +GList *purple_request_fields_get_required(const PurpleRequestFields *fields); + * Returns whether or not a field with the specified ID is required. + * @param fields The fields list. + * @param id The field ID. + * @return TRUE if the specified field is required, or FALSE. +gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields, + * Returns whether or not all required fields have values. + * @param fields The fields list. + * @return TRUE if all required fields have values, or FALSE. +gboolean purple_request_fields_all_required_filled( + const PurpleRequestFields *fields); + * Return the field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The field, if found. +PurpleRequestField *purple_request_fields_get_field( + const PurpleRequestFields *fields, const char *id); + * Returns the string value of a field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The string value, if found, or @c NULL otherwise. +const char *purple_request_fields_get_string(const PurpleRequestFields *fields, + * Returns the integer value of a field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The integer value, if found, or 0 otherwise. +int purple_request_fields_get_integer(const PurpleRequestFields *fields, + * Returns the boolean value of a field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The boolean value, if found, or @c FALSE otherwise. +gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields, + * Returns the choice index of a field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The choice index, if found, or -1 otherwise. +int purple_request_fields_get_choice(const PurpleRequestFields *fields, + * Returns the account of a field with the specified ID. + * @param fields The fields list. + * @param id The ID of the field. + * @return The account value, if found, or NULL otherwise. +PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields, +/**************************************************************************/ +/** @name Fields Group API */ +/**************************************************************************/ + * Creates a fields group with an optional title. + * @param title The optional title to give the group. + * @return A new fields group +PurpleRequestFieldGroup *purple_request_field_group_new(const char *title); + * Destroys a fields group. + * @param group The group to destroy. +void purple_request_field_group_destroy(PurpleRequestFieldGroup *group); + * Adds a field to the group. + * @param group The group to add the field to. + * @param field The field to add to the group. +void purple_request_field_group_add_field(PurpleRequestFieldGroup *group, + PurpleRequestField *field); + * Returns the title of a fields group. + * @param group The group. + * @return The title, if set. +const char *purple_request_field_group_get_title( + const PurpleRequestFieldGroup *group); + * Returns a list of all fields in a group. + * @param group The group. + * @constreturn The list of fields in the group. +GList *purple_request_field_group_get_fields( + const PurpleRequestFieldGroup *group); +/**************************************************************************/ +/**************************************************************************/ + * Creates a field of the specified type. + * @param id The field ID. + * @param text The text label of the field. + * @param type The type of field. + * @return The new field. +PurpleRequestField *purple_request_field_new(const char *id, const char *text, + PurpleRequestFieldType type); + * @param field The field to destroy. +void purple_request_field_destroy(PurpleRequestField *field); + * Sets the label text of a field. + * @param field The field. + * @param label The text label. +void purple_request_field_set_label(PurpleRequestField *field, const char *label); + * Sets whether or not a field is visible. + * @param field The field. + * @param visible TRUE if visible, or FALSE if not. +void purple_request_field_set_visible(PurpleRequestField *field, gboolean visible); + * Sets the type hint for the field. + * This is optionally used by the UIs to provide such features as + * auto-completion for type hints like "account" and "screenname". + * @param field The field. + * @param type_hint The type hint. +void purple_request_field_set_type_hint(PurpleRequestField *field, + const char *type_hint); + * Sets whether or not a field is required. + * @param field The field. + * @param required TRUE if required, or FALSE. +void purple_request_field_set_required(PurpleRequestField *field, + * Returns the type of a field. + * @param field The field. + * @return The field's type. +PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field); + * Returns the group for the field. + * @param field The field. +PurpleRequestFieldGroup *purple_request_field_get_group(const PurpleRequestField *field); + * Returns the ID of a field. + * @param field The field. +const char *purple_request_field_get_id(const PurpleRequestField *field); + * Returns the label text of a field. + * @param field The field. + * @return The label text. +const char *purple_request_field_get_label(const PurpleRequestField *field); + * Returns whether or not a field is visible. + * @param field The field. + * @return TRUE if the field is visible. FALSE otherwise. +gboolean purple_request_field_is_visible(const PurpleRequestField *field); + * Returns the field's type hint. + * @param field The field. + * @return The field's type hint. +const char *purple_request_field_get_type_hint(const PurpleRequestField *field); + * Returns whether or not a field is required. + * @param field The field. + * @return TRUE if the field is required, or FALSE. +gboolean purple_request_field_is_required(const PurpleRequestField *field); + * Returns the ui_data for a field. + * @param field The field. +gpointer purple_request_field_get_ui_data(const PurpleRequestField *field); + * Sets the ui_data for a field. + * @param field The field. + * @param ui_data The UI data. +void purple_request_field_set_ui_data(PurpleRequestField *field, +/**************************************************************************/ +/** @name String Field API */ +/**************************************************************************/ + * Creates a string request field. + * @param id The field ID. + * @param text The text label of the field. + * @param default_value The optional default value. + * @param multiline Whether or not this should be a multiline string. + * @return The new field. +PurpleRequestField *purple_request_field_string_new(const char *id, + const char *default_value, + * Sets the default value in a string field. + * @param field The field. + * @param default_value The default value. +void purple_request_field_string_set_default_value(PurpleRequestField *field, + const char *default_value); + * Sets the value in a string field. + * @param field The field. + * @param value The value. +void purple_request_field_string_set_value(PurpleRequestField *field, + * Sets whether or not a string field is masked + * (commonly used for password fields). + * @param field The field. + * @param masked The masked value. +void purple_request_field_string_set_masked(PurpleRequestField *field, + * Sets whether or not a string field is editable. + * @param field The field. + * @param editable The editable value. +void purple_request_field_string_set_editable(PurpleRequestField *field, + * Returns the default value in a string field. + * @param field The field. + * @return The default value. +const char *purple_request_field_string_get_default_value( + const PurpleRequestField *field); + * Returns the user-entered value in a string field. + * @param field The field. +const char *purple_request_field_string_get_value(const PurpleRequestField *field); + * Returns whether or not a string field is multi-line. + * @param field The field. + * @return @c TRUE if the field is mulit-line, or @c FALSE otherwise. +gboolean purple_request_field_string_is_multiline(const PurpleRequestField *field); + * Returns whether or not a string field is masked. + * @param field The field. + * @return @c TRUE if the field is masked, or @c FALSE otherwise. +gboolean purple_request_field_string_is_masked(const PurpleRequestField *field); + * Returns whether or not a string field is editable. + * @param field The field. + * @return @c TRUE if the field is editable, or @c FALSE otherwise. +gboolean purple_request_field_string_is_editable(const PurpleRequestField *field); +/**************************************************************************/ +/** @name Integer Field API */ +/**************************************************************************/ + * Creates an integer field. + * @param id The field ID. + * @param text The text label of the field. + * @param default_value The default value. + * @return The new field. +PurpleRequestField *purple_request_field_int_new(const char *id, + * Sets the default value in an integer field. + * @param field The field. + * @param default_value The default value. +void purple_request_field_int_set_default_value(PurpleRequestField *field, + * Sets the value in an integer field. + * @param field The field. + * @param value The value. +void purple_request_field_int_set_value(PurpleRequestField *field, int value); + * Returns the default value in an integer field. + * @param field The field. + * @return The default value. +int purple_request_field_int_get_default_value(const PurpleRequestField *field); + * Returns the user-entered value in an integer field. + * @param field The field. +int purple_request_field_int_get_value(const PurpleRequestField *field); +/**************************************************************************/ +/** @name Boolean Field API */ +/**************************************************************************/ + * Creates a boolean field. + * This is often represented as a checkbox. + * @param id The field ID. + * @param text The text label of the field. + * @param default_value The default value. + * @return The new field. +PurpleRequestField *purple_request_field_bool_new(const char *id, + gboolean default_value); + * Sets the default value in an boolean field. + * @param field The field. + * @param default_value The default value. +void purple_request_field_bool_set_default_value(PurpleRequestField *field, + gboolean default_value); + * Sets the value in an boolean field. + * @param field The field. + * @param value The value. +void purple_request_field_bool_set_value(PurpleRequestField *field, + * Returns the default value in an boolean field. + * @param field The field. + * @return The default value. +gboolean purple_request_field_bool_get_default_value( + const PurpleRequestField *field); + * Returns the user-entered value in an boolean field. + * @param field The field. +gboolean purple_request_field_bool_get_value(const PurpleRequestField *field); +/**************************************************************************/ +/** @name Choice Field API */ +/**************************************************************************/ + * Creates a multiple choice field. + * This is often represented as a group of radio buttons. + * @param id The field ID. + * @param text The optional label of the field. + * @param default_value The default choice. + * @return The new field. +PurpleRequestField *purple_request_field_choice_new(const char *id, + * Adds a choice to a multiple choice field. + * @param field The choice field. + * @param label The choice label. +void purple_request_field_choice_add(PurpleRequestField *field, + * Sets the default value in an choice field. + * @param field The field. + * @param default_value The default value. +void purple_request_field_choice_set_default_value(PurpleRequestField *field, + * Sets the value in an choice field. + * @param field The field. + * @param value The value. +void purple_request_field_choice_set_value(PurpleRequestField *field, int value); + * Returns the default value in an choice field. + * @param field The field. + * @return The default value. +int purple_request_field_choice_get_default_value(const PurpleRequestField *field); + * Returns the user-entered value in an choice field. + * @param field The field. +int purple_request_field_choice_get_value(const PurpleRequestField *field); + * Returns a list of labels in a choice field. + * @param field The field. + * @constreturn The list of labels. +GList *purple_request_field_choice_get_labels(const PurpleRequestField *field); +/**************************************************************************/ +/** @name List Field API */ +/**************************************************************************/ + * Creates a multiple list item field. + * @param id The field ID. + * @param text The optional label of the field. + * @return The new field. +PurpleRequestField *purple_request_field_list_new(const char *id, const char *text); + * Sets whether or not a list field allows multiple selection. + * @param field The list field. + * @param multi_select TRUE if multiple selection is enabled, +void purple_request_field_list_set_multi_select(PurpleRequestField *field, + gboolean multi_select); + * Returns whether or not a list field allows multiple selection. + * @param field The list field. + * @return TRUE if multiple selection is enabled, or FALSE otherwise. +gboolean purple_request_field_list_get_multi_select( + const PurpleRequestField *field); + * Returns the data for a particular item. + * @param field The list field. + * @param text The item text. + * @return The data associated with the item. +void *purple_request_field_list_get_data(const PurpleRequestField *field, + * Adds an item to a list field. + * @param field The list field. + * @param item The list item. + * @param data The associated data. + * @deprecated Use purple_request_field_list_add_icon() instead. +void purple_request_field_list_add(PurpleRequestField *field, + const char *item, void *data); + * Adds an item to a list field. + * @param field The list field. + * @param item The list item. + * @param icon_path The path to icon file, or @c NULL for no icon. + * @param data The associated data. +void purple_request_field_list_add_icon(PurpleRequestField *field, + const char *item, const char* icon_path, void* data); + * Adds a selected item to the list field. + * @param field The field. + * @param item The item to add. +void purple_request_field_list_add_selected(PurpleRequestField *field, + * Clears the list of selected items in a list field. + * @param field The field. +void purple_request_field_list_clear_selected(PurpleRequestField *field); + * Sets a list of selected items in a list field. + * @param field The field. + * @param items The list of selected items, which is not modified or freed. +void purple_request_field_list_set_selected(PurpleRequestField *field, + * Returns whether or not a particular item is selected in a list field. + * @param field The field. + * @param item The item. + * @return TRUE if the item is selected. FALSE otherwise. +gboolean purple_request_field_list_is_selected(const PurpleRequestField *field, + * Returns a list of selected items in a list field. + * To retrieve the data for each item, use + * purple_request_field_list_get_data(). + * @param field The field. + * @constreturn The list of selected items. +GList *purple_request_field_list_get_selected( + const PurpleRequestField *field); + * Returns a list of items in a list field. + * @param field The field. + * @constreturn The list of items. +GList *purple_request_field_list_get_items(const PurpleRequestField *field); + * Returns a list of icons in a list field. + * The icons will correspond with the items, in order. + * @param field The field. + * @constreturn The list of icons or @c NULL (i.e. the empty GList) if no +GList *purple_request_field_list_get_icons(const PurpleRequestField *field); +/**************************************************************************/ +/** @name Label Field API */ +/**************************************************************************/ + * Creates a label field. + * @param id The field ID. + * @param text The label of the field. + * @return The new field. +PurpleRequestField *purple_request_field_label_new(const char *id, +/**************************************************************************/ +/** @name Image Field API */ +/**************************************************************************/ + * Creates an image field. + * @param id The field ID. + * @param text The label of the field. + * @param buf The image data. + * @param size The size of the data in @a buffer. + * @return The new field. +PurpleRequestField *purple_request_field_image_new(const char *id, const char *text, + const char *buf, gsize size); + * Sets the scale factors of an image field. + * @param field The image field. + * @param x The x scale factor. + * @param y The y scale factor. +void purple_request_field_image_set_scale(PurpleRequestField *field, unsigned int x, unsigned int y); + * Returns pointer to the image. + * @param field The image field. + * @return Pointer to the image. +const char *purple_request_field_image_get_buffer(PurpleRequestField *field); + * Returns size (in bytes) of the image. + * @param field The image field. + * @return Size of the image. +gsize purple_request_field_image_get_size(PurpleRequestField *field); + * Returns X scale coefficient of the image. + * @param field The image field. + * @return X scale coefficient of the image. +unsigned int purple_request_field_image_get_scale_x(PurpleRequestField *field); + * Returns Y scale coefficient of the image. + * @param field The image field. + * @return Y scale coefficient of the image. +unsigned int purple_request_field_image_get_scale_y(PurpleRequestField *field); +/**************************************************************************/ +/** @name Account Field API */ +/**************************************************************************/ + * Creates an account field. + * By default, this field will not show offline accounts. + * @param id The field ID. + * @param text The text label of the field. + * @param account The optional default account. + * @return The new field. +PurpleRequestField *purple_request_field_account_new(const char *id, + PurpleAccount *account); + * Sets the default account on an account field. + * @param field The account field. + * @param default_value The default account. +void purple_request_field_account_set_default_value(PurpleRequestField *field, + PurpleAccount *default_value); + * Sets the account in an account field. + * @param field The account field. + * @param value The account. +void purple_request_field_account_set_value(PurpleRequestField *field, + * Sets whether or not to show all accounts in an account field. + * If TRUE, all accounts, online or offline, will be shown. If FALSE, + * only online accounts will be shown. + * @param field The account field. + * @param show_all Whether or not to show all accounts. +void purple_request_field_account_set_show_all(PurpleRequestField *field, + * Sets the account filter function in an account field. + * This function will determine which accounts get displayed and which + * @param field The account field. + * @param filter_func The account filter function. +void purple_request_field_account_set_filter(PurpleRequestField *field, + PurpleFilterAccountFunc filter_func); + * Returns the default account in an account field. + * @param field The field. + * @return The default account. +PurpleAccount *purple_request_field_account_get_default_value( + const PurpleRequestField *field); + * Returns the user-entered account in an account field. + * @param field The field. + * @return The user-entered account. +PurpleAccount *purple_request_field_account_get_value( + const PurpleRequestField *field); + * Returns whether or not to show all accounts in an account field. + * If TRUE, all accounts, online or offline, will be shown. If FALSE, + * only online accounts will be shown. + * @param field The account field. + * @return Whether or not to show all accounts. +gboolean purple_request_field_account_get_show_all( + const PurpleRequestField *field); + * Returns the account filter function in an account field. + * This function will determine which accounts get displayed and which + * @param field The account field. + * @return The account filter function. +PurpleFilterAccountFunc purple_request_field_account_get_filter( + const PurpleRequestField *field); +/**************************************************************************/ +/** @name Request API */ +/**************************************************************************/ + * Prompts the user for text input. + * @param handle The plugin or connection handle. For some + * things this is <em>extremely</em> important. The + * handle is used to programmatically close the request + * dialog when it is no longer needed. For PRPLs this + * is often a pointer to the #PurpleConnection + * instance. For plugins this should be a similar, + * unique memory location. This value is important + * because it allows a request to be closed with + * purple_request_close_with_handle() when, for + * example, you sign offline. If the request is + * <em>not</em> closed it is <strong>very</strong> + * likely to cause a crash whenever the callback + * handler functions are triggered. + * @param title The title of the message, or @c NULL if it should have + * @param primary The main point of the message, or @c NULL if you're + * @param secondary Secondary information, or @c NULL if there is none. + * @param default_value The default value. + * @param multiline @c TRUE if the inputted text can span multiple lines. + * @param masked @c TRUE if the inputted text should be masked in some + * way (such as by displaying characters as stars). This + * might be because the input is some kind of password. + * @param hint Optionally suggest how the input box should appear. + * Use "html", for example, to allow the user to enter + * @param ok_text The text for the @c OK button, which may not be @c NULL. + * @param ok_cb The callback for the @c OK button, which may not be @c + * @param cancel_text The text for the @c Cancel button, which may not be @c + * @param cancel_cb The callback for the @c Cancel button, which may be + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is. + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_request_input(void *handle, const char *title, const char *primary, + const char *secondary, const char *default_value, gboolean multiline, + gboolean masked, gchar *hint, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + * Prompts the user for multiple-choice input. + * @param handle The plugin or connection handle. For some things this + * is <em>extremely</em> important. See the comments on + * purple_request_input(). + * @param title The title of the message, or @c NULL if it should have + * @param primary The main point of the message, or @c NULL if you're + * @param secondary Secondary information, or @c NULL if there is none. + * @param default_value The default choice; this should be one of the values + * listed in the varargs. + * @param ok_text The text for the @c OK button, which may not be @c NULL. + * @param ok_cb The callback for the @c OK button, which may not be @c + * @param cancel_text The text for the @c Cancel button, which may not be @c + * @param cancel_cb The callback for the @c Cancel button, or @c NULL to + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is. + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @param ... The choices, which should be pairs of <tt>char *</tt> + * descriptions and <tt>int</tt> values, terminated with a + * @return A UI-specific handle. +void *purple_request_choice(void *handle, const char *title, const char *primary, + const char *secondary, int default_value, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, ...) G_GNUC_NULL_TERMINATED; + * <tt>va_list</tt> version of purple_request_choice(); see its documentation. +void *purple_request_choice_varg(void *handle, const char *title, + const char *primary, const char *secondary, int default_value, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, va_list choices); + * Prompts the user for an action. + * This is often represented as a dialog with a button for each action. + * @param handle The plugin or connection handle. For some things this + * is <em>extremely</em> important. See the comments on + * purple_request_input(). + * @param title The title of the message, or @c NULL if it should have + * @param primary The main point of the message, or @c NULL if you're + * @param secondary Secondary information, or @c NULL if there is none. + * @param default_action The default action, zero-indexed; if the third action + * supplied should be the default, supply <tt>2</tt>. + * The should be the action that users are most likely + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is. + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @param action_count The number of actions. + * @param ... A list of actions. These are pairs of + * arguments. The first of each pair is the + * <tt>char *</tt> label that appears on the button. It + * should have an underscore before the letter you want + * to use as the accelerator key for the button. The + * second of each pair is the #PurpleRequestActionCb + * function to use when the button is clicked. + * @return A UI-specific handle. +void *purple_request_action(void *handle, const char *title, const char *primary, + const char *secondary, int default_action, PurpleAccount *account, + const char *who, PurpleConversation *conv, void *user_data, + size_t action_count, ...); + * <tt>va_list</tt> version of purple_request_action(); see its documentation. +void *purple_request_action_varg(void *handle, const char *title, + const char *primary, const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, size_t action_count, va_list actions); + * Version of purple_request_action() supplying an image for the UI to + * optionally display as an icon in the dialog; see its documentation +void *purple_request_action_with_icon(void *handle, const char *title, + const char *primary, const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, void *user_data, + size_t action_count, ...); + * <tt>va_list</tt> version of purple_request_action_with_icon(); + * see its documentation. +void *purple_request_action_with_icon_varg(void *handle, const char *title, + const char *primary, const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + gconstpointer icon_data, gsize icon_size, + void *user_data, size_t action_count, va_list actions); + * Displays groups of fields for the user to fill in. + * @param handle The plugin or connection handle. For some things this + * is <em>extremely</em> important. See the comments on + * purple_request_input(). + * @param title The title of the message, or @c NULL if it should have + * @param primary The main point of the message, or @c NULL if you're + * @param secondary Secondary information, or @c NULL if there is none. + * @param fields The list of fields. + * @param ok_text The text for the @c OK button, which may not be @c NULL. + * @param ok_cb The callback for the @c OK button, which may not be @c + * @param cancel_text The text for the @c Cancel button, which may not be @c + * @param cancel_cb The callback for the @c Cancel button, which may be + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_request_fields(void *handle, const char *title, const char *primary, + const char *secondary, PurpleRequestFields *fields, + const char *ok_text, GCallback ok_cb, + const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + * @param type The request type. + * @param uihandle The request UI handle. +void purple_request_close(PurpleRequestType type, void *uihandle); + * Closes all requests registered with the specified handle. + * @param handle The handle, as supplied as the @a handle parameter to one of the + * <tt>purple_request_*</tt> functions. + * @see purple_request_input(). +void purple_request_close_with_handle(void *handle); + * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. +#define purple_request_yes_no(handle, title, primary, secondary, \ + default_action, account, who, conv, \ + user_data, yes_cb, no_cb) \ + purple_request_action((handle), (title), (primary), (secondary), \ + (default_action), account, who, conv, (user_data), 2, \ + _("_Yes"), (yes_cb), _("_No"), (no_cb)) + * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#define purple_request_ok_cancel(handle, title, primary, secondary, \ + default_action, account, who, conv, \ + user_data, ok_cb, cancel_cb) \ + purple_request_action((handle), (title), (primary), (secondary), \ + (default_action), account, who, conv, (user_data), 2, \ + _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb)) + * A wrapper for purple_request_action() that uses Accept and Cancel buttons. +#define purple_request_accept_cancel(handle, title, primary, secondary, \ + default_action, account, who, conv, \ + user_data, accept_cb, cancel_cb) \ + purple_request_action((handle), (title), (primary), (secondary), \ + (default_action), account, who, conv, (user_data), 2, \ + _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb)) + * A wrapper for purple_request_action_with_icon() that uses Accept and Cancel +#define purple_request_accept_cancel_with_icon(handle, title, primary, secondary, \ + default_action, account, who, conv, \ + icon_data, icon_size, \ + user_data, accept_cb, cancel_cb) \ + purple_request_action_with_icon((handle), (title), (primary), (secondary), \ + (default_action), account, who, conv, icon_data, icon_size, \ + _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb)) + * Displays a file selector request dialog. Returns the selected filename to + * the callback. Can be used for either opening a file or saving a file. + * @param handle The plugin or connection handle. For some things this + * is <em>extremely</em> important. See the comments on + * purple_request_input(). + * @param title The title of the message, or @c NULL if it should have + * @param filename The default filename (may be @c NULL) + * @param savedialog True if this dialog is being used to save a file. + * False if it is being used to open a file. + * @param ok_cb The callback for the @c OK button. + * @param cancel_cb The callback for the @c Cancel button, which may be @c NULL. + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_request_file(void *handle, const char *title, const char *filename, + gboolean savedialog, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + * Displays a folder select dialog. Returns the selected filename to + * @param handle The plugin or connection handle. For some things this + * is <em>extremely</em> important. See the comments on + * purple_request_input(). + * @param title The title of the message, or @c NULL if it should have + * @param dirname The default directory name (may be @c NULL) + * @param ok_cb The callback for the @c OK button. + * @param cancel_cb The callback for the @c Cancel button, which may be @c NULL. + * @param account The #PurpleAccount associated with this request, or @c + * @param who The username of the buddy associated with this request, + * or @c NULL if none is + * @param conv The #PurpleConversation associated with this request, or + * @param user_data The data to pass to the callback. + * @return A UI-specific handle. +void *purple_request_folder(void *handle, const char *title, const char *dirname, + GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used when displaying a + * @param ops The UI operations structure. +void purple_request_set_ui_ops(PurpleRequestUiOps *ops); + * Returns the UI operations structure to be used when displaying a + * @return The UI operations structure. +PurpleRequestUiOps *purple_request_get_ui_ops(void); +#endif /* _PURPLE_REQUEST_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/roomlist.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,398 @@
+ * @file roomlist.h Room List API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_ROOMLIST_H_ +#define _PURPLE_ROOMLIST_H_ +typedef struct _PurpleRoomlist PurpleRoomlist; +typedef struct _PurpleRoomlistRoom PurpleRoomlistRoom; +typedef struct _PurpleRoomlistField PurpleRoomlistField; +/** @copydoc _PurpleRoomlistUiOps */ +typedef struct _PurpleRoomlistUiOps PurpleRoomlistUiOps; + * These are ORable flags. + PURPLE_ROOMLIST_ROOMTYPE_CATEGORY = 0x01, /**< It's a category, but not a room you can join. */ + PURPLE_ROOMLIST_ROOMTYPE_ROOM = 0x02 /**< It's a room, like the kind you can join. */ +} PurpleRoomlistRoomType; + PURPLE_ROOMLIST_FIELD_BOOL, + PURPLE_ROOMLIST_FIELD_INT, + PURPLE_ROOMLIST_FIELD_STRING /**< We do a g_strdup on the passed value if it's this type. */ +} PurpleRoomlistFieldType; +/**************************************************************************/ +/**************************************************************************/ + * Represents a list of rooms for a given connection on a given protocol. +struct _PurpleRoomlist { + PurpleAccount *account; /**< The account this list belongs to. */ + GList *fields; /**< The fields. */ + GList *rooms; /**< The list of rooms. */ + gboolean in_progress; /**< The listing is in progress. */ + gpointer ui_data; /**< UI private data. */ + gpointer proto_data; /** Prpl private data. */ + guint ref; /**< The reference count. */ +struct _PurpleRoomlistRoom { + PurpleRoomlistRoomType type; /**< The type of room. */ + gchar *name; /**< The name of the room. */ + GList *fields; /**< Other fields. */ + PurpleRoomlistRoom *parent; /**< The parent room, or NULL. */ + gboolean expanded_once; /**< A flag the UI uses to avoid multiple expand prpl cbs. */ + * A field a room might have. +struct _PurpleRoomlistField { + PurpleRoomlistFieldType type; /**< The type of field. */ + gchar *label; /**< The i18n user displayed name of the field. */ + gchar *name; /**< The internal name of the field. */ + gboolean hidden; /**< Hidden? */ + * The room list ops to be filled out by the UI. +struct _PurpleRoomlistUiOps { + void (*show_with_account)(PurpleAccount *account); /**< Force the ui to pop up a dialog and get the list */ + void (*create)(PurpleRoomlist *list); /**< A new list was created. */ + void (*set_fields)(PurpleRoomlist *list, GList *fields); /**< Sets the columns. */ + void (*add_room)(PurpleRoomlist *list, PurpleRoomlistRoom *room); /**< Add a room to the list. */ + void (*in_progress)(PurpleRoomlist *list, gboolean flag); /**< Are we fetching stuff still? */ + void (*destroy)(PurpleRoomlist *list); /**< We're destroying list. */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/** @name Room List API */ +/**************************************************************************/ + * This is used to get the room list on an account, asking the UI + * to pop up a dialog with the specified account already selected, + * and pretend the user clicked the get list button. + * While we're pretending, predend I didn't say anything about dialogs + * or buttons, since this is the core. + * @param account The account to get the list on. +void purple_roomlist_show_with_account(PurpleAccount *account); + * Returns a newly created room list object. + * It has an initial reference count of 1. + * @param account The account that's listing rooms. + * @return The new room list handle. +PurpleRoomlist *purple_roomlist_new(PurpleAccount *account); + * Increases the reference count on the room list. + * @param list The object to ref. +void purple_roomlist_ref(PurpleRoomlist *list); + * Decreases the reference count on the room list. + * The room list will be destroyed when this reaches 0. + * @param list The room list object to unref and possibly +void purple_roomlist_unref(PurpleRoomlist *list); + * Set the different field types and their names for this protocol. + * This must be called before purple_roomlist_room_add(). + * @param list The room list. + * @param fields A GList of PurpleRoomlistField's. UI's are encouraged + * to default to displaying them in the order given. +void purple_roomlist_set_fields(PurpleRoomlist *list, GList *fields); + * Set the "in progress" state of the room list. + * The UI is encouraged to somehow hint to the user + * whether or not we're busy downloading a room list or not. + * @param list The room list. + * @param in_progress We're downloading it, or we're not. +void purple_roomlist_set_in_progress(PurpleRoomlist *list, gboolean in_progress); + * Gets the "in progress" state of the room list. + * The UI is encouraged to somehow hint to the user + * whether or not we're busy downloading a room list or not. + * @param list The room list. + * @return True if we're downloading it, or false if we're not. +gboolean purple_roomlist_get_in_progress(PurpleRoomlist *list); + * Adds a room to the list of them. + * @param list The room list. + * @param room The room to add to the list. The GList of fields must be in the same + order as was given in purple_roomlist_set_fields(). +void purple_roomlist_room_add(PurpleRoomlist *list, PurpleRoomlistRoom *room); + * Returns a PurpleRoomlist structure from the prpl, and + * instructs the prpl to start fetching the list. + * @param gc The PurpleConnection to have get a list. + * @return A PurpleRoomlist* or @c NULL if the protocol + * doesn't support that. +PurpleRoomlist *purple_roomlist_get_list(PurpleConnection *gc); + * Tells the prpl to stop fetching the list. + * If this is possible and done, the prpl will + * call set_in_progress with @c FALSE and possibly + * unref the list if it took a reference. + * @param list The room list to cancel a get_list on. +void purple_roomlist_cancel_get_list(PurpleRoomlist *list); + * Tells the prpl that a category was expanded. + * On some protocols, the rooms in the category + * won't be fetched until this is called. + * @param list The room list. + * @param category The category that was expanded. The expression + * (category->type & PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) +void purple_roomlist_expand_category(PurpleRoomlist *list, PurpleRoomlistRoom *category); + * Get the list of fields for a roomlist. + * @param roomlist The roomlist, which must not be @c NULL. + * @constreturn A list of fields +GList * purple_roomlist_get_fields(PurpleRoomlist *roomlist); +/**************************************************************************/ +/**************************************************************************/ + * Creates a new room, to be added to the list. + * @param type The type of room. + * @param name The name of the room. + * @param parent The room's parent, if any. +PurpleRoomlistRoom *purple_roomlist_room_new(PurpleRoomlistRoomType type, const gchar *name, + PurpleRoomlistRoom *parent); + * Adds a field to a room. + * @param list The room list the room belongs to. + * @param room The room. + * @param field The field to append. Strings get g_strdup'd internally. +void purple_roomlist_room_add_field(PurpleRoomlist *list, PurpleRoomlistRoom *room, gconstpointer field); + * Join a room, given a PurpleRoomlistRoom and it's associated PurpleRoomlist. + * @param list The room list the room belongs to. + * @param room The room to join. +void purple_roomlist_room_join(PurpleRoomlist *list, PurpleRoomlistRoom *room); + * Get the type of a room. + * @param room The room, which must not be @c NULL. + * @return The type of the room. +PurpleRoomlistRoomType purple_roomlist_room_get_type(PurpleRoomlistRoom *room); + * Get the name of a room. + * @param room The room, which must not be @c NULL. + * @return The name of the room. +const char * purple_roomlist_room_get_name(PurpleRoomlistRoom *room); + * Get the parent of a room. + * @param room The room, which must not be @c NULL. + * @return The parent of the room, which can be @c NULL. +PurpleRoomlistRoom * purple_roomlist_room_get_parent(PurpleRoomlistRoom *room); + * Get the list of fields for a room. + * @param room The room, which must not be @c NULL. + * @constreturn A list of fields +GList * purple_roomlist_room_get_fields(PurpleRoomlistRoom *room); +/**************************************************************************/ +/** @name Room Field API */ +/**************************************************************************/ + * @param type The type of the field. + * @param label The i18n'ed, user displayable name. + * @param name The internal name of the field. + * @param hidden Hide the field. + * @return A new PurpleRoomlistField, ready to be added to a GList and passed to + * purple_roomlist_set_fields(). +PurpleRoomlistField *purple_roomlist_field_new(PurpleRoomlistFieldType type, + const gchar *label, const gchar *name, + * Get the type of a field. + * @param field A PurpleRoomlistField, which must not be @c NULL. + * @return The type of the field. +PurpleRoomlistFieldType purple_roomlist_field_get_type(PurpleRoomlistField *field); + * Get the label of a field. + * @param field A PurpleRoomlistField, which must not be @c NULL. + * @return The label of the field. +const char * purple_roomlist_field_get_label(PurpleRoomlistField *field); + * Check whether a roomlist-field is hidden. + * @param field A PurpleRoomlistField, which must not be @c NULL. + * @return @c TRUE if the field is hidden, @c FALSE otherwise. +gboolean purple_roomlist_field_get_hidden(PurpleRoomlistField *field); +/**************************************************************************/ +/** @name UI Registration Functions */ +/**************************************************************************/ + * Sets the UI operations structure to be used in all purple room lists. + * @param ops The UI operations structure. +void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps *ops); + * Returns the purple window UI operations structure to be used in + * @return A filled-out PurpleRoomlistUiOps structure. +PurpleRoomlistUiOps *purple_roomlist_get_ui_ops(void); +#endif /* _PURPLE_ROOMLIST_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/savedstatuses.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,425 @@
+ * @file savedstatuses.h Saved Status API + * @see @ref savedstatus-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SAVEDSTATUSES_H_ +#define _PURPLE_SAVEDSTATUSES_H_ + * Saved statuses don't really interact much with the rest of Purple. It + * could really be a plugin. It's just a list of away states. When + * a user chooses one of the saved states, their Purple accounts are set + * to the settings of that state. + * In the savedstatus API, there is the concept of a 'transient' + * saved status. A transient saved status is one that is not + * permanent. Purple will removed it automatically if it isn't + * used for a period of time. Transient saved statuses don't + * have titles and they don't show up in the list of saved + * statuses. In fact, if a saved status does not have a title + * then it is transient. If it does have a title, then it is not + * What good is a transient status, you ask? They can be used to + * keep track of the user's 5 most recently used statuses, for + * example. Basically if they just set a message on the fly, + * we'll cache it for them in case they want to use it again. If + * they don't use it again, we'll just delete it. + * TODO: Hmm. We should probably just be saving PurplePresences. That's + * something we should look into once the status box gets fleshed +typedef struct _PurpleSavedStatus PurpleSavedStatus; +typedef struct _PurpleSavedStatusSub PurpleSavedStatusSub; +/**************************************************************************/ +/** @name Saved status subsystem */ +/**************************************************************************/ + * Create a new saved status. This will add the saved status to the + * list of saved statuses and writes the revised list to status.xml. + * @param title The title of the saved status. This must be + * unique. Or, if you want to create a transient + * saved status, then pass in NULL. + * @param type The type of saved status. + * @return The newly created saved status, or NULL if the title you + * used was already taken. +PurpleSavedStatus *purple_savedstatus_new(const char *title, + PurpleStatusPrimitive type); + * Set the title for the given saved status. + * @param status The saved status. + * @param title The title of the saved status. +void purple_savedstatus_set_title(PurpleSavedStatus *status, + * Set the type for the given saved status. + * @param status The saved status. + * @param type The type of saved status. +void purple_savedstatus_set_type(PurpleSavedStatus *status, + PurpleStatusPrimitive type); + * Set the message for the given saved status. + * @param status The saved status. + * @param message The message, or NULL if you want to unset the + * message for this status. +void purple_savedstatus_set_message(PurpleSavedStatus *status, + * Set a substatus for an account in a saved status. + * @param status The saved status. + * @param account The account. + * @param type The status type for the account in the staved + * @param message The message for the account in the substatus. +void purple_savedstatus_set_substatus(PurpleSavedStatus *status, + const PurpleAccount *account, + const PurpleStatusType *type, + * Unset a substatus for an account in a saved status. This clears + * the previosly set substatus for the PurpleSavedStatus. If this + * saved status is activated then this account will use the default + * status type and message. + * @param saved_status The saved status. + * @param account The account. +void purple_savedstatus_unset_substatus(PurpleSavedStatus *saved_status, + const PurpleAccount *account); + * Delete a saved status. This removes the saved status from the list + * of saved statuses, and writes the revised list to status.xml. + * @param title The title of the saved status. + * @return TRUE if the status was successfully deleted. FALSE if the + * status could not be deleted because no saved status exists + * with the given title. +gboolean purple_savedstatus_delete(const char *title); + * Delete a saved status. This removes the saved status from the list + * of saved statuses, and writes the revised list to status.xml. + * @param saved_status the status to delete, the pointer is invalid after +void purple_savedstatus_delete_by_status(PurpleSavedStatus *saved_status); + * Returns all saved statuses. + * @constreturn A list of saved statuses. +GList *purple_savedstatuses_get_all(void); + * Returns the n most popular saved statuses. "Popularity" is + * determined by when the last time a saved_status was used and + * how many times it has been used. Transient statuses without + * messages are not included in the list. + * @param how_many The maximum number of saved statuses + * to return, or '0' to get all saved + * statuses sorted by popularity. + * @return A linked list containing at most how_many + * PurpleSavedStatuses. This list should be + * g_list_free'd by the caller (but the + * PurpleSavedStatuses must not be free'd). +GList *purple_savedstatuses_get_popular(unsigned int how_many); + * Returns the currently selected saved status. If we are idle + * then this returns purple_savedstatus_get_idleaway(). Otherwise + * it returns purple_savedstatus_get_default(). + * @return A pointer to the in-use PurpleSavedStatus. + * This function never returns NULL. +PurpleSavedStatus *purple_savedstatus_get_current(void); + * Returns the default saved status that is used when our + * accounts are not idle-away. + * @return A pointer to the in-use PurpleSavedStatus. + * This function never returns NULL. +PurpleSavedStatus *purple_savedstatus_get_default(void); + * Returns the saved status that is used when your + * accounts become idle-away. + * @return A pointer to the idle-away PurpleSavedStatus. + * This function never returns NULL. +PurpleSavedStatus *purple_savedstatus_get_idleaway(void); + * Return TRUE if we are currently idle-away. Otherwise + * @return TRUE if our accounts have been set to idle-away. +gboolean purple_savedstatus_is_idleaway(void); + * Set whether accounts in Purple are idle-away or not. + * @param idleaway TRUE if accounts should be switched to use the + * idle-away saved status. FALSE if they should + * be switched to use the default status. +void purple_savedstatus_set_idleaway(gboolean idleaway); + * Returns the status to be used when purple is starting up + * @return A pointer to the startup PurpleSavedStatus. + * This function never returns NULL. +PurpleSavedStatus *purple_savedstatus_get_startup(void); + * Finds a saved status with the specified title. + * @param title The name of the saved status. + * @return The saved status if found, or NULL. +PurpleSavedStatus *purple_savedstatus_find(const char *title); + * Finds a saved status with the specified creation time. + * @param creation_time The timestamp when the saved + * @return The saved status if found, or NULL. +PurpleSavedStatus *purple_savedstatus_find_by_creation_time(time_t creation_time); + * Finds a saved status with the specified primitive and message. + * @param type The PurpleStatusPrimitive for the status you're trying + * @param message The message for the status you're trying + * @return The saved status if found, or NULL. +PurpleSavedStatus *purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, const char *message); + * Determines if a given saved status is "transient." + * A transient saved status is one that was not + * explicitly added by the user. Transient statuses + * are automatically removed if they are not used + * for a period of time. + * A transient saved statuses is automatically + * created by the status box when the user sets himself + * to one of the generic primitive statuses. The reason + * we need to save this status information is so we can + * restore it when Purple restarts. + * @param saved_status The saved status. + * @return TRUE if the saved status is transient. +gboolean purple_savedstatus_is_transient(const PurpleSavedStatus *saved_status); + * Return the name of a given saved status. + * @param saved_status The saved status. + * @return The title. This value may be a static buffer which may + * be overwritten on subsequent calls to this function. If + * you need a reference to the title for prolonged use then + * you should make a copy of it. +const char *purple_savedstatus_get_title(const PurpleSavedStatus *saved_status); + * Return the type of a given saved status. + * @param saved_status The saved status. +PurpleStatusPrimitive purple_savedstatus_get_type(const PurpleSavedStatus *saved_status); + * Return the default message of a given saved status. + * @param saved_status The saved status. + * @return The message. This will return NULL if the saved + * status does not have a message. This will + * contain the normal markup that is created by + * Purple's IMHTML (basically HTML markup). +const char *purple_savedstatus_get_message(const PurpleSavedStatus *saved_status); + * Return the time in seconds-since-the-epoch when this + * saved status was created. Note: For any status created + * by Purple 1.5.0 or older this value will be invalid and + * very small (close to 0). This is because Purple 1.5.0 + * and older did not record the timestamp when the status + * However, this value is guaranteed to be a unique + * identifier for the given saved status. + * @param saved_status The saved status. + * @return The timestamp when this saved status was created. +time_t purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status); + * Determine if a given saved status has "substatuses," + * or if it is a simple status (the same for all + * @param saved_status The saved status. + * @return TRUE if the saved_status has substatuses. +gboolean purple_savedstatus_has_substatuses(const PurpleSavedStatus *saved_status); + * Get the substatus for an account in a saved status. + * @param saved_status The saved status. + * @param account The account. + * @return The PurpleSavedStatusSub for the account, or NULL if + * the given account does not have a substatus that + * differs from the default status of this PurpleSavedStatus. +PurpleSavedStatusSub *purple_savedstatus_get_substatus( + const PurpleSavedStatus *saved_status, + const PurpleAccount *account); + * Get the status type of a given substatus. + * @param substatus The substatus. + * @return The status type. +const PurpleStatusType *purple_savedstatus_substatus_get_type(const PurpleSavedStatusSub *substatus); + * Get the message of a given substatus. + * @param substatus The substatus. + * @return The message of the substatus, or NULL if this substatus does +const char *purple_savedstatus_substatus_get_message(const PurpleSavedStatusSub *substatus); + * Sets the statuses for all your accounts to those specified + * by the given saved_status. This function calls + * purple_savedstatus_activate_for_account() for all your accounts. + * @param saved_status The status you want to set your accounts to. +void purple_savedstatus_activate(PurpleSavedStatus *saved_status); + * Sets the statuses for a given account to those specified + * by the given saved_status. + * @param saved_status The status you want to set your accounts to. + * @param account The account whose statuses you want to change. +void purple_savedstatus_activate_for_account(const PurpleSavedStatus *saved_status, PurpleAccount *account); + * Get the handle for the status subsystem. + * @return the handle to the status subsystem +void *purple_savedstatuses_get_handle(void); + * Initializes the status subsystem. +void purple_savedstatuses_init(void); + * Uninitializes the status subsystem. +void purple_savedstatuses_uninit(void); +#endif /* _PURPLE_SAVEDSTATUSES_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/sbconn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,41 @@
+ * @file sbconn.h MSN Switchboard Connection + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define MSN_SBCONN_MAX_SIZE 1202 +void msn_sbconn_send_part(MsnSlpLink *slplink, MsnSlpMessagePart *part); +void msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg, +msn_sbconn_process_queue(MsnSwitchBoard *swboard); +#endif /* MSN_SBCONN_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/search.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,152 @@
+ * Copyright (C) 2005 Bartosz Oler <bartosz@bzimage.us> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_GG_SEARCH_H +#define _PURPLE_GG_SEARCH_H + GGPSearchType search_type; + guint16 page_size; /* how many contacts fits into one page of results */ +typedef GHashTable GGPSearches; + * Create a new GGPSearchForm structure, and set the fields + * to the sane defaults. + * @return Newly allocated GGPSearchForm. +ggp_search_form_new(GGPSearchType st); + * Destroy a Search Form. + * @param form Search Form to destroy. +ggp_search_form_destroy(GGPSearchForm *form); + * Add a search to the list of searches. + * @param searches The list of searches. + * @param seq Search (form) ID number. + * @param form The search form to add. +ggp_search_add(GGPSearches *searches, guint32 seq, GGPSearchForm *form); + * Remove a search from the list. + * If you want to destory the search completely also call: + * ggp_search_form_destroy(). + * @param searches The list of searches. + * @param seq ID number of the search. +ggp_search_remove(GGPSearches *searches, guint32 seq); + * Return the search with the specified ID. + * @param searches The list of searches. + * @param seq ID number of the search. +ggp_search_get(GGPSearches *searches, guint32 seq); + * Create a new GGPSearches structure. + * @return GGPSearches instance. + * Destroy GGPSearches instance. + * @param searches GGPSearches instance. +ggp_search_destroy(GGPSearches *searches); + * Initiate a search in the public directory. + * @param gc PurpleConnection. + * @param form Filled in GGPSearchForm. + * @return Sequence number of a search or 0 if an error occurred. +ggp_search_start(PurpleConnection *gc, GGPSearchForm *form); + * Return converted to the UTF-8 value of the specified field. + * @param res Public directory look-up result. + * @param num Id of the record. + * @param fileld Name of the field. + * @return UTF-8 encoded value of the field. +ggp_search_get_result(gg_pubdir50_t res, int num, const char *field); +#endif /* _PURPLE_GG_SEARCH_H */ +/* vim: set ts=8 sts=0 sw=8 noet: */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/servconn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,193 @@
+ * @file servconn.h Server connection functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnServConn MsnServConn; + * Connection error types. + MSN_SERVCONN_ERROR_NONE, + MSN_SERVCONN_ERROR_CONNECT, + MSN_SERVCONN_ERROR_WRITE, + MSN_SERVCONN_ERROR_READ + MsnServConnType type; /**< The type of this connection. */ + MsnSession *session; /**< The MSN session of this connection. */ + MsnCmdProc *cmdproc; /**< The command processor of this connection. */ + PurpleProxyConnectData *connect_data; + gboolean connected; /**< A flag that states if it's connected. */ + gboolean processing; /**< A flag that states if something is working + with this connection. */ + gboolean wasted; /**< A flag that states if it should be destroyed. */ + char *host; /**< The host this connection is connected or should be + int num; /**< A number id of this connection. */ + MsnHttpConn *httpconn; /**< The HTTP connection this connection should use. */ + int fd; /**< The connection's file descriptor. */ + int inpa; /**< The connection's input handler. */ + char *rx_buf; /**< The receive buffer. */ + int rx_len; /**< The receive buffer lenght. */ + size_t payload_len; /**< The length of the payload. + It's only set when we've received a command that + PurpleCircBuffer *tx_buf; + void (*connect_cb)(MsnServConn *); /**< The callback to call when connecting. */ + void (*disconnect_cb)(MsnServConn *); /**< The callback to call when disconnecting. */ + void (*destroy_cb)(MsnServConn *); /**< The callback to call when destroying. */ + * Creates a new connection object. + * @param session The session. + * @param type The type of the connection. +MsnServConn *msn_servconn_new(MsnSession *session, MsnServConnType type); + * Destroys a connection object. + * @param servconn The connection. +void msn_servconn_destroy(MsnServConn *servconn); + * @param servconn The connection. + * @param host The host. + * @param port The port. + * @param force Force this servconn to connect to a new server. +gboolean msn_servconn_connect(MsnServConn *servconn, const char *host, int port, + * @param servconn The connection. +void msn_servconn_disconnect(MsnServConn *servconn); + * Sets the connect callback. + * @param servconn The servconn. + * @param connect_cb The connect callback. +void msn_servconn_set_connect_cb(MsnServConn *servconn, + void (*connect_cb)(MsnServConn *)); + * Sets the disconnect callback. + * @param servconn The servconn. + * @param disconnect_cb The disconnect callback. +void msn_servconn_set_disconnect_cb(MsnServConn *servconn, + void (*disconnect_cb)(MsnServConn *)); + * Sets the destroy callback. + * @param servconn The servconn that's being destroyed. + * @param destroy_cb The destroy callback. +void msn_servconn_set_destroy_cb(MsnServConn *servconn, + void (*destroy_cb)(MsnServConn *)); + * Writes a chunck of data to the servconn. + * @param servconn The servconn. + * @param buf The data to write. + * @param size The size of the data. +gssize msn_servconn_write(MsnServConn *servconn, const char *buf, + * Function to call whenever an error related to a switchboard occurs. + * @param servconn The servconn. + * @param error The error that happened. +void msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error, + * Process the data in servconn->rx_buf. This is called after reading + * data from the socket. + * @param servconn The servconn. + * @return @c NULL if servconn was destroyed, 'servconn' otherwise. +MsnServConn *msn_servconn_process_data(MsnServConn *servconn); + * Set a idle timeout fot this servconn + * @param servconn The servconn + * @param seconds The idle timeout in seconds +void msn_servconn_set_idle_timeout(MsnServConn *servconn, guint seconds); +#endif /* MSN_SERVCONN_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/server.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,218 @@
+ * @file server.h Server API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SERVER_H_ +#define _PURPLE_SERVER_H_ +#include "conversation.h" + * Send a typing message to a given user over a given connection. + * TODO: Could probably move this into the conversation API. + * @param gc The connection over which to send the typing notification. + * @param name The user to send the typing notification to. + * @param state One of PURPLE_TYPING, PURPLE_TYPED, or PURPLE_NOT_TYPING. + * @return A quiet-period, specified in seconds, where Purple will not + * send any additional typing notification messages. Most + * protocols should return 0, which means that no additional + * PURPLE_TYPING messages need to be sent. If this is 5, for + * example, then Purple will wait five seconds, and if the Purple + * user is still typing then Purple will send another PURPLE_TYPING +unsigned int serv_send_typing(PurpleConnection *gc, const char *name, PurpleTypingState state); +void serv_move_buddy(PurpleBuddy *, PurpleGroup *, PurpleGroup *); +int serv_send_im(PurpleConnection *, const char *, const char *, PurpleMessageFlags flags); +/** Get information about an account's attention commands, from the prpl. + * @return The attention command numbered 'code' from the prpl's attention_types, or NULL. +PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code); +/** Send an attention request message. + * @deprecated Use purple_prpl_send_attention() instead. + * @param gc The connection to send the message on. + * @param who Whose attention to request. + * @param type_code An index into the prpl's attention_types list determining the type + * of the attention request command to send. 0 if prpl only defines one + * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). + * Note that you can't send arbitrary PurpleAttentionType's, because there is + * only a fixed set of attention commands. +void serv_send_attention(PurpleConnection *gc, const char *who, guint type_code); +/** Process an incoming attention message. + * @deprecated Use purple_prpl_got_attention() instead. + * @param gc The connection that received the attention message. + * @param who Who requested your attention. + * @param type_code An index into the prpl's attention_types list determining the type + * of the attention request command to send. +void serv_got_attention(PurpleConnection *gc, const char *who, guint type_code); +void serv_get_info(PurpleConnection *, const char *); +void serv_set_info(PurpleConnection *, const char *); +void serv_add_permit(PurpleConnection *, const char *); +void serv_add_deny(PurpleConnection *, const char *); +void serv_rem_permit(PurpleConnection *, const char *); +void serv_rem_deny(PurpleConnection *, const char *); +void serv_set_permit_deny(PurpleConnection *); +void serv_chat_invite(PurpleConnection *, int, const char *, const char *); +void serv_chat_leave(PurpleConnection *, int); +void serv_chat_whisper(PurpleConnection *, int, const char *, const char *); +int serv_chat_send(PurpleConnection *, int, const char *, PurpleMessageFlags flags); +void serv_alias_buddy(PurpleBuddy *); +void serv_got_alias(PurpleConnection *gc, const char *who, const char *alias); + * A protocol plugin should call this when it retrieves a private alias from + * the server. Private aliases are the aliases the user sets, while public + * aliases are the aliases or display names that buddies set for themselves. + * @param gc The connection on which the alias was received. + * @param who The name of the buddy whose alias was received. + * @param alias The alias that was received. +void purple_serv_got_private_alias(PurpleConnection *gc, const char *who, const char *alias); + * Receive a typing message from a remote user. Either PURPLE_TYPING + * or PURPLE_TYPED. If the user has stopped typing then use + * serv_got_typing_stopped instead. + * TODO: Could probably move this into the conversation API. + * @param gc The connection on which the typing message was received. + * @param name The name of the remote user. + * @param timeout If this is a number greater than 0, then + * Purple will wait this number of seconds and then + * set this buddy to the PURPLE_NOT_TYPING state. This + * is used by protocols that send repeated typing messages + * while the user is composing the message. + * @param state The typing state received +void serv_got_typing(PurpleConnection *gc, const char *name, int timeout, + PurpleTypingState state); + * TODO: Could probably move this into the conversation API. +void serv_got_typing_stopped(PurpleConnection *gc, const char *name); +void serv_got_im(PurpleConnection *gc, const char *who, const char *msg, + PurpleMessageFlags flags, time_t mtime); + * @param data The hash function should be g_str_hash() and the equal + * function should be g_str_equal(). +void serv_join_chat(PurpleConnection *, GHashTable *data); + * @param data The hash function should be g_str_hash() and the equal + * function should be g_str_equal(). +void serv_reject_chat(PurpleConnection *, GHashTable *data); + * Called by a prpl when an account is invited into a chat. + * @param gc The connection on which the invite arrived. + * @param name The name of the chat you're being invited to. + * @param who The username of the person inviting the account. + * @param message The optional invite message. + * @param data The components necessary if you want to call serv_join_chat(). + * The hash function should be g_str_hash() and the equal + * function should be g_str_equal(). +void serv_got_chat_invite(PurpleConnection *gc, const char *name, + const char *who, const char *message, + * Called by a prpl when an account has joined a chat. + * @param gc The connection on which the chat was joined. + * @param id The id of the chat, assigned by the prpl. + * @param name The name of the chat. + * @return The resulting conversation +PurpleConversation *serv_got_joined_chat(PurpleConnection *gc, + int id, const char *name); + * Called by a prpl when an attempt to join a chat via serv_join_chat() + * @param gc The connection on which chat joining failed + * @param data The components passed to serv_join_chat() originally. + * The hash function should be g_str_hash() and the equal + * function should be g_str_equal(). +void purple_serv_got_join_chat_failed(PurpleConnection *gc, GHashTable *data); + * Called by a prpl when an account has left a chat. + * @param g The connection on which the chat was left. + * @param id The id of the chat, as assigned by the prpl. +void serv_got_chat_left(PurpleConnection *g, int id); + * Called by a prpl when a message has been received in a chat. + * @param g The connection on which the message was received. + * @param id The id of the chat, as assigned by the prpl. + * @param who The name of the user who sent the message. + * @param flags The flags of the message. + * @param message The message received in the chat. + * @param mtime The time when the message was received. +void serv_got_chat_in(PurpleConnection *g, int id, const char *who, + PurpleMessageFlags flags, const char *message, time_t mtime); +void serv_send_file(PurpleConnection *gc, const char *who, const char *file); +#endif /* _PURPLE_SERVER_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/session.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,245 @@
+ * @file session.h MSN session functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnSession MsnSession; + MSN_ERROR_UNSUPPORTED_PROTOCOL, + MSN_ERROR_HTTP_MALFORMED, + MSN_ERROR_SERV_UNAVAILABLE + MSN_LOGIN_STEP_HANDSHAKE, + MSN_LOGIN_STEP_TRANSFER, + MSN_LOGIN_STEP_HANDSHAKE2, + MSN_LOGIN_STEP_AUTH_START, + MSN_LOGIN_STEP_GET_COOKIE, + MSN_LOGIN_STEP_AUTH_END, +#define MSN_LOGIN_STEPS MSN_LOGIN_STEP_END +#define MSN_LOGIN_FQY_TIMEOUT 30 +#define MSN_LOGIN_FQY_TIMEOUT 30 +#include "notification.h" +#include "switchboard.h" + PurpleAccount *account; + MsnLoginStep login_step; /**< The current step in the login process. */ + gboolean logged_in:1; /**< A temporal flag to ignore local buddy list adds. */ + gboolean destroying:1; /**< A flag that states if the session is being destroyed. */ + gboolean http_method:1; + gboolean enable_mpop:1; /**< Use Multiple Points of Presence? */ + int adl_fqy; /**< A count of ADL/FQY so status is only changed once. */ + guint login_timeout; /**< Timeout to force status change if ADL/FQY fail. */ + MsnNotification *notification; + int servconns_count; /**< The count of server connections. */ + GList *switches; /**< The list of all the switchboards. */ + GList *slplinks; /**< The list of all the slplinks. */ + gboolean email_enabled; + GHashTable *soap_table; + guint soap_cleanup_handle; + GSList *url_datas; /**< PurpleUtilFetchUrlData to be cancelled on exit */ + * Creates an MSN session. + * @param account The account. + * @return The new MSN session. +MsnSession *msn_session_new(PurpleAccount *account); + * Destroys an MSN session. + * @param session The MSN session to destroy. +void msn_session_destroy(MsnSession *session); + * Connects to and initiates an MSN session. + * @param session The MSN session. + * @param host The dispatch server host. + * @param port The dispatch server port. + * @param http_method Whether to use or not http_method. + * @return @c TRUE on success, @c FALSE on failure. +gboolean msn_session_connect(MsnSession *session, + const char *host, int port, + * Disconnects from an MSN session. + * @param session The MSN session. +void msn_session_disconnect(MsnSession *session); + * Finds a switchboard with the given username. + * @param session The MSN session. + * @param username The username to search for. + * @return The switchboard, if found. +MsnSwitchBoard *msn_session_find_swboard(MsnSession *session, + * Finds a switchboard with the given conversation. + * @param session The MSN session. + * @param conv The conversation to search for. + * @return The switchboard, if found. +MsnSwitchBoard *msn_session_find_swboard_with_conv(MsnSession *session, + PurpleConversation *conv); + * Finds a switchboard with the given chat ID. + * @param session The MSN session. + * @param chat_id The chat ID to search for. + * @return The switchboard, if found. +MsnSwitchBoard *msn_session_find_swboard_with_id(const MsnSession *session, + * Returns a switchboard to communicate with certain username. + * @param session The MSN session. + * @param username The username to search for. + * @param flag The flag of the switchboard + * @return The switchboard. +MsnSwitchBoard *msn_session_get_swboard(MsnSession *session, + const char *username, MsnSBFlag flag); + * Sets an error for the MSN session. + * @param session The MSN session. + * @param error The error. + * @param info Extra information. +void msn_session_set_error(MsnSession *session, MsnErrorType error, + * Starts a timeout to initiate finishing login. Sometimes the server ignores + * our FQY requests, so this forces ourselves online eventually. + * @param session The MSN session. +msn_session_activate_login_timeout(MsnSession *session); + * Sets the current step in the login process. + * @param session The MSN session. + * @param step The current step. +void msn_session_set_login_step(MsnSession *session, MsnLoginStep step); + * Finish the login proccess. + * @param session The MSN session. +void msn_session_finish_login(MsnSession *session); +/*post message to User*/ +void msn_session_report_user(MsnSession *session,const char *passport, + const char *msg,PurpleMessageFlags flags); +#endif /* MSN_SESSION_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/si.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,40 @@
+ * @file si.h SI transfer functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_JABBER_SI_H_ +#define PURPLE_JABBER_SI_H_ +void jabber_bytestreams_parse(JabberStream *js, const char *from, + JabberIqType type, const char *id, xmlnode *query); +void jabber_si_parse(JabberStream *js, const char *from, JabberIqType type, + const char *id, xmlnode *si); +PurpleXfer *jabber_si_new_xfer(PurpleConnection *gc, const char *who); +void jabber_si_xfer_send(PurpleConnection *gc, const char *who, const char *file); +void jabber_si_init(void); +void jabber_si_uninit(void); +#endif /* PURPLE_JABBER_SI_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/signals.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,380 @@
+ * @file signals.h Signal API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SIGNALS_H_ +#define _PURPLE_SIGNALS_H_ +#define PURPLE_CALLBACK(func) ((PurpleCallback)func) +typedef void (*PurpleCallback)(void); +typedef void (*PurpleSignalMarshalFunc)(PurpleCallback cb, va_list args, + void *data, void **return_val); +/**************************************************************************/ +/**************************************************************************/ +/** The priority of a signal connected using purple_signal_connect(). + * @see purple_signal_connect_priority() +#define PURPLE_SIGNAL_PRIORITY_DEFAULT 0 +/** The largest signal priority; signals with this priority will be called + * <em>last</em>. (This is highest as in numerical value, not as in order of + * @see purple_signal_connect_priority(). +#define PURPLE_SIGNAL_PRIORITY_HIGHEST 9999 +/** The smallest signal priority; signals with this priority will be called + * <em>first</em>. (This is lowest as in numerical value, not as in order of + * @see purple_signal_connect_priority(). +#define PURPLE_SIGNAL_PRIORITY_LOWEST -9999 + * Registers a signal in an instance. + * @param instance The instance to register the signal for. + * @param signal The signal name. + * @param marshal The marshal function. + * @param ret_value The return value type, or NULL for no return value. + * @param num_values The number of values to be passed to the callbacks. + * @param ... The values to pass to the callbacks. + * @return The signal ID local to that instance, or 0 if the signal + * couldn't be registered. +gulong purple_signal_register(void *instance, const char *signal, + PurpleSignalMarshalFunc marshal, + PurpleValue *ret_value, int num_values, ...); + * Unregisters a signal in an instance. + * @param instance The instance to unregister the signal for. + * @param signal The signal name. +void purple_signal_unregister(void *instance, const char *signal); + * Unregisters all signals in an instance. + * @param instance The instance to unregister the signal for. +void purple_signals_unregister_by_instance(void *instance); + * Returns a list of value types used for a signal. + * @param instance The instance the signal is registered to. + * @param signal The signal. + * @param ret_value The return value from the last signal handler. + * @param num_values The returned number of values. + * @param values The returned list of values. +void purple_signal_get_values(void *instance, const char *signal, + PurpleValue **ret_value, + int *num_values, PurpleValue ***values); + * Connects a signal handler to a signal for a particular object. + * Take care not to register a handler function twice. Purple will + * not correct any mistakes for you in this area. + * @param instance The instance to connect to. + * @param signal The name of the signal to connect. + * @param handle The handle of the receiver. + * @param func The callback function. + * @param data The data to pass to the callback function. + * @param priority The priority with which the handler should be called. Signal + * handlers are called in ascending numerical order of @a + * priority from #PURPLE_SIGNAL_PRIORITY_LOWEST to + * #PURPLE_SIGNAL_PRIORITY_HIGHEST. + * @return The signal handler ID. + * @see purple_signal_disconnect() +gulong purple_signal_connect_priority(void *instance, const char *signal, + void *handle, PurpleCallback func, void *data, int priority); + * Connects a signal handler to a signal for a particular object. + * (Its priority defaults to 0, aka #PURPLE_SIGNAL_PRIORITY_DEFAULT.) + * Take care not to register a handler function twice. Purple will + * not correct any mistakes for you in this area. + * @param instance The instance to connect to. + * @param signal The name of the signal to connect. + * @param handle The handle of the receiver. + * @param func The callback function. + * @param data The data to pass to the callback function. + * @return The signal handler ID. + * @see purple_signal_disconnect() +gulong purple_signal_connect(void *instance, const char *signal, + void *handle, PurpleCallback func, void *data); + * Connects a signal handler to a signal for a particular object. + * The signal handler will take a va_args of arguments, instead of + * individual arguments. + * Take care not to register a handler function twice. Purple will + * not correct any mistakes for you in this area. + * @param instance The instance to connect to. + * @param signal The name of the signal to connect. + * @param handle The handle of the receiver. + * @param func The callback function. + * @param data The data to pass to the callback function. + * @param priority The priority with which the handler should be called. Signal + * handlers are called in ascending numerical order of @a + * priority from #PURPLE_SIGNAL_PRIORITY_LOWEST to + * #PURPLE_SIGNAL_PRIORITY_HIGHEST. + * @return The signal handler ID. + * @see purple_signal_disconnect() +gulong purple_signal_connect_priority_vargs(void *instance, const char *signal, + void *handle, PurpleCallback func, void *data, int priority); + * Connects a signal handler to a signal for a particular object. + * (Its priority defaults to 0, aka #PURPLE_SIGNAL_PRIORITY_DEFAULT.) + * The signal handler will take a va_args of arguments, instead of + * individual arguments. + * Take care not to register a handler function twice. Purple will + * not correct any mistakes for you in this area. + * @param instance The instance to connect to. + * @param signal The name of the signal to connect. + * @param handle The handle of the receiver. + * @param func The callback function. + * @param data The data to pass to the callback function. + * @return The signal handler ID. + * @see purple_signal_disconnect() +gulong purple_signal_connect_vargs(void *instance, const char *signal, + void *handle, PurpleCallback func, void *data); + * Disconnects a signal handler from a signal on an object. + * @param instance The instance to disconnect from. + * @param signal The name of the signal to disconnect. + * @param handle The handle of the receiver. + * @param func The registered function to disconnect. + * @see purple_signal_connect() +void purple_signal_disconnect(void *instance, const char *signal, + void *handle, PurpleCallback func); + * Removes all callbacks associated with a receiver handle. + * @param handle The receiver handle. +void purple_signals_disconnect_by_handle(void *handle); + * @param instance The instance emitting the signal. + * @param signal The signal being emitted. + * @see purple_signal_connect() + * @see purple_signal_disconnect() +void purple_signal_emit(void *instance, const char *signal, ...); + * Emits a signal, using a va_list of arguments. + * @param instance The instance emitting the signal. + * @param signal The signal being emitted. + * @param args The arguments list. + * @see purple_signal_connect() + * @see purple_signal_disconnect() +void purple_signal_emit_vargs(void *instance, const char *signal, va_list args); + * Emits a signal and returns the first non-NULL return value. + * Further signal handlers are NOT called after a handler returns + * something other than NULL. + * @param instance The instance emitting the signal. + * @param signal The signal being emitted. + * @return The first non-NULL return value +void *purple_signal_emit_return_1(void *instance, const char *signal, ...); + * Emits a signal and returns the first non-NULL return value. + * Further signal handlers are NOT called after a handler returns + * something other than NULL. + * @param instance The instance emitting the signal. + * @param signal The signal being emitted. + * @param args The arguments list. + * @return The first non-NULL return value +void *purple_signal_emit_vargs_return_1(void *instance, const char *signal, + * Initializes the signals subsystem. +void purple_signals_init(void); + * Uninitializes the signals subsystem. +void purple_signals_uninit(void); +/**************************************************************************/ +/** @name Marshal Functions */ +/**************************************************************************/ +void purple_marshal_VOID( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__INT_INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_INT_INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_INT_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_UINT_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_INT__INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_INT__INT_INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_INT__POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_INT__POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_INT__POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_BOOLEAN( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_BOOLEAN__INT_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER_INT( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER_INT64( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER_INT_BOOLEAN( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER_INT64_BOOLEAN( + PurpleCallback cb, va_list args, void *data, void **return_val); +void purple_marshal_POINTER__POINTER_POINTER( + PurpleCallback cb, va_list args, void *data, void **return_val); +#endif /* _PURPLE_SIGNALS_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/slp.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,51 @@
+ * @file slp.h MSNSLP support + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +msn_slp_send_ok(MsnSlpCall *slpcall, const char *branch, + const char *type, const char *content); +msn_slp_send_decline(MsnSlpCall *slpcall, const char *branch, + const char *type, const char *content); +void send_bye(MsnSlpCall *slpcall, const char *type); +void msn_request_user_display(MsnUser *user); +void msn_request_ft(PurpleXfer *xfer); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/slpcall.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,98 @@
+ * @file slpcall.h SLP Call functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnSlpCall MsnSlpCall; +/* The official client seems to timeout slp calls after 5 minutes */ +#define MSN_SLPCALL_TIMEOUT 300 + /* Our parent slplink */ + gboolean pending; /**< A flag that states if we should wait for this + slpcall to start and do not time out. */ + gboolean progress; /**< A flag that states if there has been progress since + gboolean wasted; /**< A flag that states if this slpcall is going to be + gboolean started; /**< A flag that states if this slpcall's session has + gboolean wait_for_socket; + void (*progress_cb)(MsnSlpCall *slpcall, + gsize total_length, gsize len); + void (*session_init_cb)(MsnSlpCall *slpcall); + /* Can be checksum, or smile */ + GByteArray *incoming_data; + MsnSlpMessage *xfer_msg; /* A dirty hack */ + void (*end_cb)(MsnSlpCall *slpcall, MsnSession *session); +MsnSlpCall *msn_slpcall_new(MsnSlpLink *slplink); +void msn_slpcall_init(MsnSlpCall *slpcall, MsnSlpCallType type); +void msn_slpcall_session_init(MsnSlpCall *slpcall); +void msn_slpcall_destroy(MsnSlpCall *slpcall); +void msn_slpcall_invite(MsnSlpCall *slpcall, const char *euf_guid, + MsnP2PAppId app_id, const char *context); +void msn_slpcall_close(MsnSlpCall *slpcall); +#endif /* MSN_SLPCALL_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/slplink.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,98 @@
+ * @file slplink.h MSNSLP Link support + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnSlpLink MsnSlpLink; +#include "switchboard.h" +typedef void (*MsnSlpCb)(MsnSlpCall *slpcall, + const guchar *data, gsize size); +typedef void (*MsnSlpEndCb)(MsnSlpCall *slpcall, MsnSession *session); + MsnSwitchBoard *swboard; + MsnP2PVersion p2p_version; +MsnSlpLink *msn_slplink_ref(MsnSlpLink *slplink); +void msn_slplink_unref(MsnSlpLink *slplink); + * @return An MsnSlpLink for the given user, or NULL if there is no +MsnSlpLink *msn_session_find_slplink(MsnSession *session, + * @return An MsnSlpLink for the given user. One will be created if + * it does not already exist. +MsnSlpLink *msn_session_get_slplink(MsnSession *session, const char *username); +void msn_slplink_add_slpcall(MsnSlpLink *slplink, MsnSlpCall *slpcall); +void msn_slplink_remove_slpcall(MsnSlpLink *slplink, MsnSlpCall *slpcall); +MsnSlpCall *msn_slplink_find_slp_call(MsnSlpLink *slplink, +MsnSlpCall *msn_slplink_find_slp_call_with_session_id(MsnSlpLink *slplink, long id); +MsnP2PVersion msn_slplink_get_p2p_version(MsnSlpLink *slplink); +void msn_slplink_queue_slpmsg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg); +void msn_slplink_send_slpmsg(MsnSlpLink *slplink, + MsnSlpMessage *slpmsg); +void msn_slplink_send_queued_slpmsgs(MsnSlpLink *slplink); +void msn_slplink_process_msg(MsnSlpLink *slplink, MsnSlpMessagePart *part); +/* Only exported for msn_xfer_write */ +void msn_slplink_send_msgpart(MsnSlpLink *slplink, MsnSlpMessage *slpmsg); +void msn_slplink_request_object(MsnSlpLink *slplink, +MsnSlpCall *msn_slp_process_msg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg); +#endif /* MSN_SLPLINK_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/slpmsg.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,150 @@
+ * @file slpmsg.h SLP Message functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnSlpMessage MsnSlpMessage; + * A SLP Message This contains everything that we will need to send a SLP + * Message even if has to be sent in several parts. + MsnSlpCall *slpcall; /**< The slpcall to which this slp message belongs (if applicable). */ + MsnSlpLink *slplink; /**< The slplink through which this slp message is being sent. */ + PurpleStoredImage *img; + * This is the size of buffer, unless this is an outgoing file transfer, + * in which case this is the size of the file. + GList *parts; /**< A list with the SlpMsgParts */ + * Creates a new slp message + * @param slplink The slplink through which this slp message will be sent. + * If it's set to NULL, it is a temporary SlpMessage. + * @return The created slp message. +MsnSlpMessage *msn_slpmsg_new(MsnSlpLink *slplink, MsnSlpCall *slpcall); + * Destroys a slp message + * @param slpmsg The slp message to destory. +void msn_slpmsg_destroy(MsnSlpMessage *slpmsg); + * Relate this SlpMessage with an existing SlpLink + * @param slplink The SlpLink that will send this message. +void msn_slpmsg_set_slplink(MsnSlpMessage *slpmsg, MsnSlpLink *slplink); +void msn_slpmsg_set_body(MsnSlpMessage *slpmsg, const char *body, +void msn_slpmsg_set_image(MsnSlpMessage *slpmsg, PurpleStoredImage *img); +MsnSlpMessage * msn_slpmsg_sip_new(MsnSlpCall *slpcall, int cseq, + const char *content_type, + * Create a new SLP Ack message + * @param header the value of the header in this slpmsg. + * @return A new SlpMessage with ACK headers +MsnSlpMessage *msn_slpmsg_ack_new(MsnSlpLink *slplink, MsnP2PInfo *info); + * Create a new SLP message for MsnObject data. + * @param slpcall The slpcall that manages this message. + * @param img The image to be sent in this message. + * @return A new SlpMessage with MsnObject info. +MsnSlpMessage *msn_slpmsg_obj_new(MsnSlpCall *slpcall, PurpleStoredImage *img); + * Create a new SLP message for data preparation. + * @param slpcall The slpcall that manages this message. + * @return A new SlpMessage with data preparation info. +MsnSlpMessage *msn_slpmsg_dataprep_new(MsnSlpCall *slpcall); + * Create a new SLP message for File transfer. + * @param slpcall The slpcall that manages this message. + * @param size The size of the file being transsmited. + * @return A new SlpMessage with the file transfer info. +MsnSlpMessage *msn_slpmsg_file_new(MsnSlpCall *slpcall, size_t size); + * Serialize the MsnSlpMessage in a way it can be used to be transmited + * @param slpmsg The MsnSlpMessage. + * @param ret_size The size of the buffer cointaining the message. + * @return a buffer with the serialized data. +char *msn_slpmsg_serialize(MsnSlpMessage *slpmsg, size_t *ret_size); +void msn_slpmsg_show_readable(MsnSlpMessage *slpmsg); +#endif /* _MSN_SLPMSG_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/slpmsg_part.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,66 @@
+ * @file slpmsg_part.h MSNSLP Parts + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef MSN_SLPMSG_PART_H +#define MSN_SLPMSG_PART_H +typedef struct _MsnSlpMessagePart MsnSlpMessagePart; +typedef void (*MsnSlpPartCb)(MsnSlpMessagePart *part, void *data); +struct _MsnSlpMessagePart +MsnSlpMessagePart *msn_slpmsgpart_new(MsnP2PInfo *info); +MsnSlpMessagePart *msn_slpmsgpart_new_from_data(MsnP2PVersion p2p, const char *data, size_t data_len); +MsnSlpMessagePart *msn_slpmsgpart_ref(MsnSlpMessagePart *part); +void msn_slpmsgpart_unref(MsnSlpMessagePart *part); +void msn_slpmsgpart_set_bin_data(MsnSlpMessagePart *part, const void *data, size_t len); +char *msn_slpmsgpart_serialize(MsnSlpMessagePart *part, size_t *ret_size); +void msn_slpmsgpart_ack(MsnSlpMessagePart *part, void *data); +void msn_slpmsgpart_nak(MsnSlpMessagePart *part, void *data); +void msn_slpmsgpart_to_string(MsnSlpMessagePart *part, GString *str); +#endif /* MSN_SLPMSG_PART_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/smiley.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,262 @@
+ * @file smiley.h Smiley API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SMILEY_H_ +#define _PURPLE_SMILEY_H_ +#include <glib-object.h> + * This contains everything Purple will ever need to know about a custom smiley. + * PurpleSmiley is a GObject. +typedef struct _PurpleSmiley PurpleSmiley; +typedef struct _PurpleSmileyClass PurpleSmileyClass; +#define PURPLE_TYPE_SMILEY (purple_smiley_get_type ()) +#define PURPLE_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_CAST ((smiley), PURPLE_TYPE_SMILEY, PurpleSmiley)) +#define PURPLE_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) +#define PURPLE_IS_SMILEY(smiley) (G_TYPE_CHECK_INSTANCE_TYPE ((smiley), PURPLE_TYPE_SMILEY)) +#define PURPLE_IS_SMILEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PURPLE_TYPE_SMILEY)) +#define PURPLE_SMILEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PURPLE_TYPE_SMILEY, PurpleSmileyClass)) +/**************************************************************************/ +/** @name Custom Smiley API */ +/**************************************************************************/ +GType purple_smiley_get_type(void); + * Creates a new custom smiley from a PurpleStoredImage. + * If a custom smiley with the given shortcut already exists, it + * will be automaticaly returned. + * @param img The image associated with the smiley. + * @param shortcut The associated shortcut (e.g. "(homer)"). + * @return The custom smiley. +purple_smiley_new(PurpleStoredImage *img, const char *shortcut); + * Creates a new custom smiley, reading the image data from a file. + * If a custom smiley with the given shortcut already exists, it + * will be automaticaly returned. + * @param shortcut The associated shortcut (e.g. "(homer)"). + * @param filepath The image file. + * @return The custom smiley. +purple_smiley_new_from_file(const char *shortcut, const char *filepath); + * Destroys the custom smiley and releases the associated resources. + * @param smiley The custom smiley. +purple_smiley_delete(PurpleSmiley *smiley); + * Changes the custom smiley's shortcut. + * @param smiley The custom smiley. + * @param shortcut The new shortcut. A custom smiley with this shortcut + * cannot already be in use. + * @return TRUE if the shortcut was changed. FALSE otherwise. +purple_smiley_set_shortcut(PurpleSmiley *smiley, const char *shortcut); + * Changes the custom smiley's image data. + * @param smiley The custom smiley. + * @param smiley_data The custom smiley data, which the smiley code + * takes ownership of and will free. + * @param smiley_data_len The length of the data in @a smiley_data. +purple_smiley_set_data(PurpleSmiley *smiley, guchar *smiley_data, + size_t smiley_data_len); + * Returns the custom smiley's associated shortcut (e.g. "(homer)"). + * @param smiley The custom smiley. + * @return The shortcut. +const char *purple_smiley_get_shortcut(const PurpleSmiley *smiley); + * Returns the custom smiley data's checksum. + * @param smiley The custom smiley. + * @return The checksum. +const char *purple_smiley_get_checksum(const PurpleSmiley *smiley); + * Returns the PurpleStoredImage with the reference counter incremented. + * The returned PurpleStoredImage reference counter must be decremented + * when the caller is done using it. + * @param smiley The custom smiley. + * @return A PurpleStoredImage. +PurpleStoredImage *purple_smiley_get_stored_image(const PurpleSmiley *smiley); + * Returns the custom smiley's data. + * @param smiley The custom smiley. + * @param len If not @c NULL, the length of the image data returned + * will be set in the location pointed to by this. + * @return A pointer to the custom smiley data. +gconstpointer purple_smiley_get_data(const PurpleSmiley *smiley, size_t *len); + * Returns an extension corresponding to the custom smiley's file type. + * @param smiley The custom smiley. + * @return The custom smiley's extension, "icon" if unknown, or @c NULL if + * the image data has disappeared. +const char *purple_smiley_get_extension(const PurpleSmiley *smiley); + * Returns a full path to an custom smiley. + * If the custom smiley has data and the file exists in the cache, this + * will return a full path to the cached file. + * In general, it is not appropriate to be poking in the file cache + * directly. If you find yourself wanting to use this function, think + * very long and hard about it, and then don't. + * @param smiley The custom smiley. + * @return A full path to the file, or @c NULL under various conditions. + * The caller should use g_free to free the returned string. +char *purple_smiley_get_full_path(PurpleSmiley *smiley); +/**************************************************************************/ +/** @name Custom Smiley Subsystem API */ +/**************************************************************************/ + * Returns a list of all custom smileys. The caller is responsible for freeing + * @return A list of all custom smileys. +purple_smileys_get_all(void); + * Returns a custom smiley given its shortcut. + * @param shortcut The custom smiley's shortcut. + * @return The custom smiley if found, or @c NULL if not found. +purple_smileys_find_by_shortcut(const char *shortcut); + * Returns a custom smiley given its checksum. + * @param checksum The custom smiley's checksum. + * @return The custom smiley if found, or @c NULL if not found. +purple_smileys_find_by_checksum(const char *checksum); + * Returns the directory used to store custom smiley cached files. + * The default directory is PURPLEDIR/custom_smiley. + * @return The directory in which to store custom smileys cached files. +const char *purple_smileys_get_storing_dir(void); + * Initializes the custom smiley subsystem. +void purple_smileys_init(void); + * Uninitializes the custom smiley subsystem. +void purple_smileys_uninit(void); +#endif /* _PURPLE_SMILEY_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/snactypes.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,287 @@
+ * Purple's oscar protocol plugin + * This file is the legal property of its developers. + * Please see the AUTHORS file distributed alongside this file. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define SNAC_FAMILY_OSERVICE 0x0001 +#define SNAC_FAMILY_LOCATE 0x0002 +#define SNAC_FAMILY_BUDDY 0x0003 +#define SNAC_FAMILY_ICBM 0x0004 +#define SNAC_FAMILY_ADVERT 0x0005 +#define SNAC_FAMILY_INVITE 0x0006 +#define SNAC_FAMILY_ADMIN 0x0007 +#define SNAC_FAMILY_POPUP 0x0008 +#define SNAC_FAMILY_BOS 0x0009 +#define SNAC_FAMILY_USERLOOKUP 0x000a +#define SNAC_FAMILY_STATS 0x000b +#define SNAC_FAMILY_TRANSLATE 0x000c +#define SNAC_FAMILY_CHATNAV 0x000d +#define SNAC_FAMILY_CHAT 0x000e +#define SNAC_FAMILY_ODIR 0x000f +#define SNAC_FAMILY_BART 0x0010 +#define SNAC_FAMILY_FEEDBAG 0x0013 +#define SNAC_FAMILY_ICQ 0x0015 +#define SNAC_FAMILY_AUTH 0x0017 +#define SNAC_FAMILY_ALERT 0x0018 +#define AIM_CB_FAM_SPECIAL 0xffff /* Internal libfaim use */ + * Not really a family, but treating it as one really + * helps it fit into the libfaim callback structure better. +#define AIM_CB_ACK_ACK 0x0001 + * SNAC Family: General. +#define SNAC_SUBTYPE_OSERVICE_ERROR 0x0001 +#define SNAC_SUBTYPE_OSERVICE_CLIENTREADY 0x0002 +#define SNAC_SUBTYPE_OSERVICE_SERVERREADY 0x0003 +#define SNAC_SUBTYPE_OSERVICE_SERVICEREQ 0x0004 +#define SNAC_SUBTYPE_OSERVICE_REDIRECT 0x0005 +#define SNAC_SUBTYPE_OSERVICE_RATEINFOREQ 0x0006 +#define SNAC_SUBTYPE_OSERVICE_RATEINFO 0x0007 +#define SNAC_SUBTYPE_OSERVICE_RATEINFOACK 0x0008 +#define SNAC_SUBTYPE_OSERVICE_RATECHANGE 0x000a +#define SNAC_SUBTYPE_OSERVICE_SERVERPAUSE 0x000b +#define SNAC_SUBTYPE_OSERVICE_SERVERRESUME 0x000d +#define SNAC_SUBTYPE_OSERVICE_REQSELFINFO 0x000e +#define SNAC_SUBTYPE_OSERVICE_SELFINFO 0x000f +#define SNAC_SUBTYPE_OSERVICE_EVIL 0x0010 +#define SNAC_SUBTYPE_OSERVICE_SETIDLE 0x0011 +#define SNAC_SUBTYPE_OSERVICE_MIGRATIONREQ 0x0012 +#define SNAC_SUBTYPE_OSERVICE_MOTD 0x0013 +#define SNAC_SUBTYPE_OSERVICE_SETPRIVFLAGS 0x0014 +#define SNAC_SUBTYPE_OSERVICE_WELLKNOWNURL 0x0015 +#define SNAC_SUBTYPE_OSERVICE_NOP 0x0016 +#define SNAC_SUBTYPE_OSERVICE_DEFAULT 0xffff + * SNAC Family: Location Services. +#define SNAC_SUBTYPE_LOCATE_ERROR 0x0001 +#define SNAC_SUBTYPE_LOCATE_REQRIGHTS 0x0002 +#define SNAC_SUBTYPE_LOCATE_RIGHTSINFO 0x0003 +#define SNAC_SUBTYPE_LOCATE_SETUSERINFO 0x0004 +#define SNAC_SUBTYPE_LOCATE_REQUSERINFO 0x0005 +#define SNAC_SUBTYPE_LOCATE_USERINFO 0x0006 +#define SNAC_SUBTYPE_LOCATE_WATCHERSUBREQ 0x0007 +#define SNAC_SUBTYPE_LOCATE_WATCHERNOT 0x0008 +#define SNAC_SUBTYPE_LOCATE_DEFAULT 0xffff + * SNAC Family: Buddy List Management Services. +#define SNAC_SUBTYPE_BUDDY_ERROR 0x0001 +#define SNAC_SUBTYPE_BUDDY_REQRIGHTS 0x0002 +#define SNAC_SUBTYPE_BUDDY_RIGHTSINFO 0x0003 +#define SNAC_SUBTYPE_BUDDY_ADDBUDDY 0x0004 +#define SNAC_SUBTYPE_BUDDY_REMBUDDY 0x0005 +#define SNAC_SUBTYPE_BUDDY_REJECT 0x000a +#define SNAC_SUBTYPE_BUDDY_ONCOMING 0x000b +#define SNAC_SUBTYPE_BUDDY_OFFGOING 0x000c +#define SNAC_SUBTYPE_BUDDY_DEFAULT 0xffff + * SNAC Family: Messaging Services. +#define SNAC_SUBTYPE_ICBM_ERROR 0x0001 +#define SNAC_SUBTYPE_ICBM_PARAMINFO 0x0005 +#define SNAC_SUBTYPE_ICBM_INCOMING 0x0007 +#define SNAC_SUBTYPE_ICBM_EVIL 0x0009 +#define SNAC_SUBTYPE_ICBM_MISSEDCALL 0x000a +#define SNAC_SUBTYPE_ICBM_CLIENTAUTORESP 0x000b +#define SNAC_SUBTYPE_ICBM_ACK 0x000c +#define SNAC_SUBTYPE_ICBM_MTN 0x0014 +#define SNAC_SUBTYPE_ICBM_DEFAULT 0xffff + * SNAC Family: Advertisement Services +#define SNAC_SUBTYPE_ADVERT_ERROR 0x0001 +#define SNAC_SUBTYPE_ADVERT_DEFAULT 0xffff + * SNAC Family: Invitation Services. +#define SNAC_SUBTYPE_INVITE_ERROR 0x0001 +#define SNAC_SUBTYPE_INVITE_DEFAULT 0xffff + * SNAC Family: Administrative Services. +#define SNAC_SUBTYPE_ADMIN_ERROR 0x0001 +#define SNAC_SUBTYPE_ADMIN_INFOCHANGE_REPLY 0x0005 +#define SNAC_SUBTYPE_ADMIN_DEFAULT 0xffff + * SNAC Family: Popup Messages +#define SNAC_SUBTYPE_POPUP_ERROR 0x0001 +#define SNAC_SUBTYPE_POPUP_DEFAULT 0xffff + * SNAC Family: Misc BOS Services. +#define SNAC_SUBTYPE_BOS_ERROR 0x0001 +#define SNAC_SUBTYPE_BOS_RIGHTSQUERY 0x0002 +#define SNAC_SUBTYPE_BOS_RIGHTS 0x0003 +#define SNAC_SUBTYPE_BOS_DEFAULT 0xffff + * SNAC Family: User Lookup Services +#define SNAC_SUBTYPE_USERLOOKUP_ERROR 0x0001 +#define SNAC_SUBTYPE_USERLOOKUP_DEFAULT 0xffff + * SNAC Family: User Status Services +#define SNAC_SUBTYPE_STATS_ERROR 0x0001 +#define SNAC_SUBTYPE_STATS_SETREPORTINTERVAL 0x0002 +#define SNAC_SUBTYPE_STATS_REPORTACK 0x0004 +#define SNAC_SUBTYPE_STATS_DEFAULT 0xffff + * SNAC Family: Translation Services +#define SNAC_SUBTYPE_TRANSLATE_ERROR 0x0001 +#define SNAC_SUBTYPE_TRANSLATE_DEFAULT 0xffff + * SNAC Family: Chat Navigation Services +#define SNAC_SUBTYPE_CHATNAV_ERROR 0x0001 +#define SNAC_SUBTYPE_CHATNAV_CREATE 0x0008 +#define SNAC_SUBTYPE_CHATNAV_INFO 0x0009 +#define SNAC_SUBTYPE_CHATNAV_DEFAULT 0xffff + * SNAC Family: Chat Services +#define SNAC_SUBTYPE_CHAT_ERROR 0x0001 +#define SNAC_SUBTYPE_CHAT_ROOMINFOUPDATE 0x0002 +#define SNAC_SUBTYPE_CHAT_USERJOIN 0x0003 +#define SNAC_SUBTYPE_CHAT_USERLEAVE 0x0004 +#define SNAC_SUBTYPE_CHAT_OUTGOINGMSG 0x0005 +#define SNAC_SUBTYPE_CHAT_INCOMINGMSG 0x0006 +#define SNAC_SUBTYPE_CHAT_DEFAULT 0xffff + * SNAC Family: "New" Search +#define SNAC_SUBTYPE_ODIR_ERROR 0x0001 +#define SNAC_SUBTYPE_ODIR_SEARCH 0x0002 +#define SNAC_SUBTYPE_ODIR_RESULTS 0x0003 + * SNAC Family: Buddy icons +#define SNAC_SUBTYPE_BART_ERROR 0x0001 +#define SNAC_SUBTYPE_BART_REQUEST 0x0004 +#define SNAC_SUBTYPE_BART_RESPONSE 0x0005 + * SNAC Family: Server-Stored Buddy Lists +#define SNAC_SUBTYPE_FEEDBAG_ERROR 0x0001 +#define SNAC_SUBTYPE_FEEDBAG_REQRIGHTS 0x0002 +#define SNAC_SUBTYPE_FEEDBAG_RIGHTSINFO 0x0003 +#define SNAC_SUBTYPE_FEEDBAG_REQDATA 0x0004 +#define SNAC_SUBTYPE_FEEDBAG_REQIFCHANGED 0x0005 +#define SNAC_SUBTYPE_FEEDBAG_LIST 0x0006 +#define SNAC_SUBTYPE_FEEDBAG_ACTIVATE 0x0007 +#define SNAC_SUBTYPE_FEEDBAG_ADD 0x0008 +#define SNAC_SUBTYPE_FEEDBAG_MOD 0x0009 +#define SNAC_SUBTYPE_FEEDBAG_DEL 0x000A +#define SNAC_SUBTYPE_FEEDBAG_SRVACK 0x000E +#define SNAC_SUBTYPE_FEEDBAG_NOLIST 0x000F +#define SNAC_SUBTYPE_FEEDBAG_EDITSTART 0x0011 +#define SNAC_SUBTYPE_FEEDBAG_EDITSTOP 0x0012 +#define SNAC_SUBTYPE_FEEDBAG_SENDAUTH 0x0014 +#define SNAC_SUBTYPE_FEEDBAG_RECVAUTH 0x0015 +#define SNAC_SUBTYPE_FEEDBAG_SENDAUTHREQ 0x0018 +#define SNAC_SUBTYPE_FEEDBAG_RECVAUTHREQ 0x0019 +#define SNAC_SUBTYPE_FEEDBAG_SENDAUTHREP 0x001a +#define SNAC_SUBTYPE_FEEDBAG_RECVAUTHREP 0x001b +#define SNAC_SUBTYPE_FEEDBAG_ADDED 0x001c + * Most of these are actually special. +#define SNAC_SUBTYPE_ICQ_ERROR 0x0001 +#define SNAC_SUBTYPE_ICQ_OFFLINEMSG 0x00f0 +#define SNAC_SUBTYPE_ICQ_OFFLINEMSGCOMPLETE 0x00f1 +#define SNAC_SUBTYPE_ICQ_INFO 0x00f2 +#define SNAC_SUBTYPE_ICQ_ALIAS 0x00f3 +#define SNAC_SUBTYPE_ICQ_DEFAULT 0xffff + * SNAC Family: Authorizer + * Used only in protocol versions three and above. +#define SNAC_SUBTYPE_AUTH_ERROR 0x0001 +#define SNAC_SUBTYPE_AUTH_LOGINREQEST 0x0002 +#define SNAC_SUBTYPE_AUTH_LOGINRESPONSE 0x0003 +#define SNAC_SUBTYPE_AUTH_AUTHREQ 0x0006 +#define SNAC_SUBTYPE_AUTH_AUTHRESPONSE 0x0007 +#define SNAC_SUBTYPE_AUTH_SECURID_REQUEST 0x000a +#define SNAC_SUBTYPE_AUTH_SECURID_RESPONSE 0x000b + * Used for getting information on the email address + * associated with your username. +#define SNAC_SUBTYPE_ALERT_ERROR 0x0001 +#define SNAC_SUBTYPE_ALERT_SENDCOOKIES 0x0006 +#define SNAC_SUBTYPE_ALERT_MAILSTATUS 0x0007 +#define SNAC_SUBTYPE_ALERT_INIT 0x0016 + * SNAC Family: Internal Messages + * This isn't truly a SNAC family either, but using + * these, we can integrated non-SNAC services into + * the SNAC-centered libfaim callback structure. +#define AIM_CB_SPECIAL_CONNERR 0x0003 +#define AIM_CB_SPECIAL_CONNINITDONE 0x0006 +#define AIM_SNACFLAGS_DESTRUCTOR 0x0001 +#endif /* _SNACTYPES_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/soap.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,52 @@
+ * header file for SOAP connection related process + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +typedef struct _MsnSoapMessage MsnSoapMessage; +typedef void (*MsnSoapCallback)(MsnSoapMessage *request, + MsnSoapMessage *response, gpointer cb_data); +struct _MsnSoapMessage { +MsnSoapMessage *msn_soap_message_new(const char *action, xmlnode *xml); +void msn_soap_message_send(MsnSession *session, MsnSoapMessage *message, + const char *host, const char *path, gboolean secure, + MsnSoapCallback cb, gpointer cb_data); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/sound-theme-loader.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,71 @@
+ * @file sound-theme-loader.h Purple Sound Theme Loader Class API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_SOUND_THEME_LOADER_H +#define PURPLE_SOUND_THEME_LOADER_H +#include <glib-object.h> +#include "theme-loader.h" + * A purple sound theme loader. extends PurpleThemeLoader (theme-loader.h) + * This is a class designed to build sound themes + * PurpleSoundThemeLoader is a GObject. +typedef struct _PurpleSoundThemeLoader PurpleSoundThemeLoader; +typedef struct _PurpleSoundThemeLoaderClass PurpleSoundThemeLoaderClass; +#define PURPLE_TYPE_SOUND_THEME_LOADER (purple_sound_theme_loader_get_type()) +#define PURPLE_SOUND_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoader)) +#define PURPLE_SOUND_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoaderClass)) +#define PURPLE_IS_SOUND_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SOUND_THEME_LOADER)) +#define PURPLE_IS_SOUND_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SOUND_THEME_LOADER)) +#define PURPLE_SOUND_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SOUND_THEME_LOADER, PurpleSoundThemeLoaderClass)) +struct _PurpleSoundThemeLoader + PurpleThemeLoader parent; +struct _PurpleSoundThemeLoaderClass + PurpleThemeLoaderClass parent_class; +/**************************************************************************/ +/** @name Purple Theme-Loader API */ +/**************************************************************************/ +GType purple_sound_theme_loader_get_type(void); +#endif /* PURPLE_SOUND_THEME_LOADER_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/sound-theme.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,108 @@
+ * @file sound-theme.h Purple Sound Theme Abstact Class API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_SOUND_THEME_H +#define PURPLE_SOUND_THEME_H +#include <glib-object.h> + * extends PurpleTheme (theme.h) + * A purple sound theme. + * This is an object for Purple to represent a sound theme. + * PurpleSoundTheme is a PurpleTheme Object. +typedef struct _PurpleSoundTheme PurpleSoundTheme; +typedef struct _PurpleSoundThemeClass PurpleSoundThemeClass; +#define PURPLE_TYPE_SOUND_THEME (purple_sound_theme_get_type()) +#define PURPLE_SOUND_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_SOUND_THEME, PurpleSoundTheme)) +#define PURPLE_SOUND_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_SOUND_THEME, PurpleSoundThemeClass)) +#define PURPLE_IS_SOUND_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_SOUND_THEME)) +#define PURPLE_IS_SOUND_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_SOUND_THEME)) +#define PURPLE_SOUND_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_SOUND_THEME, PurpleSoundThemeClass)) +struct _PurpleSoundTheme +struct _PurpleSoundThemeClass + PurpleThemeClass parent_class; +/**************************************************************************/ +/** @name Purple Sound Theme API */ +/**************************************************************************/ +GType purple_sound_theme_get_type(void); + * Returns a copy of the filename for the sound event. + * @param theme The theme. + * @param event The purple sound event to look up. + * @returns The filename of the sound event. +const gchar *purple_sound_theme_get_file(PurpleSoundTheme *theme, + * Returns a copy of the directory and filename for the sound event + * @param theme The theme. + * @param event The purple sound event to look up + * @returns The directory + '/' + filename of the sound event. This is + * a newly allocated string that should be freed with g_free. +gchar *purple_sound_theme_get_file_full(PurpleSoundTheme *theme, + * Sets the filename for a given sound event + * @param theme The theme. + * @param event the purple sound event to look up + * @param filename the name of the file to be used for the event +void purple_sound_theme_set_file(PurpleSoundTheme *theme, + const gchar *filename); +#endif /* PURPLE_SOUND_THEME_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/sound.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,143 @@
+ * @file sound.h Sound API + * @see @ref sound-signals + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SOUND_H_ +#define _PURPLE_SOUND_H_ +/**************************************************************************/ +/**************************************************************************/ +typedef enum _PurpleSoundEventID + PURPLE_SOUND_BUDDY_ARRIVE = 0, /**< Buddy signs on. */ + PURPLE_SOUND_BUDDY_LEAVE, /**< Buddy signs off. */ + PURPLE_SOUND_RECEIVE, /**< Receive an IM. */ + PURPLE_SOUND_FIRST_RECEIVE, /**< Receive an IM that starts a conv. */ + PURPLE_SOUND_SEND, /**< Send an IM. */ + PURPLE_SOUND_CHAT_JOIN, /**< Someone joins a chat. */ + PURPLE_SOUND_CHAT_LEAVE, /**< Someone leaves a chat. */ + PURPLE_SOUND_CHAT_YOU_SAY, /**< You say something in a chat. */ + PURPLE_SOUND_CHAT_SAY, /**< Someone else says somthing in a chat. */ + PURPLE_SOUND_POUNCE_DEFAULT, /**< Default sound for a buddy pounce. */ + PURPLE_SOUND_CHAT_NICK, /**< Someone says your name in a chat. */ + PURPLE_SOUND_GOT_ATTENTION, /**< Got an attention */ + PURPLE_NUM_SOUNDS /**< Total number of sounds. */ +/** Operations used by the core to request that particular sound files, or the + * sound associated with a particular event, should be played. +typedef struct _PurpleSoundUiOps + void (*play_file)(const char *filename); + void (*play_event)(PurpleSoundEventID event); + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/**************************************************************************/ + * Plays the specified sound file. + * @param filename The file to play. + * @param account The account that this sound is associated with, or + * NULL if the sound is not associated with any specific + * account. This is needed for the "sounds while away?" + * preference to work correctly. +void purple_sound_play_file(const char *filename, const PurpleAccount *account); + * Plays the sound associated with the specified event. + * @param event The event. + * @param account The account that this sound is associated with, or + * NULL if the sound is not associated with any specific + * account. This is needed for the "sounds while away?" + * preference to work correctly. +void purple_sound_play_event(PurpleSoundEventID event, const PurpleAccount *account); + * Sets the UI sound operations + * @param ops The UI sound operations structure. +void purple_sound_set_ui_ops(PurpleSoundUiOps *ops); + * Gets the UI sound operations + * @return The UI sound operations structure. +PurpleSoundUiOps *purple_sound_get_ui_ops(void); + * Initializes the sound subsystem +void purple_sound_init(void); + * Shuts down the sound subsystem +void purple_sound_uninit(void); + * Returns the sound subsystem handle. + * @return The sound subsystem handle. +void *purple_sounds_get_handle(void); +#endif /* _PURPLE_SOUND_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/sslconn.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,346 @@
+ * @file sslconn.h SSL API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_SSLCONN_H_ +#define _PURPLE_SSLCONN_H_ +/** Possible SSL errors. */ + PURPLE_SSL_HANDSHAKE_FAILED = 1, + PURPLE_SSL_CONNECT_FAILED = 2, + PURPLE_SSL_CERTIFICATE_INVALID = 3 +#include "certificate.h" +#define PURPLE_SSL_DEFAULT_PORT 443 +/** @copydoc _PurpleSslConnection */ +typedef struct _PurpleSslConnection PurpleSslConnection; +typedef void (*PurpleSslInputFunction)(gpointer, PurpleSslConnection *, +typedef void (*PurpleSslErrorFunction)(PurpleSslConnection *, PurpleSslErrorType, +struct _PurpleSslConnection + /** Hostname to which the SSL connection will be made */ + /** Port to connect to */ + /** Data to pass to PurpleSslConnection::connect_cb() */ + /** Callback triggered once the SSL handshake is complete */ + PurpleSslInputFunction connect_cb; + /** Callback triggered if there is an error during connection */ + PurpleSslErrorFunction error_cb; + /** Data passed to PurpleSslConnection::recv_cb() */ + /** User-defined callback executed when the SSL connection receives data */ + PurpleSslInputFunction recv_cb; + /** File descriptor used to refer to the socket */ + /** Glib event source ID; used to refer to the received data callback + * in the glib eventloop */ + /** Data related to the underlying TCP connection */ + PurpleProxyConnectData *connect_data; + /** Internal connection data managed by the SSL backend (GnuTLS/LibNSS/whatever) */ + /** Verifier to use in authenticating the peer */ + PurpleCertificateVerifier *verifier; + /** Handle to the account for which this connection is being made. Can be NULL. */ + PurpleAccount *account; + * SSL implementation operations structure. + * Every SSL implementation must provide all of these and register it via purple_ssl_set_ops() + * These should not be called directly! Instead, use the purple_ssl_* functions. + /** Initializes the SSL system provided. + * @return @a TRUE if initialization succeeded + gboolean (*init)(void); + /** Unloads the SSL system. Inverse of PurpleSslOps::init. + * @see purple_ssl_uninit + /** Sets up the SSL connection for a #PurpleSslConnection once + * the TCP connection has been established + * @see purple_ssl_connect + void (*connectfunc)(PurpleSslConnection *gsc); + /** Destroys the internal data of the SSL connection provided. + * Freeing gsc itself is left to purple_ssl_close() + * @see purple_ssl_close + void (*close)(PurpleSslConnection *gsc); + /** Reads data from a connection (like POSIX read()) + * @param gsc Connection context + * @param data Pointer to buffer to drop data into + * @param len Maximum number of bytes to read + * @return Number of bytes actually written into @a data (which may be + * less than @a len), or <0 on error + size_t (*read)(PurpleSslConnection *gsc, void *data, size_t len); + /** Writes data to a connection (like POSIX send()) + * @param gsc Connection context + * @param data Data buffer to send data from + * @param len Number of bytes to send from buffer + * @return The number of bytes written to @a data (may be less than + * @a len) or <0 on error + * @see purple_ssl_write + size_t (*write)(PurpleSslConnection *gsc, const void *data, size_t len); + /** Obtains the certificate chain provided by the peer + * @param gsc Connection context + * @return A newly allocated list containing the certificates + * @see PurpleCertificate + * @todo Decide whether the ordering of certificates in this + * list can be guaranteed. + GList * (* get_peer_certificates)(PurpleSslConnection * gsc); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +/**************************************************************************/ +/**************************************************************************/ + * Returns whether or not SSL is currently supported. + * @return @a TRUE if SSL is supported, or @a FALSE otherwise. +gboolean purple_ssl_is_supported(void); + * Returns a human-readable string for an SSL error. + * @param error Error code + * @return Human-readable error explanation +const gchar * purple_ssl_strerror(PurpleSslErrorType error); + * Makes a SSL connection to the specified host and port. The caller + * should keep track of the returned value and use it to cancel the + * connection, if needed. + * @param account The account making the connection. + * @param host The destination host. + * @param port The destination port. + * @param func The SSL input handler function. + * @param error_func The SSL error handler function. This function + * should <strong>NOT</strong> call purple_ssl_close(). In + * the event of an error the #PurpleSslConnection will be + * @param data User-defined data. + * @return The SSL connection handle. +PurpleSslConnection *purple_ssl_connect(PurpleAccount *account, const char *host, + int port, PurpleSslInputFunction func, + PurpleSslErrorFunction error_func, + * Makes a SSL connection to the specified host and port, using the separate + * name to verify with the certificate. The caller should keep track of the + * returned value and use it to cancel the connection, if needed. + * @param account The account making the connection. + * @param host The destination host. + * @param port The destination port. + * @param func The SSL input handler function. + * @param error_func The SSL error handler function. This function + * should <strong>NOT</strong> call purple_ssl_close(). In + * the event of an error the #PurpleSslConnection will be + * @param ssl_host The hostname of the other peer (to verify the CN) + * @param data User-defined data. + * @return The SSL connection handle. +PurpleSslConnection *purple_ssl_connect_with_ssl_cn(PurpleAccount *account, const char *host, + int port, PurpleSslInputFunction func, + PurpleSslErrorFunction error_func, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_SSLCONN_C_) + * Makes a SSL connection using an already open file descriptor. + * @deprecated Use purple_ssl_connect_with_host_fd() instead. + * @param account The account making the connection. + * @param fd The file descriptor. + * @param func The SSL input handler function. + * @param error_func The SSL error handler function. + * @param data User-defined data. + * @return The SSL connection handle. +PurpleSslConnection *purple_ssl_connect_fd(PurpleAccount *account, int fd, + PurpleSslInputFunction func, + PurpleSslErrorFunction error_func, + * Makes a SSL connection using an already open file descriptor. + * @param account The account making the connection. + * @param fd The file descriptor. + * @param func The SSL input handler function. + * @param error_func The SSL error handler function. + * @param host The hostname of the other peer (to verify the CN) + * @param data User-defined data. + * @return The SSL connection handle. +PurpleSslConnection *purple_ssl_connect_with_host_fd(PurpleAccount *account, int fd, + PurpleSslInputFunction func, + PurpleSslErrorFunction error_func, + * Adds an input watcher for the specified SSL connection. + * Once the SSL handshake is complete, use this to watch for actual data across it. + * @param gsc The SSL connection handle. + * @param func The callback function. + * @param data User-defined data. +void purple_ssl_input_add(PurpleSslConnection *gsc, PurpleSslInputFunction func, + * Closes a SSL connection. + * @param gsc The SSL connection to close. +void purple_ssl_close(PurpleSslConnection *gsc); + * Reads data from an SSL connection. + * @param gsc The SSL connection handle. + * @param buffer The destination buffer. + * @param len The maximum number of bytes to read. + * @return The number of bytes read. +size_t purple_ssl_read(PurpleSslConnection *gsc, void *buffer, size_t len); + * Writes data to an SSL connection. + * @param gsc The SSL connection handle. + * @param buffer The buffer to write. + * @param len The length of the data to write. + * @return The number of bytes written. +size_t purple_ssl_write(PurpleSslConnection *gsc, const void *buffer, size_t len); + * Obtains the peer's presented certificates + * @param gsc The SSL connection handle + * @return The peer certificate chain, in the order of certificate, issuer, + * issuer's issuer, etc. @a NULL if no certificates have been provided, +GList * purple_ssl_get_peer_certificates(PurpleSslConnection *gsc); +/**************************************************************************/ +/** @name Subsystem API */ +/**************************************************************************/ + * Sets the current SSL operations structure. + * @param ops The SSL operations structure to assign. +void purple_ssl_set_ops(PurpleSslOps *ops); + * Returns the current SSL operations structure. + * @return The SSL operations structure. +PurpleSslOps *purple_ssl_get_ops(void); + * Initializes the SSL subsystem. +void purple_ssl_init(void); + * Uninitializes the SSL subsystem. +void purple_ssl_uninit(void); +#endif /* _PURPLE_SSLCONN_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/state.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,69 @@
+ * @file state.h State functions and definitions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * Changes the status of the user. + * @param session The MSN session. +void msn_change_status(MsnSession *session); + * Returns the string representation of an away type. + * @param type The away type. + * @return The string representation of the away type. +const char *msn_away_get_text(MsnAwayType type); +const char *msn_state_get_text(MsnAwayType state); +/* Get the CurrentMedia info from the XML node */ +char *msn_get_currentmedia(xmlnode *payloadNode); +/* Get the PSM info from the XML node */ +char *msn_get_psm(xmlnode *payloadNode); +MsnAwayType msn_state_from_account(PurpleAccount *account); +#endif /* MSN_STATE_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/status.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1103 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_STATUS_H_ +#define _PURPLE_STATUS_H_ + * @file status.h Status API + * A brief explanation of the status API: + * PurpleStatusType's are created by each PRPL. They outline the + * available statuses of the protocol. AIM, for example, supports + * an available state with an optional available message, an away + * state with a mandatory message, and an invisible state (which is + * technically "independent" of the other two, but we'll get into + * that later). PurpleStatusTypes are very permanent. They are + * hardcoded in each PRPL and will not change often. And because + * they are hardcoded, they do not need to be saved to any XML file. + * A PurpleStatus can be thought of as an "instance" of a PurpleStatusType. + * If you're familiar with object-oriented programming languages + * then this should be immediately clear. Say, for example, that + * one of your AIM buddies has set himself as "away." You have a + * PurpleBuddy node for this person in your buddy list. Purple wants + * to mark this buddy as "away," so it creates a new PurpleStatus. + * The PurpleStatus has its PurpleStatusType set to the "away" state + * for the oscar PRPL. The PurpleStatus also contains the buddy's + * away message. PurpleStatuses are sometimes saved, depending on + * the context. The current PurpleStatuses associated with each of + * your accounts are saved so that the next time you start Purple, + * your accounts will be set to their last known statuses. There + * is also a list of saved statuses that are written to the + * status.xml file. Also, each PurpleStatus has a "saveable" boolean. + * If "saveable" is set to FALSE then the status is NEVER saved. + * All PurpleStatuses should be inside a PurplePresence. + * A PurpleStatus is either "independent" or "exclusive." + * Independent statuses can be active or inactive and they don't + * affect anything else. However, you can only have one exclusive + * status per PurplePresence. If you activate one exclusive status, + * then the previous exclusive status is automatically deactivated. + * A PurplePresence is like a collection of PurpleStatuses (plus some + * other random info). For any buddy, or for any one of your accounts, + * or for any person with which you're chatting, you may know various + * amounts of information. This information is all contained in + * one PurplePresence. If one of your buddies is away and idle, + * then the presence contains the PurpleStatus for their awayness, + * and it contains their current idle time. PurplePresences are + * never saved to disk. The information they contain is only relevant + * for the current PurpleSession. + * PurpleStatusType's are created by each PRPL. They outline the + * available statuses of the protocol. AIM, for example, supports + * an available state with an optional available message, an away + * state with a mandatory message, and an invisible state (which is + * technically "independent" of the other two, but we'll get into + * that later). PurpleStatusTypes are very permanent. They are + * hardcoded in each PRPL and will not change often. And because + * they are hardcoded, they do not need to be saved to any XML file. +typedef struct _PurpleStatusType PurpleStatusType; +typedef struct _PurpleStatusAttr PurpleStatusAttr; +typedef struct _PurplePresence PurplePresence; +typedef struct _PurpleStatus PurpleStatus; +typedef struct _PurpleMood { + const char *description; + * A context for a presence. + * The context indicates to what the presence applies. + PURPLE_PRESENCE_CONTEXT_UNSET = 0, + PURPLE_PRESENCE_CONTEXT_ACCOUNT, + PURPLE_PRESENCE_CONTEXT_CONV, + PURPLE_PRESENCE_CONTEXT_BUDDY +} PurplePresenceContext; + * A primitive defining the basic structure of a status type. + * If you add a value to this enum, make sure you update + * the status_primitive_map and primitive_scores arrays in status.c. + PURPLE_STATUS_UNSET = 0, + PURPLE_STATUS_AVAILABLE, + PURPLE_STATUS_UNAVAILABLE, + PURPLE_STATUS_INVISIBLE, + PURPLE_STATUS_EXTENDED_AWAY, + PURPLE_STATUS_NUM_PRIMITIVES +} PurpleStatusPrimitive; +#include "conversation.h" +#define PURPLE_TUNE_ARTIST "tune_artist" +#define PURPLE_TUNE_TITLE "tune_title" +#define PURPLE_TUNE_ALBUM "tune_album" +#define PURPLE_TUNE_GENRE "tune_genre" +#define PURPLE_TUNE_COMMENT "tune_comment" +#define PURPLE_TUNE_TRACK "tune_track" +#define PURPLE_TUNE_TIME "tune_time" +#define PURPLE_TUNE_YEAR "tune_year" +#define PURPLE_TUNE_URL "tune_url" +#define PURPLE_TUNE_FULL "tune_full" +#define PURPLE_MOOD_NAME "mood" +#define PURPLE_MOOD_COMMENT "moodtext" +/**************************************************************************/ +/** @name PurpleStatusPrimitive API */ +/**************************************************************************/ + * Lookup the id of a primitive status type based on the type. This + * ID is a unique plain-text name of the status, without spaces. + * @param type A primitive status type. + * @return The unique ID for this type. +const char *purple_primitive_get_id_from_type(PurpleStatusPrimitive type); + * Lookup the name of a primitive status type based on the type. This + * name is the plain-English name of the status type. It is usually one + * @param type A primitive status type. + * @return The name of this type, suitable for users to see. +const char *purple_primitive_get_name_from_type(PurpleStatusPrimitive type); + * Lookup the value of a primitive status type based on the id. The + * ID is a unique plain-text name of the status, without spaces. + * @param id The unique ID of a primitive status type. + * @return The PurpleStatusPrimitive value. +PurpleStatusPrimitive purple_primitive_get_type_from_id(const char *id); +/**************************************************************************/ +/** @name PurpleStatusType API */ +/**************************************************************************/ + * Creates a new status type. + * @param primitive The primitive status type. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. + * @param saveable TRUE if the information set for this status by the + * user can be saved for future sessions. + * @param user_settable TRUE if this is a status the user can manually set. + * @param independent TRUE if this is an independent (non-exclusive) + * @return A new status type. +PurpleStatusType *purple_status_type_new_full(PurpleStatusPrimitive primitive, + const char *id, const char *name, + gboolean user_settable, + * Creates a new status type with some default values ( + * saveable and not independent). + * @param primitive The primitive status type. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. + * @param user_settable TRUE if this is a status the user can manually set. + * @return A new status type. +PurpleStatusType *purple_status_type_new(PurpleStatusPrimitive primitive, + const char *id, const char *name, + gboolean user_settable); + * Creates a new status type with attributes. + * @param primitive The primitive status type. + * @param id The ID of the status type, or @c NULL to use the id of + * the primitive status type. + * @param name The name presented to the user, or @c NULL to use the + * name of the primitive status type. + * @param saveable TRUE if the information set for this status by the + * user can be saved for future sessions. + * @param user_settable TRUE if this is a status the user can manually set. + * @param independent TRUE if this is an independent (non-exclusive) + * @param attr_id The ID of the first attribute. + * @param attr_name The name of the first attribute. + * @param attr_value The value type of the first attribute attribute. + * @param ... Additional attribute information. + * @return A new status type. +PurpleStatusType *purple_status_type_new_with_attrs(PurpleStatusPrimitive primitive, + gboolean user_settable, + PurpleValue *attr_value, ...) G_GNUC_NULL_TERMINATED; + * Destroys a status type. + * @param status_type The status type to destroy. +void purple_status_type_destroy(PurpleStatusType *status_type); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Sets a status type's primary attribute. + * The value for the primary attribute is used as the description for + * the particular status type. An example is an away message. The message + * would be the primary attribute. + * @param status_type The status type. + * @param attr_id The ID of the primary attribute. + * @deprecated This function isn't used and should be removed in 3.0.0. +void purple_status_type_set_primary_attr(PurpleStatusType *status_type, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Adds an attribute to a status type. + * @param status_type The status type to add the attribute to. + * @param id The ID of the attribute. + * @param name The name presented to the user. + * @param value The value type of this attribute. + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. +void purple_status_type_add_attr(PurpleStatusType *status_type, const char *id, + const char *name, PurpleValue *value); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Adds multiple attributes to a status type. + * @param status_type The status type to add the attribute to. + * @param id The ID of the first attribute. + * @param name The description of the first attribute. + * @param value The value type of the first attribute attribute. + * @param ... Additional attribute information. + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. +void purple_status_type_add_attrs(PurpleStatusType *status_type, const char *id, + const char *name, PurpleValue *value, ...) G_GNUC_NULL_TERMINATED; +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Adds multiple attributes to a status type using a va_list. + * @param status_type The status type to add the attribute to. + * @param args The va_list of attributes. + * @deprecated This function isn't needed and should be removed in 3.0.0. + * Status type attributes should be set when the status type + * is created, in the call to purple_status_type_new_with_attrs. +void purple_status_type_add_attrs_vargs(PurpleStatusType *status_type, + * Returns the primitive type of a status type. + * @param status_type The status type. + * @return The primitive type of the status type. +PurpleStatusPrimitive purple_status_type_get_primitive( + const PurpleStatusType *status_type); + * Returns the ID of a status type. + * @param status_type The status type. + * @return The ID of the status type. +const char *purple_status_type_get_id(const PurpleStatusType *status_type); + * Returns the name of a status type. + * @param status_type The status type. + * @return The name of the status type. +const char *purple_status_type_get_name(const PurpleStatusType *status_type); + * Returns whether or not the status type is saveable. + * @param status_type The status type. + * @return TRUE if user-defined statuses based off this type are saveable. +gboolean purple_status_type_is_saveable(const PurpleStatusType *status_type); + * Returns whether or not the status type can be set or modified by the + * @param status_type The status type. + * @return TRUE if the status type can be set or modified by the user. + * FALSE if it's a protocol-set setting. +gboolean purple_status_type_is_user_settable(const PurpleStatusType *status_type); + * Returns whether or not the status type is independent. + * Independent status types are non-exclusive. If other status types on + * the same hierarchy level are set, this one will not be affected. + * @param status_type The status type. + * @return TRUE if the status type is independent, or FALSE otherwise. +gboolean purple_status_type_is_independent(const PurpleStatusType *status_type); + * Returns whether the status type is exclusive. + * @param status_type The status type. + * @return TRUE if the status type is exclusive, FALSE otherwise. +gboolean purple_status_type_is_exclusive(const PurpleStatusType *status_type); + * Returns whether or not a status type is available. + * Available status types are online and possibly invisible, but not away. + * @param status_type The status type. + * @return TRUE if the status is available, or FALSE otherwise. +gboolean purple_status_type_is_available(const PurpleStatusType *status_type); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Returns a status type's primary attribute ID. + * @param type The status type. + * @return The primary attribute's ID. + * @deprecated This function isn't used and should be removed in 3.0.0. +const char *purple_status_type_get_primary_attr(const PurpleStatusType *type); + * Returns the attribute with the specified ID. + * @param status_type The status type containing the attribute. + * @param id The ID of the desired attribute. + * @return The attribute, if found. NULL otherwise. +PurpleStatusAttr *purple_status_type_get_attr(const PurpleStatusType *status_type, + * Returns a list of all attributes in a status type. + * @param status_type The status type. + * @constreturn The list of attributes. +GList *purple_status_type_get_attrs(const PurpleStatusType *status_type); + * Find the PurpleStatusType with the given id. + * @param status_types A list of status types. Often account->status_types. + * @param id The unique ID of the status type you wish to find. + * @return The status type with the given ID, or NULL if one could +const PurpleStatusType *purple_status_type_find_with_id(GList *status_types, +/**************************************************************************/ +/** @name PurpleStatusAttr API */ +/**************************************************************************/ + * Creates a new status attribute. + * @param id The ID of the attribute. + * @param name The name presented to the user. + * @param value_type The type of data contained in the attribute. + * @return A new status attribute. +PurpleStatusAttr *purple_status_attr_new(const char *id, const char *name, + PurpleValue *value_type); + * Destroys a status attribute. + * @param attr The status attribute to destroy. +void purple_status_attr_destroy(PurpleStatusAttr *attr); + * Returns the ID of a status attribute. + * @param attr The status attribute. + * @return The status attribute's ID. +const char *purple_status_attr_get_id(const PurpleStatusAttr *attr); + * Returns the name of a status attribute. + * @param attr The status attribute. + * @return The status attribute's name. +const char *purple_status_attr_get_name(const PurpleStatusAttr *attr); + * Returns the value of a status attribute. + * @param attr The status attribute. + * @return The status attribute's value. +PurpleValue *purple_status_attr_get_value(const PurpleStatusAttr *attr); +/**************************************************************************/ +/** @name PurpleStatus API */ +/**************************************************************************/ + * Creates a new status. + * @param status_type The type of status. + * @param presence The parent presence. + * @return The new status. +PurpleStatus *purple_status_new(PurpleStatusType *status_type, + PurplePresence *presence); + * @param status The status to destroy. +void purple_status_destroy(PurpleStatus *status); + * Sets whether or not a status is active. + * This should only be called by the account, conversation, and buddy APIs. + * @param status The status. + * @param active The active state. +void purple_status_set_active(PurpleStatus *status, gboolean active); + * Sets whether or not a status is active. + * This should only be called by the account, conversation, and buddy APIs. + * @param status The status. + * @param active The active state. + * @param args A list of attributes to set on the status. This list is + * composed of key/value pairs, where each key is a valid + * attribute name for this PurpleStatusType. The list should +void purple_status_set_active_with_attrs(PurpleStatus *status, gboolean active, + * Sets whether or not a status is active. + * This should only be called by the account, conversation, and buddy APIs. + * @param status The status. + * @param active The active state. + * @param attrs A list of attributes to set on the status. This list is + * composed of key/value pairs, where each key is a valid + * attribute name for this PurpleStatusType. The list is + * not modified or freed by this function. +void purple_status_set_active_with_attrs_list(PurpleStatus *status, gboolean active, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Sets the boolean value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @param value The boolean value. + * @deprecated This function is only used by status.c and should be made +void purple_status_set_attr_boolean(PurpleStatus *status, const char *id, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Sets the integer value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @param value The integer value. + * @deprecated This function is only used by status.c and should be made +void purple_status_set_attr_int(PurpleStatus *status, const char *id, +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Sets the string value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @param value The string value. + * @deprecated This function is only used by status.c and should be made +void purple_status_set_attr_string(PurpleStatus *status, const char *id, + * Returns the status's type. + * @param status The status. + * @return The status's type. +PurpleStatusType *purple_status_get_type(const PurpleStatus *status); + * Returns the status's presence. + * @param status The status. + * @return The status's presence. +PurplePresence *purple_status_get_presence(const PurpleStatus *status); + * Returns the status's type ID. + * This is a convenience method for + * purple_status_type_get_id(purple_status_get_type(status)). + * @param status The status. + * @return The status's ID. +const char *purple_status_get_id(const PurpleStatus *status); + * Returns the status's name. + * This is a convenience method for + * purple_status_type_get_name(purple_status_get_type(status)). + * @param status The status. + * @return The status's name. +const char *purple_status_get_name(const PurpleStatus *status); + * Returns whether or not a status is independent. + * This is a convenience method for + * purple_status_type_is_independent(purple_status_get_type(status)). + * @param status The status. + * @return TRUE if the status is independent, or FALSE otherwise. +gboolean purple_status_is_independent(const PurpleStatus *status); + * Returns whether or not a status is exclusive. + * This is a convenience method for + * purple_status_type_is_exclusive(purple_status_get_type(status)). + * @param status The status. + * @return TRUE if the status is exclusive, FALSE otherwise. +gboolean purple_status_is_exclusive(const PurpleStatus *status); + * Returns whether or not a status is available. + * Available statuses are online and possibly invisible, but not away or idle. + * This is a convenience method for + * purple_status_type_is_available(purple_status_get_type(status)). + * @param status The status. + * @return TRUE if the status is available, or FALSE otherwise. +gboolean purple_status_is_available(const PurpleStatus *status); + * Returns the active state of a status. + * @param status The status. + * @return The active state of the status. +gboolean purple_status_is_active(const PurpleStatus *status); + * Returns whether or not a status is considered 'online' + * @param status The status. + * @return TRUE if the status is considered online, FALSE otherwise +gboolean purple_status_is_online(const PurpleStatus *status); + * Returns the value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @return The value of the attribute. +PurpleValue *purple_status_get_attr_value(const PurpleStatus *status, + * Returns the boolean value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @return The boolean value of the attribute. +gboolean purple_status_get_attr_boolean(const PurpleStatus *status, + * Returns the integer value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @return The integer value of the attribute. +int purple_status_get_attr_int(const PurpleStatus *status, const char *id); + * Returns the string value of an attribute in a status with the specified ID. + * @param status The status. + * @param id The attribute ID. + * @return The string value of the attribute. +const char *purple_status_get_attr_string(const PurpleStatus *status, + * Compares two statuses for availability. + * @param status1 The first status. + * @param status2 The second status. + * @return -1 if @a status1 is more available than @a status2. + * 0 if @a status1 is equal to @a status2. + * 1 if @a status2 is more available than @a status1. +gint purple_status_compare(const PurpleStatus *status1, const PurpleStatus *status2); +/**************************************************************************/ +/** @name PurplePresence API */ +/**************************************************************************/ + * Creates a new presence. + * @param context The presence context. + * @return A new presence. +PurplePresence *purple_presence_new(PurplePresenceContext context); + * Creates a presence for an account. + * @param account The account. + * @return The new presence. +PurplePresence *purple_presence_new_for_account(PurpleAccount *account); + * Creates a presence for a conversation. + * @param conv The conversation. + * @return The new presence. +PurplePresence *purple_presence_new_for_conv(PurpleConversation *conv); + * Creates a presence for a buddy. + * @param buddy The buddy. + * @return The new presence. +PurplePresence *purple_presence_new_for_buddy(PurpleBuddy *buddy); + * All statuses added to this list will be destroyed along with + * @param presence The presence to destroy. +void purple_presence_destroy(PurplePresence *presence); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Adds a status to a presence. + * @param presence The presence. + * @param status The status to add. + * @deprecated This function is only used by purple_presence_add_list, + * and both should be removed in 3.0.0. +void purple_presence_add_status(PurplePresence *presence, PurpleStatus *status); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_) + * Adds a list of statuses to the presence. + * @param presence The presence. + * @param source_list The source list of statuses to add, which is not + * modified or freed by this function. + * @deprecated This function isn't used and should be removed in 3.0.0. +void purple_presence_add_list(PurplePresence *presence, GList *source_list); + * Sets the active state of a status in a presence. + * Only independent statuses can be set unactive. Normal statuses can only + * be set active, so if you wish to disable a status, set another + * non-independent status to active, or use purple_presence_switch_status(). + * @param presence The presence. + * @param status_id The ID of the status. + * @param active The active state. +void purple_presence_set_status_active(PurplePresence *presence, + const char *status_id, gboolean active); + * Switches the active status in a presence. + * This is similar to purple_presence_set_status_active(), except it won't + * activate independent statuses. + * @param presence The presence. + * @param status_id The status ID to switch to. +void purple_presence_switch_status(PurplePresence *presence, + const char *status_id); + * Sets the idle state and time on a presence. + * @param presence The presence. + * @param idle The idle state. + * @param idle_time The idle time, if @a idle is TRUE. This + * is the time at which the user became idle, + * in seconds since the epoch. If this value is + * unknown then 0 should be used. +void purple_presence_set_idle(PurplePresence *presence, gboolean idle, + * Sets the login time on a presence. + * @param presence The presence. + * @param login_time The login time. +void purple_presence_set_login_time(PurplePresence *presence, time_t login_time); + * Returns the presence's context. + * @param presence The presence. + * @return The presence's context. +PurplePresenceContext purple_presence_get_context(const PurplePresence *presence); + * Returns a presence's account. + * @param presence The presence. + * @return The presence's account. +PurpleAccount *purple_presence_get_account(const PurplePresence *presence); + * Returns a presence's conversation. + * @param presence The presence. + * @return The presence's conversation. +PurpleConversation *purple_presence_get_conversation(const PurplePresence *presence); + * Returns a presence's chat user. + * @param presence The presence. + * @return The chat's user. +const char *purple_presence_get_chat_user(const PurplePresence *presence); + * Returns the presence's buddy. + * @param presence The presence. + * @return The presence's buddy. +PurpleBuddy *purple_presence_get_buddy(const PurplePresence *presence); + * Returns all the statuses in a presence. + * @param presence The presence. + * @constreturn The statuses. +GList *purple_presence_get_statuses(const PurplePresence *presence); + * Returns the status with the specified ID from a presence. + * @param presence The presence. + * @param status_id The ID of the status. + * @return The status if found, or NULL. +PurpleStatus *purple_presence_get_status(const PurplePresence *presence, + const char *status_id); + * Returns the active exclusive status from a presence. + * @param presence The presence. + * @return The active exclusive status. +PurpleStatus *purple_presence_get_active_status(const PurplePresence *presence); + * Returns whether or not a presence is available. + * Available presences are online and possibly invisible, but not away or idle. + * @param presence The presence. + * @return TRUE if the presence is available, or FALSE otherwise. +gboolean purple_presence_is_available(const PurplePresence *presence); + * Returns whether or not a presence is online. + * @param presence The presence. + * @return TRUE if the presence is online, or FALSE otherwise. +gboolean purple_presence_is_online(const PurplePresence *presence); + * Returns whether or not a status in a presence is active. + * A status is active if itself or any of its sub-statuses are active. + * @param presence The presence. + * @param status_id The ID of the status. + * @return TRUE if the status is active, or FALSE. +gboolean purple_presence_is_status_active(const PurplePresence *presence, + const char *status_id); + * Returns whether or not a status with the specified primitive type + * in a presence is active. + * A status is active if itself or any of its sub-statuses are active. + * @param presence The presence. + * @param primitive The status primitive. + * @return TRUE if the status is active, or FALSE. +gboolean purple_presence_is_status_primitive_active( + const PurplePresence *presence, PurpleStatusPrimitive primitive); + * Returns whether or not a presence is idle. + * @param presence The presence. + * @return TRUE if the presence is idle, or FALSE otherwise. + * If the presence is offline (purple_presence_is_online() + * returns FALSE) then FALSE is returned. +gboolean purple_presence_is_idle(const PurplePresence *presence); + * Returns the presence's idle time. + * @param presence The presence. + * @return The presence's idle time. +time_t purple_presence_get_idle_time(const PurplePresence *presence); + * Returns the presence's login time. + * @param presence The presence. + * @return The presence's login time. +time_t purple_presence_get_login_time(const PurplePresence *presence); + * Compares two presences for availability. + * @param presence1 The first presence. + * @param presence2 The second presence. + * @return -1 if @a presence1 is more available than @a presence2. + * 0 if @a presence1 is equal to @a presence2. + * 1 if @a presence1 is less available than @a presence2. +gint purple_presence_compare(const PurplePresence *presence1, + const PurplePresence *presence2); +/**************************************************************************/ +/** @name Status subsystem */ +/**************************************************************************/ + * Get the handle for the status subsystem. + * @return the handle to the status subsystem +void *purple_status_get_handle(void); + * Initializes the status subsystem. +void purple_status_init(void); + * Uninitializes the status subsystem. +void purple_status_uninit(void); +#endif /* _PURPLE_STATUS_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/stringref.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,138 @@
+/* TODO: Can we just replace this whole thing with a GCache */ + * @file stringref.h Reference-counted immutable strings + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_STRINGREF_H_ +#define _PURPLE_STRINGREF_H_ +typedef struct _PurpleStringref PurpleStringref; + * Creates an immutable reference-counted string object. The newly + * created object will have a reference count of 1. + * @param value This will be the value of the string; it will be + * @return A newly allocated string reference object with a refcount +PurpleStringref *purple_stringref_new(const char *value); + * Creates an immutable reference-counted string object. The newly + * created object will have a reference count of zero, and if it is + * not referenced before the next iteration of the mainloop it will + * be freed at that time. + * @param value This will be the value of the string; it will be + * @return A newly allocated string reference object with a refcount +PurpleStringref *purple_stringref_new_noref(const char *value); + * Creates an immutable reference-counted string object from a printf + * format specification and arguments. The created object will have a + * reference count of 1. + * @param format A printf-style format specification. + * @return A newly allocated string reference object with a refcount +PurpleStringref *purple_stringref_printf(const char *format, ...); + * Increase the reference count of the given stringref. + * @param stringref String to be referenced. + * @return A pointer to the referenced string. +PurpleStringref *purple_stringref_ref(PurpleStringref *stringref); + * Decrease the reference count of the given stringref. If this + * reference count reaches zero, the stringref will be freed; thus + * you MUST NOT use this string after dereferencing it. + * @param stringref String to be dereferenced. +void purple_stringref_unref(PurpleStringref *stringref); + * Retrieve the value of a stringref. + * @note This value should not be cached or stored in a local variable. + * While there is nothing inherently incorrect about doing so, it + * is easy to forget that the cached value is in fact a + * reference-counted object and accidentally use it after + * dereferencing. This is more problematic for a reference- + * counted object than a heap-allocated object, as it may seem to + * be valid or invalid nondeterministically based on how many + * other references to it exist. + * @param stringref String reference from which to retrieve the value. + * @return The contents of the string reference. +const char *purple_stringref_value(const PurpleStringref *stringref); + * Compare two stringrefs for string equality. This returns the same + * value as strcmp would, where <0 indicates that s1 is "less than" s2 + * in the ASCII lexicography, 0 indicates equality, etc. + * @param s1 The reference string. + * @param s2 The string to compare against the reference. + * @return An ordering indication on s1 and s2. +int purple_stringref_cmp(const PurpleStringref *s1, const PurpleStringref *s2); + * Find the length of the string inside a stringref. + * @param stringref The string in whose length we are interested. + * @return The length of the string in stringref +size_t purple_stringref_len(const PurpleStringref *stringref); +#endif /* _PURPLE_STRINGREF_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/stun.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,88 @@
+ * @file stun.h STUN API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/**************************************************************************/ +/**************************************************************************/ +typedef struct _PurpleStunNatDiscovery PurpleStunNatDiscovery; + PURPLE_STUN_STATUS_UNDISCOVERED = -1, + PURPLE_STUN_STATUS_UNKNOWN, /* no STUN server reachable */ + PURPLE_STUN_STATUS_DISCOVERING, + PURPLE_STUN_STATUS_DISCOVERED + PURPLE_STUN_NAT_TYPE_PUBLIC_IP, + PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT, + PURPLE_STUN_NAT_TYPE_FULL_CONE, + PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE, + PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE, + PURPLE_STUN_NAT_TYPE_SYMMETRIC +struct _PurpleStunNatDiscovery { + PurpleStunStatus status; + PurpleStunNatType type; +typedef void (*StunCallback) (PurpleStunNatDiscovery *); + * Starts a NAT discovery. It returns a PurpleStunNatDiscovery if the discovery + * is already done. Otherwise the callback is called when the discovery is over + * and NULL is returned. + * @param cb The callback to call when the STUN discovery is finished if the + * discovery would block. If the discovery is done, this is NOT + * @return a PurpleStunNatDiscovery which includes the public IP and the type + * of NAT or NULL is discovery would block +PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb); +void purple_stun_init(void); +#endif /* _PURPLE_STUN_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/switchboard.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,266 @@
+ * @file switchboard.h MSN switchboard functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef MSN_SWITCHBOARD_H +#define MSN_SWITCHBOARD_H +typedef struct _MsnSwitchBoard MsnSwitchBoard; + MSN_SB_ERROR_NONE, /**< No error. */ + MSN_SB_ERROR_CAL, /**< The user could not join (answer the call). */ + MSN_SB_ERROR_OFFLINE, /**< The account is offline. */ + MSN_SB_ERROR_USER_OFFLINE, /**< The user to call is offline. */ + MSN_SB_ERROR_CONNECTION, /**< There was a connection error. */ + MSN_SB_ERROR_TOO_FAST, /**< We are sending too fast */ + MSN_SB_ERROR_AUTHFAILED, /**< Authentication failed joining the switchboard session */ + MSN_SB_ERROR_UNKNOWN /**< An unknown error occurred. */ + MSN_SB_FLAG_IM = 0x01, /**< This switchboard is being used for a conversation. */ + MSN_SB_FLAG_FT = 0x02 /**< This switchboard is being used for file transfer. */ + * A place where a bunch of users send messages to the rest of the users. + MsnSession *session; /**< Our parent session. */ + MsnServConn *servconn; /**< The physical connection for this switchboard. */ + MsnCmdProc *cmdproc; /**< Convenience variable for servconn->cmdproc. */ + PurpleConversation *conv; /**< The conversation that displays the + messages of this switchboard, or @c NULL if + this is a helper switchboard. */ + gboolean empty; /**< A flag that states if the swithcboard has no + gboolean invited; /**< A flag that states if we were invited to the + gboolean ready; /**< A flag that states if this switchboard is + gboolean closed; /**< A flag that states if the switchboard has + been closed by the user. */ + gboolean destroying; /**< A flag that states if the switchboard is + alredy on the process of destruction. */ + GQueue *msg_queue; /**< Queue of messages to send. */ + GList *ack_list; /**< List of messages waiting for an ack. */ + MsnSBErrorType error; /**< The error that occurred in this switchboard + GList *slplinks; /**< The list of slplinks that are using this switchboard. */ + guint reconn_timeout_h; + * Initialize the variables for switchboard creation. +void msn_switchboard_init(void); + * Destroy the variables for switchboard creation. +void msn_switchboard_end(void); + * Creates a new switchboard. + * @param session The MSN session. + * @return The new switchboard. +MsnSwitchBoard *msn_switchboard_new(MsnSession *session); + * Destroys a switchboard. + * @param swboard The switchboard to destroy. +void msn_switchboard_destroy(MsnSwitchBoard *swboard); + * Sets the auth key the switchboard must use when connecting. + * @param swboard The switchboard. + * @param key The auth key. +void msn_switchboard_set_auth_key(MsnSwitchBoard *swboard, const char *key); + * Returns the auth key the switchboard must use when connecting. + * @param swboard The switchboard. + * @return The auth key. +const char *msn_switchboard_get_auth_key(MsnSwitchBoard *swboard); + * Sets the session ID the switchboard must use when connecting. + * @param swboard The switchboard. + * @param id The session ID. +void msn_switchboard_set_session_id(MsnSwitchBoard *swboard, const char *id); + * Returns the session ID the switchboard must use when connecting. + * @param swboard The switchboard. + * @return The session ID. +const char *msn_switchboard_get_session_id(MsnSwitchBoard *swboard); + * Returns the next chat ID for use by a switchboard. +int msn_switchboard_get_chat_id(void); + * Sets whether or not we were invited to this switchboard. + * @param swboard The switchboard. + * @param invite @c TRUE if invited, @c FALSE otherwise. +void msn_switchboard_set_invited(MsnSwitchBoard *swboard, gboolean invited); + * Returns whether or not we were invited to this switchboard. + * @param swboard The switchboard. + * @return @c TRUE if invited, @c FALSE otherwise. +gboolean msn_switchboard_is_invited(MsnSwitchBoard *swboard); + * Connects to a switchboard. + * @param swboard The switchboard. + * @param host The switchboard server host. + * @param port The switcbharod server port. + * @return @c TRUE if able to connect, or @c FALSE otherwise. +gboolean msn_switchboard_connect(MsnSwitchBoard *swboard, + const char *host, int port); + * Disconnects from a switchboard. + * @param swboard The switchboard to disconnect from. +void msn_switchboard_disconnect(MsnSwitchBoard *swboard); + * Closes the switchboard. + * Called when a conversation is closed. + * @param swboard The switchboard to close. +void msn_switchboard_close(MsnSwitchBoard *swboard); + * Release a switchboard from a certain function. + * @param swboard The switchboard to release. + * @param flag The flag that states the function. +void msn_switchboard_release(MsnSwitchBoard *swboard, MsnSBFlag flag); + * Returns whether or not we currently can send a message through this + * @param swboard The switchboard. + * @return @c TRUE if a message can be sent, @c FALSE otherwise. +gboolean msn_switchboard_can_send(MsnSwitchBoard *swboard); + * Sends a message through this switchboard. + * @param swboard The switchboard. + * @param msg The message. + * @param queue A flag that states if we want this message to be queued (in + * the case it cannot currently be sent). + * @return @c TRUE if a message can be sent, @c FALSE otherwise. +void msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg, +msg_error_helper(MsnCmdProc *cmdproc, MsnMessage *msg, MsnMsgErrorType error); +gboolean msn_switchboard_chat_leave(MsnSwitchBoard *swboard); +gboolean msn_switchboard_chat_invite(MsnSwitchBoard *swboard, const char *who); +gboolean msn_switchboard_request(MsnSwitchBoard *swboard); +void msn_switchboard_request_add_user(MsnSwitchBoard *swboard, const char *user); + * Shows an ink message from this switchboard. + * @param swboard The switchboard. + * @param passport The user that sent the ink. + * @param data The ink data. +void msn_switchboard_show_ink(MsnSwitchBoard *swboard, const char *passport, +#endif /* MSN_SWITCHBOARD_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/table.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,93 @@
+ * @file table.h MSN helper structure + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnTable MsnTable; +#include "transaction.h" +typedef void (*MsnMsgTypeCb)(MsnCmdProc *cmdproc, MsnMessage *msg); + GHashTable *cmds; /**< Callbacks that manage command response. */ + GHashTable *msgs; /**< Callbacks that manage incoming messages. */ + GHashTable *errors; /**< Callbacks that manage command errors. */ + GHashTable *async; /**< Callbacks that manage incoming asyncronous messages. */ + /* TODO: Does this one is really needed? */ + GHashTable *fallback; /**< Fallback callback. */ + * Create a new instance of a MsnTable which map commands, errors and messages + * with callbacks that will handle it. + * @return A new MsnTable. +MsnTable *msn_table_new(void); + * @param table The MsnTable to be destroyed. +void msn_table_destroy(MsnTable *table); + * Relate an incomming command from server with a callback able to handle + * @param table The MsnTable. + * @param command If NULL this add an incoming asyncronous command set in answer. + * Else, the command sent. + * @param answer The server answer to 'command'. If 'command' is NULL, + * the asyncronous command sent by the server. + * @param cb Callback to handle this event. +void msn_table_add_cmd(MsnTable *table, char *command, char *answer, + * Set a callback to handle incoming command errors. + * @param table The MsnTable. + * @param answer Incoming command with error. + * @param cb Callback to handle this error. +void msn_table_add_error(MsnTable *table, char *answer, MsnErrorCb cb); + * Relate a message Content-type with a callback able to handle it. + * @param table The MsnTable. + * @param type The Message Content-Type. + * @param cb Callback to handle this Content-type. +void msn_table_add_msg_type(MsnTable *table, char *type, MsnMsgTypeCb cb); +#endif /* MSN_TABLE_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/theme-loader.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,93 @@
+ * @file theme-loader.h Purple Theme Loader Abstact Class API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_THEME_LOADER_H +#define PURPLE_THEME_LOADER_H +#include <glib-object.h> + * A purple theme loader. + * This is an abstract class for Purple to use with the Purple theme manager. + * The loader is responsible for building each type of theme + * PurpleThemeLoader is a GObject. +typedef struct _PurpleThemeLoader PurpleThemeLoader; +typedef struct _PurpleThemeLoaderClass PurpleThemeLoaderClass; +#define PURPLE_TYPE_THEME_LOADER (purple_theme_loader_get_type()) +#define PURPLE_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoader)) +#define PURPLE_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderClass)) +#define PURPLE_IS_THEME_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_THEME_LOADER)) +#define PURPLE_IS_THEME_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_THEME_LOADER)) +#define PURPLE_THEME_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderClass)) +struct _PurpleThemeLoader +struct _PurpleThemeLoaderClass + GObjectClass parent_class; + PurpleTheme *((*purple_theme_loader_build)(const gchar*)); +/**************************************************************************/ +/** @name Purple Theme-Loader API */ +/**************************************************************************/ +GType purple_theme_loader_get_type(void); + * Returns the string representing the type of the theme loader + * @param self The theme loader + * @returns The string representing this type +const gchar *purple_theme_loader_get_type_string(PurpleThemeLoader *self); + * Creates a new PurpleTheme + * @param loader The theme loader + * @param dir The directory containing the theme + * @returns A PurpleTheme containing the information from the directory +PurpleTheme *purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir); +#endif /* PURPLE_THEME_LOADER_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/theme-manager.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,139 @@
+ * @file theme-manager.h Theme Manager API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef PURPLE_THEME_MANAGER_H +#define PURPLE_THEME_MANAGER_H +#include <glib-object.h> +#include "theme-loader.h" +typedef void (*PTFunc) (PurpleTheme *); +typedef struct _PurpleThemeManager PurpleThemeManager; +typedef struct _PurpleThemeManagerClass PurpleThemeManagerClass; +#define PURPLE_TYPE_THEME_MANAGER (purple_theme_manager_get_type()) +#define PURPLE_THEME_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManager)) +#define PURPLE_THEME_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManagerClass)) +#define PURPLE_IS_THEME_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_THEME_MANAGER)) +#define PURPLE_IS_THEME_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_THEME_MANAGER)) +#define PURPLE_GET_THEME_MANAGER_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_THEME_MANAGER, PurpleThemeManagerClass)) +struct _PurpleThemeManager { +struct _PurpleThemeManagerClass { + GObjectClass parent_class; +/**************************************************************************/ +/** @name Purple Theme Manager API */ +/**************************************************************************/ +GType purple_theme_manager_get_type(void); + * Initalizes the theme manager. +void purple_theme_manager_init(void); + * Uninitalizes the manager then frees all the themes and loaders it is +void purple_theme_manager_uninit(void); + * Rebuilds all the themes in the theme manager. + * (Removes all current themes but keeps the added loaders.) +void purple_theme_manager_refresh(void); + * Finds the PurpleTheme object stored by the theme manager. + * @param name The name of the PurpleTheme. + * @param type The type of the PurpleTheme. + * @returns The PurpleTheme, or NULL if it wasn't found. +PurpleTheme *purple_theme_manager_find_theme(const gchar *name, const gchar *type); + * Adds a PurpleTheme to the theme manager. If the theme already exists + * then this function does nothing. + * @param theme The PurpleTheme to add to the manager. +void purple_theme_manager_add_theme(PurpleTheme *theme); + * Removes a PurpleTheme from the theme manager and frees the theme. + * @param theme The PurpleTheme to remove from the manager. +void purple_theme_manager_remove_theme(PurpleTheme *theme); + * Adds a loader to the theme manager so it knows how to build themes. + * @param loader The PurpleThemeLoader to add. +void purple_theme_manager_register_type(PurpleThemeLoader *loader); + * Removes the loader and all themes of the same type from the loader. + * @param loader The PurpleThemeLoader to be removed. +void purple_theme_manager_unregister_type(PurpleThemeLoader *loader); + * Calls the given function on each purple theme. + * @param func The PTFunc to be applied to each theme. +void purple_theme_manager_for_each_theme(PTFunc func); + * Loads a theme of the given type without adding it to the manager + * @param theme_dir the directory of the theme to load + * @param type the type of theme to load +PurpleTheme *purple_theme_manager_load_theme(const gchar *theme_dir, const gchar *type); +#endif /* PURPLE_THEME_MANAGER_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/theme.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,175 @@
+ * @file theme.h Purple Theme Abstact Class API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#include <glib-object.h> + * This is an abstract class for Purple to use with the Purple theme manager. + * PurpleTheme is a GObject. +typedef struct _PurpleTheme PurpleTheme; +typedef struct _PurpleThemeClass PurpleThemeClass; +#define PURPLE_TYPE_THEME (purple_theme_get_type ()) +#define PURPLE_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PURPLE_TYPE_THEME, PurpleTheme)) +#define PURPLE_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PURPLE_TYPE_THEME, PurpleThemeClass)) +#define PURPLE_IS_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PURPLE_TYPE_THEME)) +#define PURPLE_IS_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PURPLE_TYPE_THEME)) +#define PURPLE_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PURPLE_TYPE_THEME, PurpleThemeClass)) +struct _PurpleThemeClass + GObjectClass parent_class; +/**************************************************************************/ +/** @name Purple Theme API */ +/**************************************************************************/ +GType purple_theme_get_type(void); + * Returns the name of the PurpleTheme object. + * @param theme The purple theme. + * @return The string representing the name of the theme. +const gchar *purple_theme_get_name(PurpleTheme *theme); + * Sets the name of the PurpleTheme object. + * @param theme The purple theme. + * @param name The name of the PurpleTheme object. +void purple_theme_set_name(PurpleTheme *theme, const gchar *name); + * Returns the description of the PurpleTheme object. + * @param theme The purple theme. + * @return A short description of the theme. +const gchar *purple_theme_get_description(PurpleTheme *theme); + * Sets the description of the PurpleTheme object. + * @param theme The purple theme. + * @param description The description of the PurpleTheme object. +void purple_theme_set_description(PurpleTheme *theme, const gchar *description); + * Returns the author of the PurpleTheme object. + * @param theme The purple theme. + * @return The author of the theme. +const gchar *purple_theme_get_author(PurpleTheme *theme); + * Sets the author of the PurpleTheme object. + * @param theme The purple theme. + * @param author The author of the PurpleTheme object. +void purple_theme_set_author(PurpleTheme *theme, const gchar *author); + * Returns the type (string) of the PurpleTheme object. + * @param theme The purple theme. + * @return The string representing the type. +const gchar *purple_theme_get_type_string(PurpleTheme *theme); + * Returns the directory of the PurpleTheme object. + * @param theme The purple theme. + * @return The string representing the theme directory. +const gchar *purple_theme_get_dir(PurpleTheme *theme); + * Sets the directory of the PurpleTheme object. + * @param theme The purple theme. + * @param dir The directory of the PurpleTheme object. +void purple_theme_set_dir(PurpleTheme *theme, const gchar *dir); + * Returns the image preview of the PurpleTheme object. + * @param theme The purple theme. + * @return The image preview of the PurpleTheme object. +const gchar *purple_theme_get_image(PurpleTheme *theme); + * Returns the image preview and directory of the PurpleTheme object. + * @param theme The purple theme. + * @return The image preview of the PurpleTheme object. +gchar *purple_theme_get_image_full(PurpleTheme *theme); + * Sets the directory of the PurpleTheme object. + * @param theme The purple theme. + * @param img The image preview of the PurpleTheme object. +void purple_theme_set_image(PurpleTheme *theme, const gchar *img); +#endif /* PURPLE_THEME_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/tlv.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,77 @@
+ * @file tlv.h MSN TLV functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct msn_tlv_s +/* TLV handling functions */ +char *msn_tlv_getvalue_as_string(msn_tlv_t *tlv); +msn_tlv_t *msn_tlv_gettlv(GSList *list, const guint8 type, const int nth); +int msn_tlv_getlength(GSList *list, const guint8 type, const int nth); +char *msn_tlv_getstr(GSList *list, const guint8 type, const int nth); +guint8 msn_tlv_get8(GSList *list, const guint8 type, const int nth); +guint16 msn_tlv_get16(GSList *list, const guint8 type, const int nth); +guint32 msn_tlv_get32(GSList *list, const guint8 type, const int nth); +/* TLV list handling functions */ +GSList *msn_tlvlist_read(const char *bs, size_t bs_len); +GSList *msn_tlvlist_copy(GSList *orig); +int msn_tlvlist_count(GSList *list); +size_t msn_tlvlist_size(GSList *list); +gboolean msn_tlvlist_equal(GSList *one, GSList *two); +char *msn_tlvlist_write(GSList *list, size_t *out_len); +void msn_tlvlist_free(GSList *list); +int msn_tlvlist_add_raw(GSList **list, const guint8 type, const guint8 length, const char *value); +int msn_tlvlist_add_empty(GSList **list, const guint8 type); +int msn_tlvlist_add_8(GSList **list, const guint8 type, const guint8 value); +int msn_tlvlist_add_16(GSList **list, const guint8 type, const guint16 value); +int msn_tlvlist_add_32(GSList **list, const guint8 type, const guint32 value); +int msn_tlvlist_add_str(GSList **list, const guint8 type, const char *value); +int msn_tlvlist_add_tlv(GSList **list, const msn_tlv_t *tlv); +int msn_tlvlist_replace_raw(GSList **list, const guint8 type, const guint8 lenth, const char *value); +int msn_tlvlist_replace_str(GSList **list, const guint8 type, const char *str); +int msn_tlvlist_replace_empty(GSList **list, const guint8 type); +int msn_tlvlist_replace_8(GSList **list, const guint8 type, const guint8 value); +int msn_tlvlist_replace_16(GSList **list, const guint8 type, const guint16 value); +int msn_tlvlist_replace_32(GSList **list, const guint8 type, const guint32 value); +int msn_tlvlist_replace_tlv(GSList **list, const msn_tlv_t *tlv); +void msn_tlvlist_remove(GSList **list, const guint8 type); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/transaction.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,87 @@
+ * @file transaction.h MSN transaction functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef MSN_TRANSACTION_H +#define MSN_TRANSACTION_H +typedef struct _MsnTransaction MsnTransaction; +typedef void (*MsnTransCb)(MsnCmdProc *cmdproc, MsnCommand *cmd); +typedef void (*MsnTimeoutCb)(MsnCmdProc *cmdproc, MsnTransaction *trans); +typedef void (*MsnErrorCb)(MsnCmdProc *cmdproc, MsnTransaction *trans, + * A transaction. A sending command that will initiate the transaction. + gboolean saveable; /**< Whether to save this transaction in the history */ + unsigned int trId; /**< The ID of this transaction, if it's being saved */ + void *data; /**< The data to be used on the different callbacks. */ + GDestroyNotify data_free; /**< The function to free 'data', or @c NULL */ + gboolean has_custom_callbacks; + MsnTimeoutCb timeout_cb; + MsnCommand *pendent_cmd; /**< The command that is waiting for the result of +MsnTransaction *msn_transaction_new(MsnCmdProc *cmdproc, const char *command, + const char *format, ...) G_GNUC_PRINTF(3, 4); +void msn_transaction_destroy(MsnTransaction *trans); +char *msn_transaction_to_string(MsnTransaction *trans); +void msn_transaction_queue_cmd(MsnTransaction *trans, MsnCommand *cmd); +void msn_transaction_unqueue_cmd(MsnTransaction *trans, MsnCmdProc *cmdproc); +void msn_transaction_set_payload(MsnTransaction *trans, + const char *payload, int payload_len); +void msn_transaction_set_data(MsnTransaction *trans, void *data); +void msn_transaction_set_data_free(MsnTransaction *trans, GDestroyNotify fn); +void msn_transaction_set_saveable(MsnTransaction *trans, gboolean saveable); +void msn_transaction_add_cb(MsnTransaction *trans, char *answer, +void msn_transaction_set_error_cb(MsnTransaction *trans, MsnErrorCb cb); +void msn_transaction_set_timeout_cb(MsnTransaction *trans, MsnTimeoutCb cb); +#endif /* MSN_TRANSACTION_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/upnp.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,132 @@
+ * @file upnp.h Universal Plug N Play API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _UPnPMappingAddRemove UPnPMappingAddRemove; +/**************************************************************************/ +/**************************************************************************/ +/* typedef struct _PurpleUPnPRequestData PurpleUPnPRequestData; */ +typedef void (*PurpleUPnPCallback) (gboolean success, gpointer data); +void purple_upnp_init(void); + * Sends a discovery request to search for a UPnP enabled IGD that + * contains the WANIPConnection service that will allow us to recieve the + * public IP address of the IGD, and control it for forwarding ports. + * The result will be cached for further use. + * @param cb an optional callback function to be notified when the UPnP + * discovery is complete + * @param cb_data Extra data to be passed to the callback +void purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data); + * Retrieve the current UPnP control info, if there is any available. + * This will only be filled in if purple_upnp_discover() had been called, + * and finished discovering. + * @return The control URL for the IGD we'll use to use the IGD services +const PurpleUPnPControlInfo* purple_upnp_get_control_info(void); + * Gets the IP address from a UPnP enabled IGD that sits on the local + * network, so when getting the network IP, instead of returning the + * local network IP, the public IP is retrieved. This is a cached value from + * the time of the UPnP discovery. + * @return The IP address of the network, or NULL if something went wrong +const gchar* purple_upnp_get_public_ip(void); + * Cancel a pending port mapping request initiated with either + * purple_upnp_set_port_mapping() or purple_upnp_remove_port_mapping(). + * @param mapping_data The data returned when you initiated the UPnP mapping request. +void purple_upnp_cancel_port_mapping(UPnPMappingAddRemove *mapping_data); + * Maps Ports in a UPnP enabled IGD that sits on the local network to + * this purple client. Essentially, this function takes care of the port + * forwarding so things like file transfers can work behind NAT firewalls + * @param portmap The port to map to this client + * @param protocol The protocol to map, either "TCP" or "UDP" + * @param cb an optional callback function to be notified when the mapping + * @param cb_data Extra data to be passed to the callback + * @return Data which can be passed to purple_upnp_port_mapping_cancel() to cancel +UPnPMappingAddRemove *purple_upnp_set_port_mapping(unsigned short portmap, const gchar* protocol, + PurpleUPnPCallback cb, gpointer cb_data); + * Deletes a port mapping in a UPnP enabled IGD that sits on the local network + * to this purple client. Essentially, this function takes care of deleting the + * port forwarding after they have completed a connection so another client on + * the local network can take advantage of the port forwarding + * @param portmap The port to delete the mapping for + * @param protocol The protocol to map to. Either "TCP" or "UDP" + * @param cb an optional callback function to be notified when the mapping + * @param cb_data Extra data to be passed to the callback + * @return Data which can be passed to purple_upnp_port_mapping_cancel() to cancel +UPnPMappingAddRemove *purple_upnp_remove_port_mapping(unsigned short portmap, + const gchar* protocol, PurpleUPnPCallback cb, gpointer cb_data); +#endif /* _PURPLE_UPNP_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/user.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,533 @@
+ * @file user.h User functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnUser MsnUser; + MSN_NETWORK_UNKNOWN = 0, + MSN_NETWORK_PASSPORT = 1, + MSN_NETWORK_COMMUNICATOR = 2, + MSN_NETWORK_MOBILE = 4, + MSN_NETWORK_CIRCLE = 9, + MSN_NETWORK_TEMP_GROUP = 10, + MSN_NETWORK_CONNECT = 13, + MSN_NETWORK_REMOTE = 14, + * Contains optional info about a user that is fairly uncommon. We + * put this info in in a separate struct to save memory because we + * allocate an MsnUser struct for each buddy, but we generally only + * need this information for a small percentage of our buddies + * (usually less than 1%). Putting it in a separate struct makes + * MsnUser smaller by the size of a few pointers. +typedef struct _MsnUserExtendedInfo + CurrentMediaType media_type; /**< Type of the user's current media. */ + char *media_title; /**< Title of the user's current media. */ + char *media_artist; /**< Artist of the user's current media. */ + char *media_album; /**< Album of the user's current media. */ + char *phone_home; /**< E.T. uses this. */ + char *phone_work; /**< Work phone number. */ + char *phone_mobile; /**< Mobile phone number. */ + guint8 refcount; /**< The reference count of this object */ + char *passport; /**< The passport account. */ + char *friendly_name; /**< The friendly name. */ + char *uid; /*< User ID */ + GSList *endpoints; /*< Endpoint-specific data */ + const char *status; /**< The state of the user. */ + char *statusline; /**< The state of the user. */ + gboolean idle; /**< The idle state of the user. */ + MsnUserExtendedInfo *extinfo; /**< Extended info for the user. */ + gboolean authorized; /**< Authorized to add this user. */ + gboolean mobile; /**< Signed up with MSN Mobile. */ + GList *group_ids; /**< The group IDs. */ + char *pending_group; /**< A pending group to add. */ + MsnObject *msnobj; /**< The user's MSN Object. */ + GHashTable *clientcaps; /**< The client's capabilities. */ + guint clientid; /**< The client's ID */ + guint extcaps; /**< The client's extended capabilities */ + MsnNetwork networkid; /**< The user's network */ + MsnListOp list_op; /**< Which lists the user is in */ + * The membershipId for this buddy on our pending list. Sent by + guint member_id_on_pending_list; + char *invite_message; /**< Invite message of user request */ + * A specific user endpoint. +typedef struct MsnUserEndpoint { + char *id; /**< The client's endpoint ID */ + char *name; /**< The client's endpoint's name */ + int type; /**< The client's endpoint type */ + guint clientid; /**< The client's ID */ + guint extcaps; /**< The client's extended capabilites */ +/************************************************************************** + **************************************************************************/ + * Creates a new user structure. + * @param session The MSN session. + * @param passport The initial passport. + * @param stored_name The initial stored name. + * @return A new user structure. It will have a reference count of 1. +MsnUser *msn_user_new(MsnUserList *userlist, const char *passport, + const char *friendly_name); + * Increment the reference count. + * @param user The user. +MsnUser *msn_user_ref(MsnUser *user); + * Decrement the reference count. When the count reaches 0 the object is +void msn_user_unref(MsnUser *user); + * Communicates with the core to update the ui, etc. + * @param user The user to update. +void msn_user_update(MsnUser *user); + * Sets the new statusline of user. + * @param user The user. + * @param state The statusline string. +void msn_user_set_statusline(MsnUser *user, const char *statusline); + * Sets the new state of user. + * @param user The user. + * @param state The state string. +void msn_user_set_state(MsnUser *user, const char *state); + * Sets the passport account for a user. + * @param user The user. + * @param passport The passport account. +void msn_user_set_passport(MsnUser *user, const char *passport); + * Sets the friendly name for a user. + * @param user The user. + * @param name The friendly name. + * @returns TRUE is name actually changed, FALSE otherwise. +gboolean msn_user_set_friendly_name(MsnUser *user, const char *name); + * Sets the buddy icon for a local user. + * @param user The user. + * @param img The buddy icon image +void msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img); + * Sets the group ID list for a user. + * @param user The user. + * @param ids The group ID list. +void msn_user_set_group_ids(MsnUser *user, GList *ids); + * Adds the group ID for a user. + * @param user The user. + * @param id The group ID. +void msn_user_add_group_id(MsnUser *user, const char * id); + * Removes the group ID from a user. + * @param user The user. + * @param id The group ID. +void msn_user_remove_group_id(MsnUser *user, const char * id); + * Sets the pending group for a user. + * @param user The user. + * @param group The group name. +void msn_user_set_pending_group(MsnUser *user, const char *group); + * Removes the pending group from a user. + * @param user The user. + * @return Returns the pending group name. +char *msn_user_remove_pending_group(MsnUser *user); + * Sets the home phone number for a user. + * @param user The user. + * @param number The home phone number. +void msn_user_set_home_phone(MsnUser *user, const char *number); + * Sets the work phone number for a user. + * @param user The user. + * @param number The work phone number. +void msn_user_set_work_phone(MsnUser *user, const char *number); +void msn_user_set_uid(MsnUser *user, const char *uid); + * Sets endpoint data for a user. + * @param user The user. + * @param endpoint The endpoint. + * @param data The endpoint data. +msn_user_set_endpoint_data(MsnUser *user, const char *endpoint, MsnUserEndpoint *data); + * Clears all endpoint data for a user. + * @param user The user. +msn_user_clear_endpoints(MsnUser *user); + * Sets the client id for a user. + * @param user The user. + * @param clientid The client id. +void msn_user_set_clientid(MsnUser *user, guint clientid); + * Sets the client id for a user. + * @param user The user. + * @param extcaps The client's extended capabilities. +void msn_user_set_extcaps(MsnUser *user, guint extcaps); + * Sets the network id for a user. + * @param user The user. + * @param network The network id. +void msn_user_set_network(MsnUser *user, MsnNetwork network); + * Sets the mobile phone number for a user. + * @param user The user. + * @param number The mobile phone number. +void msn_user_set_mobile_phone(MsnUser *user, const char *number); + * Sets the MSNObject for a user. + * @param user The user. + * @param obj The MSNObject. +void msn_user_set_object(MsnUser *user, MsnObject *obj); + * Sets the client information for a user. + * @param user The user. + * @param info The client information. +void msn_user_set_client_caps(MsnUser *user, GHashTable *info); + * Sets the invite message for a user. + * @param user The user. + * @param message The invite message for a user. +void msn_user_set_invite_message(MsnUser *user, const char *message); + * Returns the passport account for a user. + * @param user The user. + * @return The passport account. +const char *msn_user_get_passport(const MsnUser *user); + * Returns the friendly name for a user. + * @param user The user. + * @return The friendly name. +const char *msn_user_get_friendly_name(const MsnUser *user); + * Returns the home phone number for a user. + * @param user The user. + * @return The user's home phone number. +const char *msn_user_get_home_phone(const MsnUser *user); + * Returns the work phone number for a user. + * @param user The user. + * @return The user's work phone number. +const char *msn_user_get_work_phone(const MsnUser *user); + * Returns the mobile phone number for a user. + * @param user The user. + * @return The user's mobile phone number. +const char *msn_user_get_mobile_phone(const MsnUser *user); + * Gets endpoint data for a user. + * @param user The user. + * @param endpoint The endpoint. + * @return The user's endpoint data. +msn_user_get_endpoint_data(MsnUser *user, const char *endpoint); + * Returns the client id for a user. + * @param user The user. + * @return The user's client id. +guint msn_user_get_clientid(const MsnUser *user); + * Returns the extended capabilities for a user. + * @param user The user. + * @return The user's extended capabilities. +guint msn_user_get_extcaps(const MsnUser *user); +/************************************************************************** + **************************************************************************/ + * Check if the user is part of the group. + * @param user The user we are asking group membership. + * @param group_id The group where the user may be in. + * @return TRUE if user is part of the group. Otherwise, FALSE. +gboolean msn_user_is_in_group(MsnUser *user, const char * group_id); + * Check if user is on list. + * @param user The user we are asking list membership. + * @param list_id The list where the user may be in. + * @return TRUE if the user is on the list, else FALSE. +gboolean msn_user_is_in_list(MsnUser *user, MsnListId list_id); + * Returns the network id for a user. + * @param user The user. + * @return The user's network id. +MsnNetwork msn_user_get_network(const MsnUser *user); + * Returns the MSNObject for a user. + * @param user The user. + * @return The MSNObject. +MsnObject *msn_user_get_object(const MsnUser *user); + * Returns the client information for a user. + * @param user The user. + * @return The client information. +GHashTable *msn_user_get_client_caps(const MsnUser *user); + * Returns the invite message for a user. + * @param user The user. + * @return The user's invite message. +const char *msn_user_get_invite_message(const MsnUser *user); + * check to see if user is online +gboolean msn_user_is_online(PurpleAccount *account, const char *name); + * check to see if user is Yahoo User +gboolean msn_user_is_yahoo(PurpleAccount *account, const char *name); +void msn_user_set_op(MsnUser *user, MsnListOp list_op); +void msn_user_unset_op(MsnUser *user, MsnListOp list_op); + * Compare the given passport with the one of the user + * @param user User to compare. + * @oaran passport Passport to compare. + * @return Zero if the passport match with the one of the user, otherwise + * a positive integer if the user passport is greather than the one given + * and a negative integer if it is less. +int msn_user_passport_cmp(MsnUser *user, const char *passport); + * Checks whether a user is capable of some task. + * @param user The user. + * @param endpoint The endpoint. Can be @NULL to check overall capabilities. + * @param capability The capability (including client version). + * @param extcap The extended capability. + * @return Whether the user supports the capability. +msn_user_is_capable(MsnUser *user, char *endpoint, guint capability, guint extcap); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/userlist.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,112 @@
+ * @file userlist.h MSN user list support + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +typedef struct _MsnUserList MsnUserList; + MSN_LIST_FL, /**< Forward list */ + MSN_LIST_AL, /**< Allow list */ + MSN_LIST_BL, /**< Block list */ + MSN_LIST_RL, /**< Reverse list */ + MSN_LIST_PL /**< Pending list */ +#define MSN_LIST_OP_MASK 0x07 + GList *users; /* Contains MsnUsers */ + GList *groups; /* Contains MsnGroups */ + GQueue *buddy_icon_requests; + guint buddy_icon_request_timer; +void msn_got_lst_user(MsnSession *session, MsnUser *user, + MsnListOp list_op, GSList *group_ids); +MsnUserList *msn_userlist_new(MsnSession *session); +void msn_userlist_destroy(MsnUserList *userlist); +void msn_userlist_add_user(MsnUserList *userlist, MsnUser *user); +void msn_userlist_remove_user(MsnUserList *userlist, MsnUser *user); +MsnUser * msn_userlist_find_user(MsnUserList *userlist, const char *passport); +MsnUser * msn_userlist_find_add_user(MsnUserList *userlist, + const char *passport, const char *friendly_name); +MsnUser * msn_userlist_find_user_with_id(MsnUserList *userlist, const char *uid); +MsnUser * msn_userlist_find_user_with_mobile_phone(MsnUserList *userlist, const char *number); +void msn_userlist_add_group(MsnUserList *userlist, MsnGroup *group); +void msn_userlist_remove_group(MsnUserList *userlist, MsnGroup *group); +MsnGroup *msn_userlist_find_group_with_id(MsnUserList *userlist, const char *id); +MsnGroup *msn_userlist_find_group_with_name(MsnUserList *userlist, const char *name); +const char * msn_userlist_find_group_id(MsnUserList *userlist, + const char *group_name); +const char *msn_userlist_find_group_name(MsnUserList *userlist, const char *group_id); +void msn_userlist_rename_group_id(MsnUserList *userlist, const char *group_id, +void msn_userlist_remove_group_id(MsnUserList *userlist, const char *group_id); +void msn_userlist_rem_buddy(MsnUserList *userlist, const char *who); +void msn_userlist_add_buddy(MsnUserList *userlist, + const char *who, const char *group_name); +void msn_userlist_move_buddy(MsnUserList *userlist, const char *who, + const char *old_group_name, + const char *new_group_name); +gboolean msn_userlist_add_buddy_to_group(MsnUserList *userlist, const char *who, + const char *group_name); +gboolean msn_userlist_rem_buddy_from_group(MsnUserList *userlist, + const char *group_name); +void msn_userlist_add_buddy_to_list(MsnUserList *userlist, const char *who, +void msn_userlist_rem_buddy_from_list(MsnUserList *userlist, const char *who, +void msn_release_buddy_icon_request(MsnUserList *userlist); +void msn_userlist_load(MsnSession *session); +#endif /* MSN_USERLIST_H */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/util.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,1489 @@
+ * @file util.h Utility Functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + * @todo Rename the functions so that they live somewhere in the purple + * An opaque structure representing a URL request. Can be used to cancel +typedef struct _PurpleUtilFetchUrlData PurpleUtilFetchUrlData; +/** @copydoc _PurpleMenuAction */ +typedef struct _PurpleMenuAction PurpleMenuAction; +/** @copydoc _PurpleKeyValuePair */ +typedef struct _PurpleKeyValuePair PurpleKeyValuePair; +struct _PurpleMenuAction + PurpleCallback callback; +typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len); + * This is used by, among other things, purple_gtk_combo* functions to pass in a + * list of key-value pairs so it can display a user-friendly value. +struct _PurpleKeyValuePair + * Creates a new PurpleMenuAction. + * @param label The text label to display for this action. + * @param callback The function to be called when the action is used on + * @param data Additional data to be passed to the callback. + * @param children A GList of PurpleMenuActions to be added as a submenu + * @return The PurpleMenuAction. +PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback, + gpointer data, GList *children); + * Frees a PurpleMenuAction + * @param act The PurpleMenuAction to free. +void purple_menu_action_free(PurpleMenuAction *act); + * Set the appropriate presence values for the currently playing song. + * @param title The title of the song, @c NULL to unset the value. + * @param artist The artist of the song, can be @c NULL. + * @param album The album of the song, can be @c NULL. +void purple_util_set_current_song(const char *title, const char *artist, + * Format song information. + * @param title The title of the song, @c NULL to unset the value. + * @param artist The artist of the song, can be @c NULL. + * @param album The album of the song, can be @c NULL. + * @param unused Currently unused, must be @c NULL. + * @return The formatted string. The caller must g_free the returned string. +char * purple_util_format_song_info(const char *title, const char *artist, + const char *album, gpointer unused); +/**************************************************************************/ +/** @name Utility Subsystem */ +/**************************************************************************/ + * Initializes the utility subsystem. +void purple_util_init(void); + * Uninitializes the util subsystem. +void purple_util_uninit(void); +/**************************************************************************/ +/** @name Base16 Functions */ +/**************************************************************************/ + * Converts a chunk of binary data to its base-16 equivalent. + * @param data The data to convert. + * @param len The length of the data. + * @return The base-16 string in the ASCII encoding. Must be + * g_free'd when no longer needed. + * @see purple_base16_decode() +gchar *purple_base16_encode(const guchar *data, gsize len); + * Converts an ASCII string of base-16 encoded data to + * the binary equivalent. + * @param str The base-16 string to convert to raw data. + * @param ret_len The length of the returned data. You can + * pass in NULL if you're sure that you know + * the length of the decoded data, or if you + * know you'll be able to use strlen to + * determine the length, etc. + * @return The raw data. Must be g_free'd when no longer needed. + * @see purple_base16_encode() +guchar *purple_base16_decode(const char *str, gsize *ret_len); + * Converts a chunk of binary data to a chunked base-16 representation + * (handy for key fingerprints) + * Example output: 01:23:45:67:89:AB:CD:EF + * @param data The data to convert. + * @param len The length of the data. + * @return The base-16 string in the ASCII chunked encoding. Must be + * g_free'd when no longer needed. +gchar *purple_base16_encode_chunked(const guchar *data, gsize len); +/**************************************************************************/ +/** @name Base64 Functions */ +/**************************************************************************/ + * Converts a chunk of binary data to its base-64 equivalent. + * @param data The data to convert. + * @param len The length of the data. + * @return The base-64 string in the ASCII encoding. Must be + * g_free'd when no longer needed. + * @see purple_base64_decode() +gchar *purple_base64_encode(const guchar *data, gsize len); + * Converts an ASCII string of base-64 encoded data to + * the binary equivalent. + * @param str The base-64 string to convert to raw data. + * @param ret_len The length of the returned data. You can + * pass in NULL if you're sure that you know + * the length of the decoded data, or if you + * know you'll be able to use strlen to + * determine the length, etc. + * @return The raw data. Must be g_free'd when no longer needed. + * @see purple_base64_encode() +guchar *purple_base64_decode(const char *str, gsize *ret_len); +/**************************************************************************/ +/** @name Quoted Printable Functions */ +/**************************************************************************/ + * Converts a quoted printable string back to its readable equivalent. + * What is a quoted printable string, you ask? It's an encoding used + * to transmit binary data as ASCII. It's intended purpose is to send + * emails containing non-ASCII characters. Wikipedia has a pretty good + * explanation. Also see RFC 2045. + * @param str The quoted printable ASCII string to convert to raw data. + * @param ret_len The length of the returned data. + * @return The readable string. Must be g_free'd when no longer needed. +guchar *purple_quotedp_decode(const char *str, gsize *ret_len); +/**************************************************************************/ +/** @name MIME Functions */ +/**************************************************************************/ + * Converts a MIME header field string back to its readable equivalent + * according to RFC 2047. Basically, a header is plain ASCII and can + * contain any number of sections called "encoded-words." The format + * of an encoded word is =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= + * =? designates the beginning of the encoded-word + * ?= designates the end of the encoded-word + * An encoded word is segmented into three pieces by the use of a + * question mark. The first piece is the character set, the second + * piece is the encoding, and the third piece is the encoded text. + * @param str The ASCII string, possibly containing any number of + * encoded-word sections. + * @return The string, with any encoded-word sections decoded and + * converted to UTF-8. Must be g_free'd when no longer +char *purple_mime_decode_field(const char *str); +/**************************************************************************/ +/** @name Date/Time Functions */ +/**************************************************************************/ + * Formats a time into the specified format. + * This is essentially strftime(), but it has a static buffer + * and handles the UTF-8 conversion for the caller. + * This function also provides the GNU %z formatter if the underlying C + * library doesn't. However, the format string parser is very naive, which + * means that conversions specifiers to %z cannot be guaranteed. The GNU + * strftime(3) man page describes %z as: 'The time-zone as hour offset from + * GMT. Required to emit RFC822-conformant dates + * (using "%a, %d %b %Y %H:%M:%S %z"). (GNU)' + * On Windows, this function also converts the results for %Z from a timezone + * name (as returned by the system strftime() %Z format string) to a timezone + * abbreviation (as is the case on Unix). As with %z, conversion specifiers + * @param format The format string, in UTF-8 + * @param tm The time to format, or @c NULL to use the current local time + * @return The formatted time, in UTF-8. + * @note @a format is required to be in UTF-8. This differs from strftime(), + * where the format is provided in the locale charset. +const char *purple_utf8_strftime(const char *format, const struct tm *tm); + * Gets a string representation of the local timezone offset + * @param tm The time to get the timezone for + * @param iso TRUE to format the offset according to ISO-8601, FALSE to + * not substitute 'Z' for 0 offset, and to not separate + * hours and minutes with a colon. +const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso); + * Formats a time into the user's preferred short date format. + * The returned string is stored in a static buffer, so the result + * should be g_strdup()'d if it's going to be kept. + * @param tm The time to format, or @c NULL to use the current local time + * @return The date, formatted as per the user's settings. +const char *purple_date_format_short(const struct tm *tm); + * Formats a time into the user's preferred short date plus time format. + * The returned string is stored in a static buffer, so the result + * should be g_strdup()'d if it's going to be kept. + * @param tm The time to format, or @c NULL to use the current local time + * @return The timestamp, formatted as per the user's settings. +const char *purple_date_format_long(const struct tm *tm); + * Formats a time into the user's preferred full date and time format. + * The returned string is stored in a static buffer, so the result + * should be g_strdup()'d if it's going to be kept. + * @param tm The time to format, or @c NULL to use the current local time + * @return The date and time, formatted as per the user's settings. +const char *purple_date_format_full(const struct tm *tm); + * Formats a time into the user's preferred time format. + * The returned string is stored in a static buffer, so the result + * should be g_strdup()'d if it's going to be kept. + * @param tm The time to format, or @c NULL to use the current local time + * @return The time, formatted as per the user's settings. +const char *purple_time_format(const struct tm *tm); + * Builds a time_t from the supplied information. + * @param year The year. + * @param month The month. + * @param hour The hour. + * @param min The minute. + * @param sec The second. +time_t purple_time_build(int year, int month, int day, int hour, +/** Used by purple_str_to_time to indicate no timezone offset was + * specified in the timestamp string. */ +#define PURPLE_NO_TZ_OFF -500000 + * Parses a timestamp in jabber, ISO8601, or MM/DD/YYYY format and returns + * @param timestamp The timestamp + * @param utc Assume UTC if no timezone specified + * @param tm If not @c NULL, the caller can get a copy of the + * struct tm used to calculate the time_t return value. + * @param tz_off If not @c NULL, the caller can get a copy of the + * timezone offset (from UTC) used to calculate the time_t + * return value. Note: Zero is a valid offset. As such, + * the value of the macro @c PURPLE_NO_TZ_OFF indicates no + * offset was specified (which means that the local + * timezone was used in the calculation). + * @param rest If not @c NULL, the caller can get a pointer to the + * part of @a timestamp left over after parsing is + * completed, if it's not the end of @a timestamp. +time_t purple_str_to_time(const char *timestamp, gboolean utc, + struct tm *tm, long *tz_off, const char **rest); +/**************************************************************************/ +/** @name Markup Functions */ +/**************************************************************************/ + * Escapes special characters in a plain-text string so they display + * correctly as HTML. For example, & is replaced with & and < is + * This is exactly the same as g_markup_escape_text(), except that it + * does not change ' to ' because ' is not a valid HTML 4 entity, + * and is displayed literally in IE7. +gchar *purple_markup_escape_text(const gchar *text, gssize length); + * Finds an HTML tag matching the given name. + * This locates an HTML tag's start and end, and stores its attributes + * in a GData hash table. The names of the attributes are lower-cased + * in the hash table, and the name of the tag is case insensitive. + * @param needle The name of the tag + * @param haystack The null-delimited string to search in + * @param start A pointer to the start of the tag if found + * @param end A pointer to the end of the tag if found + * @param attributes The attributes, if the tag was found. This should + * be freed with g_datalist_clear(). + * @return TRUE if the tag was found +gboolean purple_markup_find_tag(const char *needle, const char *haystack, + const char **start, const char **end, + * Extracts a field of data from HTML. + * This is a scary function. See protocols/msn/msn.c and + * protocols/yahoo/yahoo_profile.c for example usage. + * @param str The string to parse. + * @param len The size of str. + * @param user_info The destination PurpleNotifyUserInfo to which the new + * field info should be added. + * @param start_token The beginning token. + * @param skip The number of characters to skip after the + * @param end_token The ending token. + * @param check_value The value that the last character must meet. + * @param no_value_token The token indicating no value is given. + * @param display_name The short descriptive name to display for this token. + * @param is_link TRUE if this should be a link, or FALSE otherwise. + * @param link_prefix The prefix for the link. + * @param format_cb A callback to format the value before adding it. + * @return TRUE if successful, or FALSE otherwise. +gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info, + const char *start_token, int skip, + const char *end_token, char check_value, + const char *no_value_token, + const char *display_name, gboolean is_link, + const char *link_prefix, + PurpleInfoFieldFormatCallback format_cb); + * Converts HTML markup to XHTML. + * @param html The HTML markup. + * @param dest_xhtml The destination XHTML output. + * @param dest_plain The destination plain-text output. +void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml, + * Strips HTML tags from a string. + * @param str The string to strip HTML from. + * @return The new string without HTML. You must g_free this string + * when finished with it. +char *purple_markup_strip_html(const char *str); + * Adds the necessary HTML code to turn URIs into HTML links in a string. + * @param str The string to linkify. + * @return The new string with all URIs surrounded in standard + * HTML <a href="whatever"></a> tags. You must g_free this + * string when finished with it. +char *purple_markup_linkify(const char *str); + * Unescapes HTML entities to their literal characters in the text. + * For example "&" is replaced by '&' and so on. Also converts + * numerical entities (e.g. "&" is also '&'). + * This function currently supports the following named entities: + * "&", "<", ">", "©", """, "®", "'" + * purple_unescape_html() is similar, but also converts "<br>" into "\n". + * @param text The string in which to unescape any HTML entities + * @return The text with HTML entities literalized. You must g_free + * this string when finished with it. + * @see purple_unescape_html() +char *purple_unescape_text(const char *text); + * Unescapes HTML entities to their literal characters and converts + * "<br>" to "\n". See purple_unescape_text() for more details. + * @param html The string in which to unescape any HTML entities + * @return The text with HTML entities literalized. You must g_free + * this string when finished with it. + * @see purple_unescape_text() +char *purple_unescape_html(const char *html); + * Returns a newly allocated substring of the HTML UTF-8 string "str". + * The markup is preserved such that the substring will have the same + * formatting as original string, even though some tags may have been + * opened before "x", or may close after "y". All open tags are closed + * at the end of the returned string, in the proper order. + * Note that x and y are in character offsets, not byte offsets, and + * are offsets into an unformatted version of str. Because of this, + * this function may be sensitive to changes in GtkIMHtml and may break + * when used with other UI's. libpurple users are encouraged to report and + * work out any problems encountered. + * @param str The input NUL terminated, HTML, UTF-8 (or ASCII) string. + * @param x The character offset into an unformatted version of str to + * @param y The character offset (into an unformatted vesion of str) of + * one past the last character to include in the slice. + * @return The HTML slice of string, with all formatting retained. +char *purple_markup_slice(const char *str, guint x, guint y); + * Returns a newly allocated string containing the name of the tag + * located at "tag". Tag is expected to point to a '<', and contain + * a '>' sometime after that. If there is no '>' and the string is + * not NUL terminated, this function can be expected to segfault. + * @param tag The string starting a HTML tag. + * @return A string containing the name of the tag. +char *purple_markup_get_tag_name(const char *tag); + * Returns a constant string of the character representation of the HTML + * entity pointed to by @a text. For example, purple_markup_unescape_entity("&") + * will return "&". The @a text variable is expected to point to an '&', + * the first character of the entity. If given an unrecognized entity, the function + * Note that this function, unlike purple_unescape_html(), does not search + * the string for the entity, does not replace the entity, and does not + * return a newly allocated string. + * @param text A string containing an HTML entity. + * @param length If not @c NULL, the string length of the entity is stored in this location. + * @return A constant string containing the character representation of the given entity. +const char * purple_markup_unescape_entity(const char *text, int *length); + * Returns a newly allocated string containing the value of the CSS property specified + * in opt. The @a style argument is expected to point to a HTML inline CSS. + * The function will seek for the CSS property and return its value. + * For example, purple_markup_get_css_property("direction:rtl;color:#dc4d1b;", + * "color") would return "#dc4d1b". + * On error or if the requested property was not found, the function returns + * @param style A string containing the inline CSS text. + * @param opt The requested CSS property. + * @return The value of the requested CSS property. +char * purple_markup_get_css_property(const gchar *style, const gchar *opt); + * Check if the given HTML contains RTL text. + * @param html The HTML text. + * @return TRUE if the text contains RTL text, FALSE otherwise. +gboolean purple_markup_is_rtl(const char *html); +/**************************************************************************/ +/** @name Path/Filename Functions */ +/**************************************************************************/ + * Returns the user's home directory. + * @return The user's home directory. + * @see purple_user_dir() +const gchar *purple_home_dir(void); + * Returns the purple settings directory in the user's home directory. + * This is usually ~/.purple + * @return The purple settings directory. + * @see purple_home_dir() +const char *purple_user_dir(void); + * Define a custom purple settings directory, overriding the default (user's home directory/.purple) + * @param dir The custom settings directory +void purple_util_set_user_dir(const char *dir); + * Builds a complete path from the root, making any directories along + * the path which do not already exist. + * @param path The path you wish to create. Note that it must start + * from the root or this function will fail. + * @param mode Unix-style permissions for this directory. + * @return 0 for success, nonzero on any error. +int purple_build_dir(const char *path, int mode); + * Write a string of data to a file of the given name in the Purple + * user directory ($HOME/.purple by default). The data is typically + * a serialized version of one of Purple's config files, such as + * prefs.xml, accounts.xml, etc. And the string is typically + * obtained using xmlnode_to_formatted_str. However, this function + * should work fine for saving binary files as well. + * @param filename The basename of the file to write in the purple_user_dir. + * @param data A null-terminated string of data to write. + * @param size The size of the data to save. If data is + * null-terminated you can pass in -1. + * @return TRUE if the file was written successfully. FALSE otherwise. +gboolean purple_util_write_data_to_file(const char *filename, const char *data, + * Write data to a file using the absolute path. + * This exists for Glib backwards compatibility reasons. + * @param filename_full Filename to write to + * @param data A null-terminated string of data to write. + * @param size The size of the data to save. If data is + * null-terminated you can pass in -1. + * @return TRUE if the file was written successfully. FALSE otherwise. + * @todo Remove this function (use g_file_set_contents instead) when 3.0.0 + * @see purple_util_write_data_to_file() +purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size); + * Read the contents of a given file and parse the results into an + * xmlnode tree structure. This is intended to be used to read + * Purple's configuration xml files (prefs.xml, pounces.xml, etc.) + * @param filename The basename of the file to open in the purple_user_dir. + * @param description A very short description of the contents of this + * file. This is used in error messages shown to the + * user when the file can not be opened. For example, + * "preferences," or "buddy pounces." + * @return An xmlnode tree of the contents of the given file. Or NULL, if + * the file does not exist or there was an error reading the file. +xmlnode *purple_util_read_xml_from_file(const char *filename, + const char *description); + * Creates a temporary file and returns a file pointer to it. + * This is like mkstemp(), but returns a file pointer and uses a + * pre-set template. It uses the semantics of tempnam() for the + * directory to use and allocates the space for the file path. + * The caller is responsible for closing the file and removing it when + * done, as well as freeing the space pointed to by @a path with + * @param path The returned path to the temp file. + * @param binary Text or binary, for platforms where it matters. + * @return A file pointer to the temporary file, or @c NULL on failure. +FILE *purple_mkstemp(char **path, gboolean binary); + * Returns an extension corresponding to the image data's file type. + * @param data A pointer to the image data + * @param len The length of the image data + * @return The appropriate extension, or "icon" if unknown. +purple_util_get_image_extension(gconstpointer data, size_t len); + * Returns a SHA-1 hash string of the data passed in. +char *purple_util_get_image_checksum(gconstpointer image_data, size_t image_len); + * @return A hex encoded version of the SHA-1 hash of the data passed + * in with the correct file extention appended. The file + * extension is determined by calling + * purple_util_get_image_extension(). This return value must + * be g_freed by the caller. +char *purple_util_get_image_filename(gconstpointer image_data, size_t image_len); +/**************************************************************************/ +/** @name Environment Detection Functions */ +/**************************************************************************/ + * Checks if the given program name is valid and executable. + * @param program The file name of the application. + * @return TRUE if the program is runable. +gboolean purple_program_is_valid(const char *program); + * Check if running GNOME. + * @return TRUE if running GNOME, FALSE otherwise. +gboolean purple_running_gnome(void); + * Check if running KDE. + * @return TRUE if running KDE, FALSE otherwise. +gboolean purple_running_kde(void); + * Check if running OS X. + * @return TRUE if running OS X, FALSE otherwise. +gboolean purple_running_osx(void); + * Returns the IP address from a socket file descriptor. + * @param fd The socket file descriptor. + * @return The IP address, or @c NULL on error. +char *purple_fd_get_ip(int fd); + * Returns the address family of a socket. + * @param fd The socket file descriptor. + * @return The address family of the socket (AF_INET, AF_INET6, etc) or -1 +int purple_socket_get_family(int fd); + * Returns TRUE if a socket is capable of speaking IPv4. + * This is the case for IPv4 sockets and, on some systems, IPv6 sockets + * (due to the IPv4-mapped address functionality). + * @param fd The socket file descriptor + * @return TRUE if a socket can speak IPv4. +gboolean purple_socket_speaks_ipv4(int fd); +/**************************************************************************/ +/** @name String Functions */ +/**************************************************************************/ + * Tests two strings for equality. + * Unlike strcmp(), this function will not crash if one or both of the + * @param right A string to compare with left + * @return @c TRUE if the strings are the same, else @c FALSE. +gboolean purple_strequal(const gchar *left, const gchar *right); + * Normalizes a string, so that it is suitable for comparison. + * The returned string will point to a static buffer, so if the + * string is intended to be kept long-term, you <i>must</i> + * g_strdup() it. Also, calling normalize() twice in the same line + * will lead to problems. + * @param account The account the string belongs to, or NULL if you do + * not know the account. If you use NULL, the string + * will still be normalized, but if the PRPL uses a + * custom normalization function then the string may + * not be normalized correctly. + * @param str The string to normalize. + * @return A pointer to the normalized version stored in a static buffer. +const char *purple_normalize(const PurpleAccount *account, const char *str); + * Normalizes a string, so that it is suitable for comparison. + * This is one possible implementation for the PRPL callback + * function "normalize." It returns a lowercase and UTF-8 + * normalized version of the string. + * @param account The account the string belongs to. + * @param str The string to normalize. + * @return A pointer to the normalized version stored in a static buffer. +const char *purple_normalize_nocase(const PurpleAccount *account, const char *str); + * Compares two strings to see if the first contains the second as + * @param s The string to check. + * @param p The prefix in question. + * @return TRUE if p is a prefix of s, otherwise FALSE. +gboolean purple_str_has_prefix(const char *s, const char *p); + * Compares two strings to see if the second is a proper suffix + * @param s The string to check. + * @param x The suffix in question. + * @return TRUE if x is a a suffix of s, otherwise FALSE. +gboolean purple_str_has_suffix(const char *s, const char *x); + * Duplicates a string and replaces all newline characters from the + * source string with HTML linebreaks. + * @param src The source string. + * @return The new string. Must be g_free'd by the caller. +gchar *purple_strdup_withhtml(const gchar *src); + * Ensures that all linefeeds have a matching carriage return. + * @param str The source string. + * @return The string with carriage returns. +char *purple_str_add_cr(const char *str); + * Strips all instances of the given character from the + * given string. The string is modified in place. This + * is useful for stripping new line characters, for example. + * purple_str_strip_char(my_dumb_string, '\n'); + * @param str The string to strip characters from. + * @param thechar The character to strip from the given string. +void purple_str_strip_char(char *str, char thechar); + * Given a string, this replaces all instances of one character + * with another. This happens inline (the original string IS + * @param string The string from which to replace stuff. + * @param delimiter The character you want replaced. + * @param replacement The character you want inserted in place + * of the delimiting character. +void purple_util_chrreplace(char *string, char delimiter, + * Given a string, this replaces one substring with another + * and returns a newly allocated string. + * @param string The string from which to replace stuff. + * @param delimiter The substring you want replaced. + * @param replacement The substring you want inserted in place + * of the delimiting substring. + * @return A new string, after performing the substitution. + * free this with g_free(). +gchar *purple_strreplace(const char *string, const char *delimiter, + const char *replacement); + * Given a string, this replaces any utf-8 substrings in that string with + * the corresponding numerical character reference, and returns a newly + * @param in The string which might contain utf-8 substrings + * @return A new string, with utf-8 replaced with numerical character + * references, free this with g_free() +char *purple_utf8_ncr_encode(const char *in); + * Given a string, this replaces any numerical character references + * in that string with the corresponding actual utf-8 substrings, + * and returns a newly allocated string. + * @param in The string which might contain numerical character references. + * @return A new string, with numerical character references + * replaced with actual utf-8, free this with g_free(). +char *purple_utf8_ncr_decode(const char *in); + * Given a string, this replaces one substring with another + * ignoring case and returns a newly allocated string. + * @param string The string from which to replace stuff. + * @param delimiter The substring you want replaced. + * @param replacement The substring you want inserted in place + * of the delimiting substring. + * @return A new string, after performing the substitution. + * free this with g_free(). +gchar *purple_strcasereplace(const char *string, const char *delimiter, + const char *replacement); + * This is like strstr, except that it ignores ASCII case in + * searching for the substring. + * @param haystack The string to search in. + * @param needle The substring to find. + * @return the location of the substring if found, or NULL if not +const char *purple_strcasestr(const char *haystack, const char *needle); + * Returns a string representing a filesize in the appropriate + * units (MB, KB, GB, etc.) + * @return The string in units form. This must be freed. +char *purple_str_size_to_units(size_t size); + * Converts seconds into a human-readable form. + * @param sec The seconds. + * @return A human-readable form, containing days, hours, minutes, and +char *purple_str_seconds_to_string(guint sec); + * Converts a binary string into a NUL terminated ascii string, + * replacing nonascii characters and characters below SPACE (including + * NUL) into \\xyy, where yy are two hex digits. Also backslashes are + * changed into two backslashes (\\\\). The returned, newly allocated + * string can be outputted to the console, and must be g_free()d. + * @param binary A string of random data, possibly with embedded NULs + * @param len The length in bytes of the input string. Must not be 0. + * @return A newly allocated ASCIIZ string. +char *purple_str_binary_to_ascii(const unsigned char *binary, guint len); +/**************************************************************************/ +/** @name URI/URL Functions */ +/**************************************************************************/ +void purple_got_protocol_handler_uri(const char *uri); + * Parses a URL, returning its host, port, file path, username and password. + * The returned data must be freed. + * @param url The URL to parse. + * @param ret_host The returned host. + * @param ret_port The returned port. + * @param ret_path The returned path. + * @param ret_user The returned username. + * @param ret_passwd The returned password. +gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port, + char **ret_path, char **ret_user, char **ret_passwd); + * This is the signature used for functions that act as the callback + * to purple_util_fetch_url() or purple_util_fetch_url_request(). + * @param url_data The same value that was returned when you called + * purple_fetch_url() or purple_fetch_url_request(). + * @param user_data The user data that your code passed into either + * purple_util_fetch_url() or purple_util_fetch_url_request(). + * @param url_text This will be NULL on error. Otherwise this + * will contain the contents of the URL. + * @param len 0 on error, otherwise this is the length of buf. + * @param error_message If something went wrong then this will contain + * a descriptive error message, and buf will be + * NULL and len will be 0. +typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message); + * Fetches the data from a URL, and passes it to a callback function. + * @param full TRUE if this is the full URL, or FALSE if it's a + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param cb The callback function. + * @param data The user data to pass to the callback function. +#define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \ + purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \ + * Fetches the data from a URL, and passes it to a callback function. + * @param full TRUE if this is the full URL, or FALSE if it's a + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param max_len The maximum number of bytes to retrieve (-1 for unlimited) + * @param cb The callback function. + * @param data The user data to pass to the callback function. + * @deprecated In 3.0.0, we'll rename this to "purple_util_fetch_url" and get rid of the old one +#define purple_util_fetch_url_len(url, full, user_agent, http11, max_len, cb, data) \ + purple_util_fetch_url_request_len(url, full, user_agent, http11, NULL, \ + FALSE, max_len, cb, data); + * Fetches the data from a URL, and passes it to a callback function. + * @param full TRUE if this is the full URL, or FALSE if it's a + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param request A HTTP request to send to the server instead of the + * @param include_headers + * If TRUE, include the HTTP headers in the response. + * @param callback The callback function. + * @param data The user data to pass to the callback function. +PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url, + gboolean full, const gchar *user_agent, gboolean http11, + const gchar *request, gboolean include_headers, + PurpleUtilFetchUrlCallback callback, gpointer data); + * Fetches the data from a URL, and passes it to a callback function. + * @param full TRUE if this is the full URL, or FALSE if it's a + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param request A HTTP request to send to the server instead of the + * @param include_headers + * If TRUE, include the HTTP headers in the response. + * @param max_len The maximum number of bytes to retrieve (-1 for unlimited) + * @param callback The callback function. + * @param data The user data to pass to the callback function. + * @deprecated In 3.0.0, this will go away. +PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url, + gboolean full, const gchar *user_agent, gboolean http11, + const gchar *request, gboolean include_headers, gssize max_len, + PurpleUtilFetchUrlCallback callback, gpointer data); + * Fetches the data from a URL, and passes it to a callback function. + * @param account The account for which the request is needed, or NULL. + * @param full TRUE if this is the full URL, or FALSE if it's a + * @param user_agent The user agent field to use, or NULL. + * @param http11 TRUE if HTTP/1.1 should be used to download the file. + * @param request A HTTP request to send to the server instead of the + * @param include_headers + * If TRUE, include the HTTP headers in the response. + * @param max_len The maximum number of bytes to retrieve (-1 for unlimited) + * @param callback The callback function. + * @param data The user data to pass to the callback function. + * @deprecated In 3.0.0, we'll rename this to "purple_util_fetch_url_request" and get rid of the old one +PurpleUtilFetchUrlData *purple_util_fetch_url_request_len_with_account( + PurpleAccount *account, const gchar *url, + gboolean full, const gchar *user_agent, gboolean http11, + const gchar *request, gboolean include_headers, gssize max_len, + PurpleUtilFetchUrlCallback callback, gpointer data); + * Cancel a pending URL request started with either + * purple_util_fetch_url_request() or purple_util_fetch_url(). + * @param url_data The data returned when you initiated the URL fetch. +void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data); + * Decodes a URL into a plain string. + * This will change hex codes and such to their ascii equivalents. + * @param str The string to translate. + * @return The resulting string. +const char *purple_url_decode(const char *str); + * Encodes a URL into an escaped string. + * This will change non-alphanumeric characters to hex codes. + * @param str The string to translate. + * @return The resulting string. +const char *purple_url_encode(const char *str); + * Checks if the given email address is syntactically valid. + * @param address The email address to validate. + * @return True if the email address is syntactically correct. +gboolean purple_email_is_valid(const char *address); + * Checks if the given IP address is a syntactically valid IPv4 address. + * @param ip The IP address to validate. + * @return True if the IP address is syntactically correct. + * @deprecated This function will be replaced with one that validates + * as either IPv4 or IPv6 in 3.0.0. If you don't want this, + * behavior, use one of the more specific functions. +gboolean purple_ip_address_is_valid(const char *ip); + * Checks if the given IP address is a syntactically valid IPv4 address. + * @param ip The IP address to validate. + * @return True if the IP address is syntactically correct. +gboolean purple_ipv4_address_is_valid(const char *ip); + * Checks if the given IP address is a syntactically valid IPv6 address. + * @param ip The IP address to validate. + * @return True if the IP address is syntactically correct. +gboolean purple_ipv6_address_is_valid(const char *ip); + * This function extracts a list of URIs from the a "text/uri-list" + * string. It was "borrowed" from gnome_uri_list_extract_uris + * @param uri_list An uri-list in the standard format. + * @return A GList containing strings allocated with g_malloc + * that have been splitted from uri-list. +GList *purple_uri_list_extract_uris(const gchar *uri_list); + * This function extracts a list of filenames from a + * "text/uri-list" string. It was "borrowed" from + * gnome_uri_list_extract_filenames + * @param uri_list A uri-list in the standard format. + * @return A GList containing strings allocated with g_malloc that + * contain the filenames in the uri-list. Note that unlike + * purple_uri_list_extract_uris() function, this will discard + * any non-file uri from the result value. +GList *purple_uri_list_extract_filenames(const gchar *uri_list); +/************************************************************************** + * UTF8 String Functions + **************************************************************************/ + * Attempts to convert a string to UTF-8 from an unknown encoding. + * This function checks the locale and tries sane defaults. + * @param str The source string. + * @return The UTF-8 string, or @c NULL if it could not be converted. +gchar *purple_utf8_try_convert(const char *str); + * Salvages the valid UTF-8 characters from a string, replacing any + * invalid characters with a filler character (currently hardcoded to + * @param str The source string. + * @return A valid UTF-8 string. +gchar *purple_utf8_salvage(const char *str); + * Removes unprintable characters from a UTF-8 string. These characters + * (in particular low-ASCII characters) are invalid in XML 1.0 and thus + * are not allowed in XMPP and are rejected by libxml2 by default. + * The returned string must be freed by the caller. + * @param str A valid UTF-8 string. + * @return A newly allocated UTF-8 string without the unprintable characters. +gchar *purple_utf8_strip_unprintables(const gchar *str); + * Return the UTF-8 version of gai_strerror(). It calls gai_strerror() + * then converts the result to UTF-8. This function is analogous to + * @param errnum The error code. + * @return The UTF-8 error message. +G_CONST_RETURN gchar *purple_gai_strerror(gint errnum); + * Compares two UTF-8 strings case-insensitively. This comparison is + * more expensive than a simple g_utf8_collate() comparison because + * it calls g_utf8_casefold() on each string, which allocates new + * @param a The first string. + * @param b The second string. + * @return -1 if @a is less than @a b. + * 0 if @a is equal to @a b. + * 1 if @a is greater than @a b. +int purple_utf8_strcasecmp(const char *a, const char *b); + * Case insensitive search for a word in a string. The needle string + * must be contained in the haystack string and not be immediately + * preceded or immediately followed by another alpha-numeric character. + * @param haystack The string to search in. + * @param needle The substring to find. + * @return TRUE if haystack has the word, otherwise FALSE +gboolean purple_utf8_has_word(const char *haystack, const char *needle); + * Prints a UTF-8 message to the given file stream. The function + * tries to convert the UTF-8 message to user's locale. If this + * is not possible, the original UTF-8 text will be printed. + * @param filestream The file stream (e.g. STDOUT or STDERR) + * @param message The message to print. +void purple_print_utf8_to_console(FILE *filestream, char *message); + * Checks for messages starting (post-HTML) with "/me ", including the space. + * @param message The message to check + * @param len The message length, or -1 + * @return TRUE if it starts with "/me ", and it has been removed, otherwise +gboolean purple_message_meify(char *message, gssize len); + * Removes the underscore characters from a string used identify the mnemonic + * @param in The string to strip + * @return The stripped string +char *purple_text_strip_mnemonic(const char *in); + * @param x The number to add 8 to. +#define purple_add_eight(x) ((x)+8) + * Does the reverse of purple_escape_filename + * This will change hex codes and such to their ascii equivalents. + * @param str The string to translate. + * @return The resulting string. +const char *purple_unescape_filename(const char *str); + * Escapes filesystem-unfriendly characters from a filename + * @param str The string to translate. + * @return The resulting string. +const char *purple_escape_filename(const char *str); + * This is added temporarily to assist the split of oscar into aim and icq. + * This should not be used by plugins. + * @deprecated This function should not be used in new code and should be + * removed in 3.0.0. The aim/icq prpl split happened a long + * time ago, and we don't need to keep migrating old data. +const char *_purple_oscar_convert(const char *act, const char *protocol); + * Restore default signal handlers for signals which might reasonably have + * handlers. This should be called by a fork()'d child process, since child processes + * inherit the handlers of the parent. +void purple_restore_default_signal_handlers(void); + * Gets the host name of the machine. If it not possible to determine the + * host name, "localhost" is returned + * @constreturn The hostname +const gchar *purple_get_host_name(void); + * Returns a type 4 (random) UUID + * @return A UUID, caller is responsible for freeing it +gchar *purple_uuid_random(void); +#endif /* _PURPLE_UTIL_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/value.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,504 @@
+ * @file value.h Value wrapper API + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_VALUE_H_ +#define _PURPLE_VALUE_H_ + * Specific value types. + PURPLE_TYPE_UNKNOWN = 0, /**< Unknown type. */ + PURPLE_TYPE_SUBTYPE, /**< Subtype. */ + PURPLE_TYPE_CHAR, /**< Character. */ + PURPLE_TYPE_UCHAR, /**< Unsigned character. */ + PURPLE_TYPE_BOOLEAN, /**< Boolean. */ + PURPLE_TYPE_SHORT, /**< Short integer. */ + PURPLE_TYPE_USHORT, /**< Unsigned short integer. */ + PURPLE_TYPE_INT, /**< Integer. */ + PURPLE_TYPE_UINT, /**< Unsigned integer. */ + PURPLE_TYPE_LONG, /**< Long integer. */ + PURPLE_TYPE_ULONG, /**< Unsigned long integer. */ + PURPLE_TYPE_INT64, /**< 64-bit integer. */ + PURPLE_TYPE_UINT64, /**< 64-bit unsigned integer. */ + PURPLE_TYPE_STRING, /**< String. */ + PURPLE_TYPE_OBJECT, /**< Object pointer. */ + PURPLE_TYPE_POINTER, /**< Generic pointer. */ + PURPLE_TYPE_ENUM, /**< Enum. */ + PURPLE_TYPE_BOXED /**< Boxed pointer with specific type. */ + * Purple-specific subtype values. + PURPLE_SUBTYPE_UNKNOWN = 0, + PURPLE_SUBTYPE_ACCOUNT, + PURPLE_SUBTYPE_BLIST_BUDDY, + PURPLE_SUBTYPE_BLIST_GROUP, + PURPLE_SUBTYPE_BLIST_CHAT, + PURPLE_SUBTYPE_BUDDY_ICON, + PURPLE_SUBTYPE_CONNECTION, + PURPLE_SUBTYPE_CONVERSATION, + PURPLE_SUBTYPE_BLIST_NODE, + PURPLE_SUBTYPE_SAVEDSTATUS, + PURPLE_SUBTYPE_XMLNODE, + PURPLE_SUBTYPE_USERINFO, + PURPLE_SUBTYPE_STORED_IMAGE, + PURPLE_SUBTYPE_CERTIFICATEPOOL, + PURPLE_SUBTYPE_CHATBUDDY + * A wrapper for a type, subtype, and specific type of value. + unsigned char uchar_data; + unsigned short ushort_data; + unsigned int uint_data; + unsigned long ulong_data; + * Creates a new PurpleValue. + * This function takes a type and, depending on that type, a sub-type + * If @a type is PURPLE_TYPE_BOXED, the next parameter must be a + * string representing the specific type. + * If @a type is PURPLE_TYPE_SUBTYPE, the next parameter must be a + * integer or enum representing the sub-type. + * If the subtype or specific type is not set when required, random + * errors may occur. You have been warned. + * @param type The type. + * @return The new value. +PurpleValue *purple_value_new(PurpleType type, ...); + * Creates a new outgoing PurpleValue. If a value is an "outgoing" value + * it means the value can be modified by plugins and scripts. + * This function takes a type and, depending on that type, a sub-type + * If @a type is PURPLE_TYPE_BOXED, the next parameter must be a + * string representing the specific type. + * If @a type is PURPLE_TYPE_SUBTYPE, the next parameter must be a + * integer or enum representing the sub-type. + * If the sub-type or specific type is not set when required, random + * errors may occur. You have been warned. + * @param type The type. + * @return The new value. +PurpleValue *purple_value_new_outgoing(PurpleType type, ...); + * Destroys a PurpleValue. + * @param value The value to destroy. +void purple_value_destroy(PurpleValue *value); + * Duplicated a PurpleValue. + * @param value The value to duplicate. + * @return The duplicate value. +PurpleValue *purple_value_dup(const PurpleValue *value); + * Returns a value's type. + * @param value The value whose type you want. + * @return The value's type. +PurpleType purple_value_get_type(const PurpleValue *value); + * Returns a value's subtype. + * If the value's type is not PURPLE_TYPE_SUBTYPE, this will return 0. + * Subtypes should never have a subtype of 0. + * @param value The value whose subtype you want. + * @return The value's subtype, or 0 if @a type is not PURPLE_TYPE_SUBTYPE. +unsigned int purple_value_get_subtype(const PurpleValue *value); + * Returns a value's specific type. + * If the value's type is not PURPLE_TYPE_BOXED, this will return @c NULL. + * @param value The value whose specific type you want. + * @return The value's specific type, or @a NULL if not PURPLE_TYPE_BOXED. +const char *purple_value_get_specific_type(const PurpleValue *value); + * Returns whether or not the value is an outgoing value. + * @param value The value. + * @return TRUE if the value is outgoing, or FALSE otherwise. +gboolean purple_value_is_outgoing(const PurpleValue *value); + * Sets the value's character data. + * @param value The value. + * @param data The character data. +void purple_value_set_char(PurpleValue *value, char data); + * Sets the value's unsigned character data. + * @param value The value. + * @param data The unsigned character data. +void purple_value_set_uchar(PurpleValue *value, unsigned char data); + * Sets the value's boolean data. + * @param value The value. + * @param data The boolean data. +void purple_value_set_boolean(PurpleValue *value, gboolean data); + * Sets the value's short integer data. + * @param value The value. + * @param data The short integer data. +void purple_value_set_short(PurpleValue *value, short data); + * Sets the value's unsigned short integer data. + * @param value The value. + * @param data The unsigned short integer data. +void purple_value_set_ushort(PurpleValue *value, unsigned short data); + * Sets the value's integer data. + * @param value The value. + * @param data The integer data. +void purple_value_set_int(PurpleValue *value, int data); + * Sets the value's unsigned integer data. + * @param value The value. + * @param data The unsigned integer data. +void purple_value_set_uint(PurpleValue *value, unsigned int data); + * Sets the value's long integer data. + * @param value The value. + * @param data The long integer data. +void purple_value_set_long(PurpleValue *value, long data); + * Sets the value's unsigned long integer data. + * @param value The value. + * @param data The unsigned long integer data. +void purple_value_set_ulong(PurpleValue *value, unsigned long data); + * Sets the value's 64-bit integer data. + * @param value The value. + * @param data The 64-bit integer data. +void purple_value_set_int64(PurpleValue *value, gint64 data); + * Sets the value's unsigned 64-bit integer data. + * @param value The value. + * @param data The unsigned 64-bit integer data. +void purple_value_set_uint64(PurpleValue *value, guint64 data); + * Sets the value's string data. + * @param value The value. + * @param data The string data. +void purple_value_set_string(PurpleValue *value, const char *data); + * Sets the value's object data. + * @param value The value. + * @param data The object data. +void purple_value_set_object(PurpleValue *value, void *data); + * Sets the value's pointer data. + * @param value The value. + * @param data The pointer data. +void purple_value_set_pointer(PurpleValue *value, void *data); + * Sets the value's enum data. + * @param value The value. + * @param data The enum data. +void purple_value_set_enum(PurpleValue *value, int data); + * Sets the value's boxed data. + * @param value The value. + * @param data The boxed data. +void purple_value_set_boxed(PurpleValue *value, void *data); + * Returns the value's character data. + * @param value The value. + * @return The character data. +char purple_value_get_char(const PurpleValue *value); + * Returns the value's unsigned character data. + * @param value The value. + * @return The unsigned character data. +unsigned char purple_value_get_uchar(const PurpleValue *value); + * Returns the value's boolean data. + * @param value The value. + * @return The boolean data. +gboolean purple_value_get_boolean(const PurpleValue *value); + * Returns the value's short integer data. + * @param value The value. + * @return The short integer data. +short purple_value_get_short(const PurpleValue *value); + * Returns the value's unsigned short integer data. + * @param value The value. + * @return The unsigned short integer data. +unsigned short purple_value_get_ushort(const PurpleValue *value); + * Returns the value's integer data. + * @param value The value. + * @return The integer data. +int purple_value_get_int(const PurpleValue *value); + * Returns the value's unsigned integer data. + * @param value The value. + * @return The unsigned integer data. +unsigned int purple_value_get_uint(const PurpleValue *value); + * Returns the value's long integer data. + * @param value The value. + * @return The long integer data. +long purple_value_get_long(const PurpleValue *value); + * Returns the value's unsigned long integer data. + * @param value The value. + * @return The unsigned long integer data. +unsigned long purple_value_get_ulong(const PurpleValue *value); + * Returns the value's 64-bit integer data. + * @param value The value. + * @return The 64-bit integer data. +gint64 purple_value_get_int64(const PurpleValue *value); + * Returns the value's unsigned 64-bit integer data. + * @param value The value. + * @return The unsigned 64-bit integer data. +guint64 purple_value_get_uint64(const PurpleValue *value); + * Returns the value's string data. + * @param value The value. + * @return The string data. +const char *purple_value_get_string(const PurpleValue *value); + * Returns the value's object data. + * @param value The value. + * @return The object data. +void *purple_value_get_object(const PurpleValue *value); + * Returns the value's pointer data. + * @param value The value. + * @return The pointer data. +void *purple_value_get_pointer(const PurpleValue *value); + * Returns the value's enum data. + * @param value The value. + * @return The enum data. +int purple_value_get_enum(const PurpleValue *value); + * Returns the value's boxed data. + * @param value The value. + * @return The boxed data. +void *purple_value_get_boxed(const PurpleValue *value); +#endif /* _PURPLE_VALUE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/version.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,88 @@
+ * @file version.h Purple Versioning + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_VERSION_H_ +#define _PURPLE_VERSION_H_ +/** The major version of the running libpurple. */ +#define PURPLE_MAJOR_VERSION (2) +/** The minor version of the running libpurple. */ +#define PURPLE_MINOR_VERSION (10) +/** The micro version of the running libpurple. */ +#define PURPLE_MICRO_VERSION (7) +#define PURPLE_VERSION_CHECK(x,y,z) ((x) == PURPLE_MAJOR_VERSION && \ + ((y) < PURPLE_MINOR_VERSION || \ + ((y) == PURPLE_MINOR_VERSION && (z) <= PURPLE_MICRO_VERSION))) + * Checks that the libpurple version is compatible with the requested + * @param required_major: the required major version. + * @param required_minor: the required minor version. + * @param required_micro: the required micro version. + * @return NULL if the versions are compatible, or a string describing + * the version mismatch if not compatible. +const char *purple_version_check(guint required_major, guint required_minor, guint required_micro); + * The major version of the running libpurple. Contrast with + * #PURPLE_MAJOR_VERSION, which expands at compile time to the major version of + * libpurple being compiled against. +extern const guint purple_major_version; + * The minor version of the running libpurple. Contrast with + * #PURPLE_MINOR_VERSION, which expands at compile time to the minor version of + * libpurple being compiled against. +extern const guint purple_minor_version; + * The micro version of the running libpurple. Contrast with + * #PURPLE_MICRO_VERSION, which expands at compile time to the micro version of + * libpurple being compiled against. +extern const guint purple_micro_version; +#endif /* _PURPLE_VERSION_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/whiteboard.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,262 @@
+ * @file whiteboard.h The PurpleWhiteboard core object + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_WHITEBOARD_H_ +#define _PURPLE_WHITEBOARD_H_ + * Whiteboard PRPL Operations +typedef struct _PurpleWhiteboardPrplOps PurpleWhiteboardPrplOps; +typedef struct _PurpleWhiteboard + int state; /**< State of whiteboard session */ + PurpleAccount *account; /**< Account associated with this session */ + char *who; /**< Name of the remote user */ + void *ui_data; /**< Graphical user-interface data */ + void *proto_data; /**< Protocol specific data */ + PurpleWhiteboardPrplOps *prpl_ops; /**< Protocol-plugin operations */ + GList *draw_list; /**< List of drawing elements/deltas to send */ + * The PurpleWhiteboard UI Operations +typedef struct _PurpleWhiteboardUiOps + void (*create)(PurpleWhiteboard *wb); /**< create function */ + void (*destroy)(PurpleWhiteboard *wb); /**< destory function */ + void (*set_dimensions)(PurpleWhiteboard *wb, int width, int height); /**< set_dimensions function */ + void (*set_brush) (PurpleWhiteboard *wb, int size, int color); /**< set the size and color of the brush */ + void (*draw_point)(PurpleWhiteboard *wb, int x, int y, + int color, int size); /**< draw_point function */ + void (*draw_line)(PurpleWhiteboard *wb, int x1, int y1, + int color, int size); /**< draw_line function */ + void (*clear)(PurpleWhiteboard *wb); /**< clear function */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +} PurpleWhiteboardUiOps; + * PurpleWhiteboard PRPL Operations +struct _PurpleWhiteboardPrplOps + void (*start)(PurpleWhiteboard *wb); /**< start function */ + void (*end)(PurpleWhiteboard *wb); /**< end function */ + void (*get_dimensions)(const PurpleWhiteboard *wb, int *width, int *height); /**< get_dimensions function */ + void (*set_dimensions)(PurpleWhiteboard *wb, int width, int height); /**< set_dimensions function */ + void (*get_brush) (const PurpleWhiteboard *wb, int *size, int *color); /**< get the brush size and color */ + void (*set_brush) (PurpleWhiteboard *wb, int size, int color); /**< set the brush size and color */ + void (*send_draw_list)(PurpleWhiteboard *wb, GList *draw_list); /**< send_draw_list function */ + void (*clear)(PurpleWhiteboard *wb); /**< clear function */ + void (*_purple_reserved1)(void); + void (*_purple_reserved2)(void); + void (*_purple_reserved3)(void); + void (*_purple_reserved4)(void); +#endif /* __cplusplus */ +/******************************************************************************/ +/** @name PurpleWhiteboard API */ +/******************************************************************************/ + * Sets the UI operations + * @param ops The UI operations to set +void purple_whiteboard_set_ui_ops(PurpleWhiteboardUiOps *ops); + * Sets the prpl operations for a whiteboard + * @param wb The whiteboard for which to set the prpl operations + * @param ops The prpl operations to set +void purple_whiteboard_set_prpl_ops(PurpleWhiteboard *wb, PurpleWhiteboardPrplOps *ops); + * @param account The account. + * @param who Who you're drawing with. + * @param state The state. + * @return The new whiteboard +PurpleWhiteboard *purple_whiteboard_create(PurpleAccount *account, const char *who, int state); + * Destroys a whiteboard + * @param wb The whiteboard. +void purple_whiteboard_destroy(PurpleWhiteboard *wb); + * @param wb The whiteboard. +void purple_whiteboard_start(PurpleWhiteboard *wb); + * Finds a whiteboard from an account and user. + * @param account The account. + * @return The whiteboard if found, otherwise @c NULL. +PurpleWhiteboard *purple_whiteboard_get_session(const PurpleAccount *account, const char *who); + * Destorys a drawing list for a whiteboard + * @param draw_list The drawing list. +void purple_whiteboard_draw_list_destroy(GList *draw_list); + * Gets the dimension of a whiteboard. + * @param wb The whiteboard. + * @param width The width to be set. + * @param height The height to be set. + * @return TRUE if the values of width and height were set. +gboolean purple_whiteboard_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height); + * Sets the dimensions for a whiteboard. + * @param wb The whiteboard. + * @param width The width. + * @param height The height. +void purple_whiteboard_set_dimensions(PurpleWhiteboard *wb, int width, int height); + * Draws a point on a whiteboard. + * @param wb The whiteboard. + * @param x The x coordinate. + * @param y The y coordinate. + * @param color The color to use. + * @param size The brush size. +void purple_whiteboard_draw_point(PurpleWhiteboard *wb, int x, int y, int color, int size); + * Send a list of points to draw to the buddy. + * @param wb The whiteboard + * @param list A GList of points +void purple_whiteboard_send_draw_list(PurpleWhiteboard *wb, GList *list); + * Draws a line on a whiteboard + * @param wb The whiteboard. + * @param x1 The top-left x coordinate. + * @param y1 The top-left y coordinate. + * @param x2 The bottom-right x coordinate. + * @param y2 The bottom-right y coordinate. + * @param color The color to use. + * @param size The brush size. +void purple_whiteboard_draw_line(PurpleWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size); + * @param wb The whiteboard. +void purple_whiteboard_clear(PurpleWhiteboard *wb); + * Sends a request to the buddy to clear the whiteboard. + * @param wb The whiteboard +void purple_whiteboard_send_clear(PurpleWhiteboard *wb); + * Sends a request to change the size and color of the brush. + * @param wb The whiteboard + * @param size The size of the brush + * @param color The color of the brush +void purple_whiteboard_send_brush(PurpleWhiteboard *wb, int size, int color); + * Gets the size and color of the brush. + * @param wb The whiteboard + * @param size The size of the brush + * @param color The color of the brush + * @return TRUE if the size and color were set. +gboolean purple_whiteboard_get_brush(const PurpleWhiteboard *wb, int *size, int *color); + * Sets the size and color of the brush. + * @param wb The whiteboard + * @param size The size of the brush + * @param color The color of the brush +void purple_whiteboard_set_brush(PurpleWhiteboard *wb, int size, int color); +#endif /* __cplusplus */ +#endif /* _PURPLE_WHITEBOARD_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/xfer.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,67 @@
+ * @file xfer.h MSN File Transfer functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#define MAX_FILE_NAME_LEN 260 /* MAX_PATH in Windows */ + * The context data for a file transfer request + guint32 length; /*< Length of header */ + guint32 version; /*< MSN version */ + guint64 file_size; /*< Size of file */ + guint32 type; /*< Transfer type */ + gunichar2 file_name[MAX_FILE_NAME_LEN]; /*< Self-explanatory */ + gchar unknown1[30]; /*< Used somehow for background sharing */ + guint32 unknown2; /*< Possibly for background sharing as well */ + gchar *preview; /*< File preview data, 96x96 PNG */ +#define MSN_FILE_CONTEXT_SIZE (4*4 + 1*8 + 2*MAX_FILE_NAME_LEN + 30) +void msn_xfer_init(PurpleXfer *xfer); +void msn_xfer_cancel(PurpleXfer *xfer); +gssize msn_xfer_write(const guchar *data, gsize len, PurpleXfer *xfer); +gssize msn_xfer_read(guchar **data, PurpleXfer *xfer); +void msn_xfer_completed_cb(MsnSlpCall *slpcall, + const guchar *body, gsize size); +void msn_xfer_end_cb(MsnSlpCall *slpcall, MsnSession *session); +msn_file_context_to_wire(MsnFileContext *context); +msn_file_context_from_wire(const char *buf, gsize len); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/xmlnode.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,397 @@
+ * @file xmlnode.h XML DOM functions + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _PURPLE_XMLNODE_H_ +#define _PURPLE_XMLNODE_H_ + * The valid types for an xmlnode +typedef enum _XMLNodeType + XMLNODE_TYPE_TAG, /**< Just a tag */ + XMLNODE_TYPE_ATTRIB, /**< Has attributes */ + XMLNODE_TYPE_DATA /**< Has data */ +typedef struct _xmlnode xmlnode; + char *name; /**< The name of the node. */ + char *xmlns; /**< The namespace of the node */ + XMLNodeType type; /**< The type of the node. */ + char *data; /**< The data for the node. */ + size_t data_sz; /**< The size of the data. */ + xmlnode *parent; /**< The parent node or @c NULL.*/ + xmlnode *child; /**< The child node or @c NULL.*/ + xmlnode *lastchild; /**< The last child node or @c NULL.*/ + xmlnode *next; /**< The next node or @c NULL. */ + char *prefix; /**< The namespace prefix if any. */ + GHashTable *namespace_map; /**< The namespace map. */ + * Creates a new xmlnode. + * @param name The name of the node. + * @return The new node. +xmlnode *xmlnode_new(const char *name); + * Creates a new xmlnode child. + * @param parent The parent node. + * @param name The name of the child node. + * @return The new child node. +xmlnode *xmlnode_new_child(xmlnode *parent, const char *name); + * Inserts a node into a node as a child. + * @param parent The parent node to insert child into. + * @param child The child node to insert into parent. +void xmlnode_insert_child(xmlnode *parent, xmlnode *child); + * Gets a child node named name. + * @param parent The parent node. + * @param name The child's name. + * @return The child or NULL. +xmlnode *xmlnode_get_child(const xmlnode *parent, const char *name); + * Gets a child node named name in a namespace. + * @param parent The parent node. + * @param name The child's name. + * @param xmlns The namespace. + * @return The child or NULL. +xmlnode *xmlnode_get_child_with_namespace(const xmlnode *parent, const char *name, const char *xmlns); + * Gets the next node with the same name as node. + * @param node The node of a twin to find. + * @return The twin of node or NULL. +xmlnode *xmlnode_get_next_twin(xmlnode *node); + * Inserts data into a node. + * @param node The node to insert data into. + * @param data The data to insert. + * @param size The size of the data to insert. If data is + * null-terminated you can pass in -1. +void xmlnode_insert_data(xmlnode *node, const char *data, gssize size); + * Gets (escaped) data from a node. + * @param node The node to get data from. + * @return The data from the node or NULL. This data is in raw escaped format. + * You must g_free this string when finished using it. +char *xmlnode_get_data(const xmlnode *node); + * Gets unescaped data from a node. + * @param node The node to get data from. + * @return The data from the node, in unescaped form. You must g_free + * this string when finished using it. +char *xmlnode_get_data_unescaped(const xmlnode *node); + * Sets an attribute for a node. + * @param node The node to set an attribute for. + * @param attr The name of the attribute. + * @param value The value of the attribute. +void xmlnode_set_attrib(xmlnode *node, const char *attr, const char *value); +#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_XMLNODE_C_) + * Sets a prefixed attribute for a node + * @param node The node to set an attribute for. + * @param attr The name of the attribute to set + * @param prefix The prefix of the attribute to ste + * @param value The value of the attribute + * @deprecated Use xmlnode_set_attrib_full instead. +void xmlnode_set_attrib_with_prefix(xmlnode *node, const char *attr, const char *prefix, const char *value); + * Sets a namespaced attribute for a node + * @param node The node to set an attribute for. + * @param attr The name of the attribute to set + * @param xmlns The namespace of the attribute to ste + * @param value The value of the attribute + * @deprecated Use xmlnode_set_attrib_full instead. +void xmlnode_set_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns, const char *value); +#endif /* PURPLE_DISABLE_DEPRECATED */ + * Sets a namespaced attribute for a node + * @param node The node to set an attribute for. + * @param attr The name of the attribute to set + * @param xmlns The namespace of the attribute to ste + * @param prefix The prefix of the attribute to ste + * @param value The value of the attribute +void xmlnode_set_attrib_full(xmlnode *node, const char *attr, const char *xmlns, + const char *prefix, const char *value); + * Gets an attribute from a node. + * @param node The node to get an attribute from. + * @param attr The attribute to get. + * @return The value of the attribute. +const char *xmlnode_get_attrib(const xmlnode *node, const char *attr); + * Gets a namespaced attribute from a node + * @param node The node to get an attribute from. + * @param attr The attribute to get + * @param xmlns The namespace of the attribute to get + * @return The value of the attribute/ +const char *xmlnode_get_attrib_with_namespace(const xmlnode *node, const char *attr, const char *xmlns); + * Removes an attribute from a node. + * @param node The node to remove an attribute from. + * @param attr The attribute to remove. +void xmlnode_remove_attrib(xmlnode *node, const char *attr); + * Removes a namespaced attribute from a node + * @param node The node to remove an attribute from + * @param attr The attribute to remove + * @param xmlns The namespace of the attribute to remove +void xmlnode_remove_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns); + * Sets the namespace of a node + * @param node The node to qualify + * @param xmlns The namespace of the node +void xmlnode_set_namespace(xmlnode *node, const char *xmlns); + * Returns the namespace of a node + * @param node The node to get the namepsace from + * @return The namespace of this node +const char *xmlnode_get_namespace(const xmlnode *node); + * Returns the current default namespace. The default + * namespace is the current namespace which applies to child + * elements which are unprefixed and which do not contain their + * <iq type='get' xmlns='jabber:client' xmlns:ns1='http://example.org/ns1'> + * <ns1:element><child1/></ns1:element> + * The default namespace of all nodes (including 'child1') is "jabber:client", + * though the namespace for 'element' is "http://example.org/ns1". + * @param node The node for which to return the default namespace + * @return The default namespace of this node +const char *xmlnode_get_default_namespace(const xmlnode *node); + * Returns the defined namespace for a prefix. + * @param node The node from which to start the search. + * @param prefix The prefix for which to return the associated namespace. + * @return The namespace for this prefix. +const char *xmlnode_get_prefix_namespace(const xmlnode *node, const char *prefix); + * Sets the prefix of a node + * @param node The node to qualify + * @param prefix The prefix of the node +void xmlnode_set_prefix(xmlnode *node, const char *prefix); + * Returns the prefix of a node + * @param node The node to get the prefix from + * @return The prefix of this node +const char *xmlnode_get_prefix(const xmlnode *node); + * Remove all element prefixes from an xmlnode tree. The prefix's + * namespace is transformed into the default namespace for an element. + * Note that this will not necessarily remove all prefixes in use + * (prefixed attributes may still exist), and that this usage may + * break some applications (SOAP / XPath apparently often rely on + * the prefixes having the same name. + * @param node The node from which to strip prefixes +void xmlnode_strip_prefixes(xmlnode *node); + * Gets the parent node. + * @param child The child node. + * @return The parent or NULL. +xmlnode *xmlnode_get_parent(const xmlnode *child); + * Returns the node in a string of xml. + * @param node The starting node to output. + * @param len Address for the size of the string. + * @return The node represented as a string. You must + * g_free this string when finished using it. +char *xmlnode_to_str(const xmlnode *node, int *len); + * Returns the node in a string of human readable xml. + * @param node The starting node to output. + * @param len Address for the size of the string. + * @return The node as human readable string including + * tab and new line characters. You must + * g_free this string when finished using it. +char *xmlnode_to_formatted_str(const xmlnode *node, int *len); + * Creates a node from a string of XML. Calling this on the + * root node of an XML document will parse the entire document + * into a tree of nodes, and return the xmlnode of the root. + * @param str The string of xml. + * @param size The size of the string, or -1 if @a str is + * @return The new node. +xmlnode *xmlnode_from_str(const char *str, gssize size); + * Creates a new node from the source node. + * @param src The node to copy. + * @return A new copy of the src node. +xmlnode *xmlnode_copy(const xmlnode *src); + * Frees a node and all of its children. + * @param node The node to free. +void xmlnode_free(xmlnode *node); + * Creates a node from a XML File. Calling this on the + * root node of an XML document will parse the entire document + * into a tree of nodes, and return the xmlnode of the root. + * @param dir The directory where the file is located + * @param filename The filename + * @param description A description of the file being parsed. Displayed to + * the user if the file cannot be read. + * @param process The subsystem that is calling xmlnode_from_file. Used as + * the category for debugging. + * @return The new node or NULL if an error occurred. +xmlnode *xmlnode_from_file(const char *dir, const char *filename, + const char *description, const char *process); +#endif /* _PURPLE_XMLNODE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_aliases.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,41 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#include "yahoo_packet.h" +void yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias); +void yahoo_fetch_aliases(PurpleConnection *gc); +void yahoo_set_userinfo(PurpleConnection *gc); +void yahoo_set_userinfo_for_buddy(PurpleConnection *gc, PurpleBuddy *buddy); +void yahoo_personal_details_reset(YahooPersonalDetails *ypd, gboolean all); +void yahoo_process_contact_details(PurpleConnection *gc, struct yahoo_packet *pkt); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_doodle.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,131 @@
+ * @file yahoo_doodle.h The Yahoo! protocol plugin Doodle IMVironment object + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _YAHOO_DOODLE_H_ +#define _YAHOO_DOODLE_H_ +/****************************************************************************** + *****************************************************************************/ +#define DOODLE_IMV_KEY "doodle;106" +/****************************************************************************** + *****************************************************************************/ +/* Doodle communication commands */ +/* TODO: Should be an enum. */ +#define DOODLE_CMD_REQUEST 0 +#define DOODLE_CMD_CLEAR 1 +#define DOODLE_CMD_DRAW 2 +#define DOODLE_CMD_EXTRA 3 +#define DOODLE_CMD_READY 4 +#define DOODLE_CMD_CONFIRM 5 +/* Doodle communication command for shutting down (also 0) */ +#define DOODLE_CMD_SHUTDOWN 0 +#define DOODLE_EXTRA_NONE "\"1\"" +#define DOODLE_EXTRA_TICTACTOE "\"3\"" +#define DOODLE_EXTRA_DOTS "\"2\"" +/* Doodle session states */ +/* TODO: Should be an enum. */ +#define DOODLE_STATE_REQUESTING 0 +#define DOODLE_STATE_REQUESTED 1 +#define DOODLE_STATE_ESTABLISHED 2 +#define DOODLE_STATE_CANCELLED 3 +/* Doodle canvas dimensions */ +#define DOODLE_CANVAS_WIDTH 368 +#define DOODLE_CANVAS_HEIGHT 256 +/* Doodle color codes (most likely RGB) */ +/* TODO: Should be an enum and sorted by color name. */ +#define DOODLE_COLOR_RED 13369344 +#define DOODLE_COLOR_ORANGE 16737792 +#define DOODLE_COLOR_YELLOW 15658496 +#define DOODLE_COLOR_GREEN 52224 +#define DOODLE_COLOR_CYAN 52428 +#define DOODLE_COLOR_BLUE 204 +#define DOODLE_COLOR_VIOLET 5381277 +#define DOODLE_COLOR_PURPLE 13369548 +#define DOODLE_COLOR_TAN 12093547 +#define DOODLE_COLOR_BROWN 5256485 +#define DOODLE_COLOR_BLACK 0 +#define DOODLE_COLOR_GREY 11184810 +#define DOODLE_COLOR_WHITE 16777215 +#define PALETTE_NUM_OF_COLORS 12 +/* Doodle brush sizes (most likely variable) */ +#define DOODLE_BRUSH_SMALL 2 +#define DOODLE_BRUSH_MEDIUM 5 +#define DOODLE_BRUSH_LARGE 10 +#define DOODLE_MAX_BRUSH_MOTIONS 100 +/****************************************************************************** + *****************************************************************************/ +typedef struct _doodle_session + int brush_size; /* Size of drawing brush */ + int brush_color; /* Color of drawing brush */ +/****************************************************************************** + *****************************************************************************/ +PurpleCmdRet yahoo_doodle_purple_cmd_start(PurpleConversation *conv, const char *cmd, char **args, + char **error, void *data); +void yahoo_doodle_process(PurpleConnection *gc, const char *me, const char *from, + const char *command, const char *message, const char *imv_key); +void yahoo_doodle_initiate(PurpleConnection *gc, const char *to); +void yahoo_doodle_command_got_shutdown(PurpleConnection *gc, const char *from); +void yahoo_doodle_command_send_request(PurpleConnection *gc, const char *to, const char *imv_key); +void yahoo_doodle_command_send_ready(PurpleConnection *gc, const char *to, const char *imv_key); +void yahoo_doodle_command_send_draw(PurpleConnection *gc, const char *to, const char *message, const char *imv_key); +void yahoo_doodle_command_send_clear(PurpleConnection *gc, const char *to, const char *imv_key); +void yahoo_doodle_command_send_extra(PurpleConnection *gc, const char *to, const char *message, const char *imv_key); +void yahoo_doodle_command_send_confirm(PurpleConnection *gc, const char *to, const char *imv_key); +void yahoo_doodle_command_send_shutdown(PurpleConnection *gc, const char *to); +void yahoo_doodle_start(PurpleWhiteboard *wb); +void yahoo_doodle_end(PurpleWhiteboard *wb); +void yahoo_doodle_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height); +void yahoo_doodle_send_draw_list(PurpleWhiteboard *wb, GList *draw_list); +void yahoo_doodle_clear(PurpleWhiteboard *wb); +void yahoo_doodle_draw_stroke(PurpleWhiteboard *wb, GList *draw_list); +void yahoo_doodle_get_brush(const PurpleWhiteboard *wb, int *size, int *color); +void yahoo_doodle_set_brush(PurpleWhiteboard *wb, int size, int color); +#endif /* _YAHOO_DOODLE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_filexfer.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,70 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _YAHOO_FILEXFER_H_ +#define _YAHOO_FILEXFER_H_ + * Process ymsg events, particular IMViroments like Doodle +void yahoo_process_p2pfilexfer( PurpleConnection *gc, struct yahoo_packet *pkt ); + * Process ymsg file receive invites. +void yahoo_process_filetransfer(PurpleConnection *gc, struct yahoo_packet *pkt); + * Create a new PurpleXfer + * @param gc The PurpleConnection handle. + * @param who Who will we be sending it to? +PurpleXfer *yahoo_new_xfer(PurpleConnection *gc, const char *who); + * Returns TRUE if the buddy can receive file, FALSE otherwise. + * Federated users cannot receive files. So this will return FALSE only + * @param gc The connection + * @param who The name of the remote user + * @return TRUE or FALSE +gboolean yahoo_can_receive_file(PurpleConnection *gc, const char *who); + * @param gc The PurpleConnection handle. + * @param who Who are we sending it to? + * @param file What file? If NULL, user will choose after this call. +void yahoo_send_file(PurpleConnection *gc, const char *who, const char *file); +void yahoo_process_filetrans_15(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_filetrans_info_15(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_filetrans_acc_15(PurpleConnection *gc, struct yahoo_packet *pkt); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_friend.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,93 @@
+ * @file yahoo_friend.h The Yahoo! protocol plugin YahooFriend object + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _YAHOO_FRIEND_H_ +#define _YAHOO_FRIEND_H_ +#include "yahoo_packet.h" + YAHOO_PRESENCE_DEFAULT = 0, + YAHOO_PRESENCE_PERM_OFFLINE +} YahooPresenceVisibility; + YAHOO_P2PSTATUS_NOT_CONNECTED = 0, + YAHOO_P2PSTATUS_DO_NOT_CONNECT, + YAHOO_P2PSTATUS_WE_ARE_SERVER, + YAHOO_P2PSTATUS_WE_ARE_CLIENT +/* these are called friends instead of buddies mainly so I can use variables + * named f and not confuse them with variables named b +typedef struct _YahooFriend { + enum yahoo_status status; + gboolean bicon_sent_request; + YahooPresenceVisibility presence; + YahooPersonalDetails ypd; + YahooP2PStatus p2p_status; + gboolean p2p_packet_sent; /* 0:not sent, 1=sent */ + gint session_id; /* session id of friend */ +YahooFriend *yahoo_friend_find(PurpleConnection *gc, const char *name); +YahooFriend *yahoo_friend_find_or_new(PurpleConnection *gc, const char *name); +void yahoo_friend_set_ip(YahooFriend *f, const char *ip); +const char *yahoo_friend_get_ip(YahooFriend *f); +void yahoo_friend_set_game(YahooFriend *f, const char *game); +const char *yahoo_friend_get_game(YahooFriend *f); +void yahoo_friend_set_status_message(YahooFriend *f, char *msg); +const char *yahoo_friend_get_status_message(YahooFriend *f); +void yahoo_friend_set_alias_id(YahooFriend *f, const char *alias_id); +const char *yahoo_friend_get_alias_id(YahooFriend *f); +void yahoo_friend_set_buddy_icon_need_request(YahooFriend *f, gboolean needs); +gboolean yahoo_friend_get_buddy_icon_need_request(YahooFriend *f); +void yahoo_friend_free(gpointer p); +void yahoo_process_presence(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_friend_update_presence(PurpleConnection *gc, const char *name, + YahooPresenceVisibility presence); +void yahoo_friend_set_p2p_status(YahooFriend *f, YahooP2PStatus p2p_status); +YahooP2PStatus yahoo_friend_get_p2p_status(YahooFriend *f); +#endif /* _YAHOO_FRIEND_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_packet.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,150 @@
+ * @file yahoo_packet.h The Yahoo! protocol plugin + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _YAHOO_PACKET_H_ +#define _YAHOO_PACKET_H_ +enum yahoo_service { /* these are easier to see in hex */ + YAHOO_SERVICE_LOGON = 1, + YAHOO_SERVICE_IDLE, /* 5 (placemarker) */ + YAHOO_SERVICE_MAILSTAT, + YAHOO_SERVICE_USERSTAT, /* 0xa */ + YAHOO_SERVICE_CHATINVITE, + YAHOO_SERVICE_CALENDAR, + YAHOO_SERVICE_NEWPERSONALMAIL, + YAHOO_SERVICE_NEWCONTACT, + YAHOO_SERVICE_ADDIDENT, /* 0x10 */ + YAHOO_SERVICE_ADDIGNORE, + YAHOO_SERVICE_GOTGROUPRENAME, + YAHOO_SERVICE_SYSMESSAGE = 0x14, + YAHOO_SERVICE_SKINNAME = 0x15, + YAHOO_SERVICE_PASSTHROUGH2 = 0x16, + YAHOO_SERVICE_CONFINVITE = 0x18, + YAHOO_SERVICE_CONFLOGON, + YAHOO_SERVICE_CONFDECLINE, + YAHOO_SERVICE_CONFLOGOFF, + YAHOO_SERVICE_CONFADDINVITE, + YAHOO_SERVICE_CHATLOGON, + YAHOO_SERVICE_CHATLOGOFF, + YAHOO_SERVICE_CHATMSG = 0x20, + YAHOO_SERVICE_GAMELOGON = 0x28, + YAHOO_SERVICE_GAMELOGOFF, + YAHOO_SERVICE_GAMEMSG = 0x2a, + YAHOO_SERVICE_FILETRANSFER = 0x46, + YAHOO_SERVICE_VOICECHAT = 0x4A, + YAHOO_SERVICE_NOTIFY = 0x4B, + YAHOO_SERVICE_P2PFILEXFER, + YAHOO_SERVICE_PEERTOPEER = 0x4F, + YAHOO_SERVICE_AUTHRESP = 0x54, + YAHOO_SERVICE_LIST = 0x55, + YAHOO_SERVICE_AUTH = 0x57, + YAHOO_SERVICE_AUTHBUDDY = 0x6d, + YAHOO_SERVICE_ADDBUDDY = 0x83, + YAHOO_SERVICE_REMBUDDY = 0x84, + YAHOO_SERVICE_IGNORECONTACT, /* > 1, 7, 13 < 1, 66, 13, 0*/ + YAHOO_SERVICE_REJECTCONTACT, + YAHOO_SERVICE_GROUPRENAME = 0x89, /* > 1, 65(new), 66(0), 67(old) */ + YAHOO_SERVICE_KEEPALIVE = 0x8A, + YAHOO_SERVICE_CHATONLINE = 0x96, /* > 109(id), 1, 6(abcde) < 0,1*/ + YAHOO_SERVICE_CHATGOTO, + YAHOO_SERVICE_CHATJOIN, /* > 1 104-room 129-1600326591 62-2 */ + YAHOO_SERVICE_CHATLEAVE, + YAHOO_SERVICE_CHATEXIT = 0x9b, + YAHOO_SERVICE_CHATADDINVITE = 0x9d, + YAHOO_SERVICE_CHATLOGOUT = 0xa0, + YAHOO_SERVICE_CHATPING, + YAHOO_SERVICE_COMMENT = 0xa8, + YAHOO_SERVICE_PRESENCE_PERM = 0xb9, + YAHOO_SERVICE_PRESENCE_SESSION = 0xba, + YAHOO_SERVICE_AVATAR = 0xbc, + YAHOO_SERVICE_PICTURE_CHECKSUM = 0xbd, + YAHOO_SERVICE_PICTURE = 0xbe, + YAHOO_SERVICE_PICTURE_UPDATE = 0xc1, + YAHOO_SERVICE_PICTURE_UPLOAD = 0xc2, + YAHOO_SERVICE_Y6_VISIBLE_TOGGLE = 0xc5, + YAHOO_SERVICE_Y6_STATUS_UPDATE = 0xc6, + YAHOO_SERVICE_AVATAR_UPDATE = 0xc7, + YAHOO_SERVICE_VERIFY_ID_EXISTS = 0xc8, + YAHOO_SERVICE_AUDIBLE = 0xd0, + YAHOO_SERVICE_CONTACT_DETAILS = 0xd3, + /* YAHOO_SERVICE_CHAT_SESSION = 0xd4,?? Reports start of chat session, gets an id from server */ + YAHOO_SERVICE_AUTH_REQ_15 = 0xd6, + YAHOO_SERVICE_FILETRANS_15 = 0xdc, + YAHOO_SERVICE_FILETRANS_INFO_15 = 0xdd, + YAHOO_SERVICE_FILETRANS_ACC_15 = 0xde, + /* photo sharing services ?? - 0xd2, 0xd7, 0xd8, 0xda */ + YAHOO_SERVICE_CHGRP_15 = 0xe7, + YAHOO_SERVICE_STATUS_15 = 0xf0, + YAHOO_SERVICE_LIST_15 = 0xf1, + YAHOO_SERVICE_MESSAGE_ACK = 0xfb, + YAHOO_SERVICE_WEBLOGIN = 0x0226, + YAHOO_SERVICE_SMS_MSG = 0x02ea + /* YAHOO_SERVICE_DISCONNECT = 0x07d1 Server forces us to disconnect. Is sent with TCP FIN flag set */ +#define YAHOO_WEBMESSENGER_PROTO_VER 0x0065 +#define YAHOO_PROTO_VER 0x0010 +#define YAHOO_PROTO_VER_JAPAN 0x0010 +#define YAHOO_PACKET_HDRLEN (4 + 2 + 2 + 2 + 2 + 4 + 4) +struct yahoo_packet *yahoo_packet_new(enum yahoo_service service, + enum yahoo_status status, int id); +void yahoo_packet_hash(struct yahoo_packet *pkt, const char *fmt, ...); +void yahoo_packet_hash_str(struct yahoo_packet *pkt, int key, const char *value); +void yahoo_packet_hash_int(struct yahoo_packet *pkt, int key, int value); +int yahoo_packet_send(struct yahoo_packet *pkt, YahooData *yd); +int yahoo_packet_send_and_free(struct yahoo_packet *pkt, YahooData *yd); +size_t yahoo_packet_build(struct yahoo_packet *pkt, int pad, gboolean wm, gboolean jp, +void yahoo_packet_read(struct yahoo_packet *pkt, const guchar *data, int len); +void yahoo_packet_write(struct yahoo_packet *pkt, guchar *data); +void yahoo_packet_dump(guchar *data, int len); +size_t yahoo_packet_length(struct yahoo_packet *pkt); +void yahoo_packet_free(struct yahoo_packet *pkt); +#endif /* _YAHOO_PACKET_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoo_picture.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,43 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#ifndef _YAHOO_PICTURE_H_ +#define _YAHOO_PICTURE_H_ +void yahoo_send_picture_request(PurpleConnection *gc, const char *who); +void yahoo_send_picture_info(PurpleConnection *gc, const char *who); +void yahoo_send_picture_checksum(PurpleConnection *gc); +void yahoo_send_picture_update(PurpleConnection *gc, int type); +void yahoo_send_picture_update_to_user(PurpleConnection *gc, const char *who, int type); +void yahoo_process_picture(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_picture_checksum(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_picture_upload(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_avatar_update(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); +void yahoo_buddy_icon_upload(PurpleConnection *gc, struct yahoo_buddy_icon_upload_data *d); +void yahoo_buddy_icon_upload_data_free(struct yahoo_buddy_icon_upload_data *d); +#endif /* _YAHOO_PICTURE_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/yahoochat.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,66 @@
+ * @file yahoochat.h The Yahoo! protocol plugin, chat and conference stuff + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#include "yahoo_packet.h" +void yahoo_process_conference_invite(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_conference_decline(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_conference_logon(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_conference_logoff(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_conference_message(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_online(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_logout(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_join(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_exit(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_message(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_addinvite(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_process_chat_goto(PurpleConnection *gc, struct yahoo_packet *pkt); +void yahoo_c_leave(PurpleConnection *gc, int id); +int yahoo_c_send(PurpleConnection *gc, int id, const char *what, PurpleMessageFlags flags); +GList *yahoo_c_info(PurpleConnection *gc); +GHashTable *yahoo_c_info_defaults(PurpleConnection *gc, const char *chat_name); +void yahoo_c_join(PurpleConnection *gc, GHashTable *data); +char *yahoo_get_chat_name(GHashTable *data); +void yahoo_c_invite(PurpleConnection *gc, int id, const char *msg, const char *name); +void yahoo_conf_leave(YahooData *yd, const char *room, const char *dn, GList *who); +void yahoo_chat_goto(PurpleConnection *gc, const char *name); +/* room listing functions */ +PurpleRoomlist *yahoo_roomlist_get_list(PurpleConnection *gc); +void yahoo_roomlist_cancel(PurpleRoomlist *list); +void yahoo_roomlist_expand_category(PurpleRoomlist *list, PurpleRoomlistRoom *category); +void yahoo_chat_add_users(PurpleConvChat *chat, GList *newusers); +void yahoo_chat_add_user(PurpleConvChat *chat, const char *user, const char *reason); +#endif /* _YAHOO_CHAT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Headers/ycht.h Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,97 @@
+ * @file ycht.h The Yahoo! protocol plugin, YCHT protocol stuff. + * Copyright (C) 2004 Timothy Ringenbach <omarvo@hotmail.com> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +/* #define YAHOO_YCHT_DEBUG */ +#define YAHOO_YCHT_HOST "jcs3.chat.dcn.yahoo.com" +#define YAHOO_YCHT_PORT 8002 +#define YCHT_VERSION (0xae) +#define YCHT_HEADER_LEN (0x10) + YCHT_SERVICE_LOGIN = 0x01, + YCHT_SERVICE_LOGOUT = 0x02, + YCHT_SERVICE_CHATJOIN = 0x11, + YCHT_SERVICE_CHATPART = 0x12, + YCHT_SERVICE_CHATMSG = 0x41, + YCHT_SERVICE_CHATMSG_EMOTE = 0x43, + YCHT_SERVICE_PING = 0x62, + YCHT_SERVICE_ONLINE_FRIENDS = 0x68 +yahoo: YCHT Service: 0x11 Version: 0x100 +yahoo: Data[0]: Linux, FreeBSD, Solaris:1 +yahoo: Data[1]: Questions, problems and discussions about all flavors of Unix. +yahoo: Data[4]: sgooki888\0020\002 \0022769036\00258936\002 +yahoo: --==End of incoming YCHT packet==-- +yahoo: --==Incoming YCHT packet==-- +yahoo: YCHT Service: 0x12 Version: 0x100 +yahoo: Data[0]: Linux, FreeBSD, Solaris:1 +yahoo: Data[1]: cccc4cccc +yahoo: --==End of incoming YCHT packet==-- +#define YCHT_SEP "\xc0\x80" +typedef struct _YchtConn { + gboolean changing_rooms; + PurpleCircBuffer *txbuf; +void ycht_connection_open(PurpleConnection *gc); +void ycht_connection_close(YchtConn *ycht); +void ycht_chat_join(YchtConn *ycht, const char *room); +int ycht_chat_send(YchtConn *ycht, const char *room, const char *what); +void ycht_chat_leave(YchtConn *ycht, const char *room, gboolean logout); +void ycht_chat_send_invite(YchtConn *ycht, const char *room, const char *buddy, const char *msg); +void ycht_chat_goto_user(YchtConn *ycht, const char *name); +void ycht_chat_send_keepalive(YchtConn *ycht); +#endif /* _PURPLE_YCHT_H_ */ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/English.lproj/InfoPlist.strings Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,3 @@
+/* Localized versions of Info.plist keys */ +CFBundleName = "libpurple"; --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/Info.plist Fri Feb 22 01:22:17 2013 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleInfoDictionaryVersion</key> + <key>CFBundlePackageType</key> + <key>CFBundleSignature</key> + <key>CFBundleVersion</key> + <string>0.0.1d1</string> + <key>CFBundleIdentifier</key> + <string>im.pidgin.libpurple</string> Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/bn_IN/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/ca/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/cs/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/da/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/de/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/el/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/en_AU/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/en_CA/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/en_GB/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/es/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/fi/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/fr/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/hr/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/hu/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/it/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/ja/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/mai/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/mhr/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/mr/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/nb/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/nl/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/pl/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/pt/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/pt_BR/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/ru/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/sl/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/sv/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/tr/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/uk/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/zh_CN/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/Resources/zh_TW/LC_MESSAGES/pidgin.mo has changed
Binary file Frameworks/libpurple.framework/Versions/2.10.7rc8e809dffa1d/libpurple has changed
--- a/Frameworks/libpurple.framework/Versions/Current Fri Feb 22 01:20:08 2013 +0100
+++ b/Frameworks/libpurple.framework/Versions/Current Fri Feb 22 01:22:17 2013 +0100
@@ -1,1 +1,1 @@
\ No newline at end of file
\ No newline at end of file
--- a/Frameworks/libpurple.framework/libpurple Fri Feb 22 01:20:08 2013 +0100
+++ b/Frameworks/libpurple.framework/libpurple Fri Feb 22 01:22:17 2013 +0100
@@ -1,1 +1,1 @@
-Versions/2.10.7reafc92ac5f87/libpurple
\ No newline at end of file
+Versions/2.10.7rc8e809dffa1d/libpurple \ No newline at end of file