# HG changeset patch # User Elliott Sales de Andrade # Date 1213940499 0 # Node ID f3922a72eb02100fef98a8fb58dfb9d2e3f0ee7e # Parent fd276936164f68b4587e3b4c02f8c475097215a7# Parent 3f765f7e79d4f6bedf0f8459041cecb861fadf3e propagate from branch 'im.pidgin.pidgin' (head 4037e908f8c3536d50d9439ec2eec0f4d6ee3b60) to branch 'im.pidgin.cpw.qulogic.msn' (head 1b1179b7e283ed88d5df086b802b8d59eb2d65cd) diff -r fd276936164f -r f3922a72eb02 configure.ac --- a/configure.ac Fri Jun 20 05:36:18 2008 +0000 +++ b/configure.ac Fri Jun 20 05:41:39 2008 +0000 @@ -2223,9 +2223,11 @@ AC_CHECK_HEADERS(termios.h) # sys/sysctl.h on OpenBSD 4.2 requires sys/param.h +# sys/sysctl.h on FreeBSD requires sys/types.h AC_CHECK_HEADERS(sys/param.h) AC_CHECK_HEADERS(sys/sysctl.h, [], [], [[ + #include #ifdef HAVE_PARAM_H # include #endif diff -r fd276936164f -r f3922a72eb02 finch/gntconv.c --- a/finch/gntconv.c Fri Jun 20 05:36:18 2008 +0000 +++ b/finch/gntconv.c Fri Jun 20 05:41:39 2008 +0000 @@ -141,7 +141,7 @@ entry_key_pressed(GntWidget *w, FinchConv *ggconv) { const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry)); - if (*text == '/') + if (*text == '/' && *(text + 1) != '/') { PurpleConversation *conv = ggconv->active_conv; PurpleCmdStatus status; @@ -191,7 +191,7 @@ } else { - char *escape = g_markup_escape_text(text, -1); + char *escape = g_markup_escape_text((*text == '/' ? text + 1 : text), -1); char *apos = purple_strreplace(escape, "'", "'"); g_free(escape); escape = apos; diff -r fd276936164f -r f3922a72eb02 libpurple/log.c --- a/libpurple/log.c Fri Jun 20 05:36:18 2008 +0000 +++ b/libpurple/log.c Fri Jun 20 05:41:39 2008 +0000 @@ -1083,7 +1083,7 @@ } /* Determine if this (account, name) combination exists as a buddy. */ - if (account != NULL) + if (account != NULL && name != NULL && *name != '\0') set->buddy = (purple_find_buddy(account, name) != NULL); else set->buddy = FALSE; diff -r fd276936164f -r f3922a72eb02 libpurple/nat-pmp.c --- a/libpurple/nat-pmp.c Fri Jun 20 05:36:18 2008 +0000 +++ b/libpurple/nat-pmp.c Fri Jun 20 05:41:39 2008 +0000 @@ -35,6 +35,10 @@ #include "signals.h" #include "network.h" +#ifdef HAVE_SYS_PARAM_H +#include +#endif + #ifdef HAVE_SYS_SYSCTL_H #include #endif diff -r fd276936164f -r f3922a72eb02 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Fri Jun 20 05:36:18 2008 +0000 +++ b/libpurple/protocols/jabber/jabber.c Fri Jun 20 05:41:39 2008 +0000 @@ -273,70 +273,10 @@ purple_circ_buffer_mark_read(js->write_buffer, ret); } -void jabber_send_raw(JabberStream *js, const char *data, int len) +static gboolean do_jabber_send_raw(JabberStream *js, const char *data, int len) { int ret; - - /* because printing a tab to debug every minute gets old */ - if(strcmp(data, "\t")) - purple_debug(PURPLE_DEBUG_MISC, "jabber", "Sending%s: %s\n", - js->gsc ? " (ssl)" : "", data); - - /* If we've got a security layer, we need to encode the data, - * splitting it on the maximum buffer length negotiated */ - - purple_signal_emit(my_protocol, "jabber-sending-text", js->gc, &data); - if (data == NULL) - return; - -#ifdef HAVE_CYRUS_SASL - if (js->sasl_maxbuf>0) { - int pos; - - if (!js->gsc && js->fd<0) - return; - pos = 0; - if (len == -1) - len = strlen(data); - while (pos < len) { - int towrite; - const char *out; - unsigned olen; - - if ((len - pos) < js->sasl_maxbuf) - towrite = len - pos; - else - towrite = js->sasl_maxbuf; - - sasl_encode(js->sasl, &data[pos], towrite, &out, &olen); - pos += towrite; - - if (js->writeh == 0) - ret = jabber_do_send(js, out, olen); - else { - ret = -1; - errno = EAGAIN; - } - - if (ret < 0 && errno != EAGAIN) - purple_connection_error_reason (js->gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Write error")); - else if (ret < olen) { - if (ret < 0) - ret = 0; - if (js->writeh == 0) - js->writeh = purple_input_add( - js->gsc ? js->gsc->fd : js->fd, - PURPLE_INPUT_WRITE, - jabber_send_cb, js); - purple_circ_buffer_append(js->write_buffer, - out + ret, olen - ret); - } - } - return; - } -#endif + gboolean success = TRUE; if (len == -1) len = strlen(data); @@ -348,11 +288,12 @@ errno = EAGAIN; } - if (ret < 0 && errno != EAGAIN) + if (ret < 0 && errno != EAGAIN) { purple_connection_error_reason (js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Write error")); - else if (ret < len) { + success = FALSE; + } else if (ret < len) { if (ret < 0) ret = 0; if (js->writeh == 0) @@ -362,7 +303,53 @@ purple_circ_buffer_append(js->write_buffer, data + ret, len - ret); } - return; + + return success; +} + +void jabber_send_raw(JabberStream *js, const char *data, int len) +{ + + /* because printing a tab to debug every minute gets old */ + if(strcmp(data, "\t")) + purple_debug(PURPLE_DEBUG_MISC, "jabber", "Sending%s: %s\n", + js->gsc ? " (ssl)" : "", data); + + /* If we've got a security layer, we need to encode the data, + * splitting it on the maximum buffer length negotiated */ + + purple_signal_emit(my_protocol, "jabber-sending-text", js->gc, &data); + if (data == NULL) + return; + +#ifdef HAVE_CYRUS_SASL + if (js->sasl_maxbuf>0) { + int pos = 0; + + if (!js->gsc && js->fd<0) + return; + + if (len == -1) + len = strlen(data); + + while (pos < len) { + int towrite; + const char *out; + unsigned olen; + + towrite = MIN((len - pos), js->sasl_maxbuf); + + sasl_encode(js->sasl, &data[pos], towrite, &out, &olen); + pos += towrite; + + if (!do_jabber_send_raw(js, out, olen)) + break; + } + return; + } +#endif + + do_jabber_send_raw(js, data, len); } int jabber_prpl_send_raw(PurpleConnection *gc, const char *buf, int len) @@ -388,9 +375,9 @@ g_free(txt); } -static void jabber_pong_cb(JabberStream *js, xmlnode *packet, gpointer timeout) +static void jabber_pong_cb(JabberStream *js, xmlnode *packet, gpointer unused) { - purple_timeout_remove(GPOINTER_TO_INT(timeout)); + purple_timeout_remove(js->keepalive_timeout); js->keepalive_timeout = -1; } @@ -414,7 +401,7 @@ xmlnode_set_namespace(ping, "urn:xmpp:ping"); js->keepalive_timeout = purple_timeout_add_seconds(120, (GSourceFunc)(jabber_pong_timeout), gc); - jabber_iq_set_callback(iq, jabber_pong_cb, GINT_TO_POINTER(js->keepalive_timeout)); + jabber_iq_set_callback(iq, jabber_pong_cb, NULL); jabber_iq_send(iq); } }