Fri, 30 Aug 2013 14:29:45 +0200
Reconsidered characters count callback for prpl API: make it per-conversation and distinguish infinite from undefined
--- a/libpurple/connection.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/connection.c Fri Aug 30 14:29:45 2013 +0200 @@ -631,26 +631,6 @@ gc->last_received = time(NULL); } -gsize -purple_connection_get_max_message_size(PurpleConnection *gc) -{ - PurplePlugin *prpl; - PurplePluginProtocolInfo *prpl_info; - - g_return_val_if_fail(gc != NULL, 0); - - prpl = purple_connection_get_prpl(gc); - g_return_val_if_fail(prpl != NULL, 0); - - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); - g_return_val_if_fail(prpl_info != NULL, 0); - - if (!PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_max_message_size)) - return 0; - - return prpl_info->get_max_message_size(gc); -} - void purple_connections_disconnect_all(void) {
--- a/libpurple/connection.h Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/connection.h Fri Aug 30 14:29:45 2013 +0200 @@ -452,18 +452,6 @@ */ void purple_connection_update_last_received(PurpleConnection *gc); -/** - * Gets the maximum message size in bytes for the protocol. It may depend on - * connection-specific variables (like protocol version). - * - * @see PurplePluginProtocolInfo#get_max_message_size - * - * @param gc The connection to query. - * @return Maximum message size, or 0 if unspecified or infinite. - */ -gsize -purple_connection_get_max_message_size(PurpleConnection *gc); - /*@}*/ /**************************************************************************/
--- a/libpurple/conversation.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/conversation.c Fri Aug 30 14:29:45 2013 +0200 @@ -2513,6 +2513,27 @@ return (status == PURPLE_CMD_STATUS_OK); } +gssize +purple_conversation_get_max_message_size(PurpleConversation *conv) +{ + PurplePlugin *prpl; + PurplePluginProtocolInfo *prpl_info; + + g_return_val_if_fail(conv != NULL, 0); + + prpl = purple_conversation_get_connection( + purple_connection_get_prpl(gc)); + g_return_val_if_fail(prpl != NULL, 0); + + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + g_return_val_if_fail(prpl_info != NULL, 0); + + if (!PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_max_message_size)) + return 0; + + return prpl_info->get_max_message_size(conv); +} + void * purple_conversations_get_handle(void) {
--- a/libpurple/conversation.h Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/conversation.h Fri Aug 30 14:29:45 2013 +0200 @@ -1374,6 +1374,18 @@ */ gboolean purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **error); +/** + * Gets the maximum message size in bytes for the conversation. + * + * @see PurplePluginProtocolInfo#get_max_message_size + * + * @param conv The conversation to query. + * + * @return Maximum message size, 0 if unspecified, -1 for infinite. + */ +gssize +purple_conversation_get_max_message_size(PurpleConversation *conv); + /*@}*/ /**************************************************************************/
--- a/libpurple/protocols/bonjour/bonjour.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/bonjour/bonjour.c Fri Aug 30 14:29:45 2013 +0200 @@ -470,12 +470,10 @@ return (buddy != NULL && purple_buddy_get_protocol_data(buddy) != NULL); } -static gsize -bonjour_get_max_message_size(PurpleConnection *gc) +static gssize +bonjour_get_max_message_size(PurpleConversation *conv) { - /* It looks, like the message length is practically unlimited (I've - * tried 5MB). */ - return 0; + return -1; /* 5MB successfully tested. */ } static gboolean
--- a/libpurple/protocols/gg/gg.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/gg/gg.c Fri Aug 30 14:29:45 2013 +0200 @@ -1369,10 +1369,10 @@ return table; } -static gsize -ggp_get_max_message_size(PurpleConnection *gc) +static gssize +ggp_get_max_message_size(PurpleConversation *conv) { - /* it may depend on protocol version or other factors - check it */ + /* TODO: it may depend on protocol version or other factors */ return 1232; }
--- a/libpurple/protocols/irc/irc.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/irc/irc.c Fri Aug 30 14:29:45 2013 +0200 @@ -911,10 +911,11 @@ irc_cmd_ping(irc, NULL, NULL, NULL); } -static gsize -irc_get_max_message_size(PurpleConnection *gc) +static gssize +irc_get_max_message_size(PurpleConversation *conv) { - /* got from pidgin-otr */ + /* TODO: this static value is got from pidgin-otr, but it depends on + * some factors, for example IRC channel name. */ return 417; }
--- a/libpurple/protocols/msn/msn.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/msn/msn.c Fri Aug 30 14:29:45 2013 +0200 @@ -2882,10 +2882,10 @@ return FALSE; } -static gsize -msn_get_max_message_size(PurpleConnection *gc) +static gssize +msn_get_max_message_size(PurpleConversation *conv) { - /* pidgin-otr says: 1409 */ + /* XXX: pidgin-otr says 1409. Verify and document it. */ return 1525 - strlen(VERSION); }
--- a/libpurple/protocols/novell/novell.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/novell/novell.c Fri Aug 30 14:29:45 2013 +0200 @@ -3465,10 +3465,10 @@ _check_for_disconnect(user, rc); } -static gsize -novell_get_max_message_size(PurpleConnection *gc) +static gssize +novell_get_max_message_size(PurpleConversation *conv) { - /* got from pidgin-otr */ + /* XXX: got from pidgin-otr - verify and document it */ return 1792; }
--- a/libpurple/protocols/oscar/libicq.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/oscar/libicq.c Fri Aug 30 14:29:45 2013 +0200 @@ -36,10 +36,10 @@ return table; } -static gsize -icq_get_max_message_size(PurpleConnection *gc) +static gssize +icq_get_max_message_size(PurpleConversation *conv) { - /* got from pidgin-otr */ + /* XXX: got from pidgin-otr - verify and document it */ return 2346; }
--- a/libpurple/protocols/oscar/oscar.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/oscar/oscar.c Fri Aug 30 14:29:45 2013 +0200 @@ -5433,10 +5433,10 @@ return TRUE; } -gsize -oscar_get_max_message_size(PurpleConnection *gc) +gssize +oscar_get_max_message_size(PurpleConversation *conv) { - /* got from pidgin-otr */ + /* XXX: got from pidgin-otr - verify and document it */ return 2343; }
--- a/libpurple/protocols/oscar/oscarcommon.h Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/oscar/oscarcommon.h Fri Aug 30 14:29:45 2013 +0200 @@ -102,6 +102,6 @@ void oscar_send_file(PurpleConnection *gc, const char *who, const char *file); PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who); gboolean oscar_offline_message(const PurpleBuddy *buddy); -gsize oscar_get_max_message_size(PurpleConnection *gc); +gssize oscar_get_max_message_size(PurpleConversation *conv); GList *oscar_actions(PurplePlugin *plugin, gpointer context); void oscar_init(PurplePlugin *plugin, gboolean is_icq);
--- a/libpurple/protocols/yahoo/libymsg.c Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/yahoo/libymsg.c Fri Aug 30 14:29:45 2013 +0200 @@ -5134,9 +5134,8 @@ return list; } -gsize -yahoo_get_max_message_size(PurpleConnection *gc) +gssize +yahoo_get_max_message_size(PurpleConversation *conv) { - /* got from pidgin-otr */ - return 799; + return YAHOO_MAX_MESSAGE_LENGTH_CHARS; }
--- a/libpurple/protocols/yahoo/libymsg.h Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/protocols/yahoo/libymsg.h Fri Aug 30 14:29:45 2013 +0200 @@ -384,7 +384,7 @@ GList *yahoo_actions(PurplePlugin *plugin, gpointer context); void yahoopurple_register_commands(void); -gsize yahoo_get_max_message_size(PurpleConnection *gc); +gssize yahoo_get_max_message_size(PurpleConversation *conv); 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);
--- a/libpurple/prpl.h Thu Aug 29 23:01:58 2013 -0700 +++ b/libpurple/prpl.h Fri Aug 30 14:29:45 2013 +0200 @@ -630,8 +630,10 @@ PurpleGetPublicAliasFailureCallback failure_cb); /** - * Gets the maximum message size in bytes for the protocol. It may - * depend on connection-specific variables (like protocol version). + * Gets the maximum message size in bytes for the conversation. + * + * It may depend on connection-specific or conversation-specific + * variables, like channel or buddy's name length. * * This value is intended for plaintext message, the exact value may be * lower because of: @@ -639,10 +641,12 @@ * - formatting, * - used special characters. * - * @param gc The connection to query, or NULL to get safe minimum. - * @return Maximum message size, or 0 if unspecified or infinite. + * @param conv The conversation to query, or NULL to get safe minimum + * for the protocol. + * + * @return Maximum message size, 0 if unspecified, -1 for infinite. */ - gsize (*get_max_message_size)(PurpleConnection *gc); + gssize (*get_max_message_size)(PurpleConversation *conv); }; #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \