From 1db5be3db8cf558c1e9da26f31848a91a6ee8451 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 17 Oct 2011 21:26:13 +0200 Subject: [PATCH] Working libpurple FT again --- backends/libpurple/main.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index b5e4d279..c7e3890b 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -1700,15 +1700,20 @@ static void spectrum_sigchld_handler(int sig) } static void transportDataReceived(gpointer data, gint source, PurpleInputCondition cond) { - char buffer[65535]; - char *ptr = buffer; - ssize_t n = read(source, ptr, sizeof(buffer)); - if (n <= 0) { - LOG4CXX_INFO(logger, "Diconnecting from spectrum2 server"); - exit(errno); + if (cond & PURPLE_INPUT_READ) { + char buffer[65535]; + char *ptr = buffer; + ssize_t n = read(source, ptr, sizeof(buffer)); + if (n <= 0) { + LOG4CXX_INFO(logger, "Diconnecting from spectrum2 server"); + exit(errno); + } + std::string d = std::string(buffer, n); + np->handleDataRead(d); + } + else { + np->readyForData(); } - std::string d = std::string(buffer, n); - np->handleDataRead(d); } int main(int argc, char **argv) { @@ -1821,6 +1826,7 @@ int main(int argc, char **argv) { fcntl(m_sock, F_SETFL, flags); purple_input_add(m_sock, PURPLE_INPUT_READ, &transportDataReceived, NULL); + purple_input_add(m_sock, PURPLE_INPUT_WRITE, &transportDataReceived, NULL); np = new SpectrumNetworkPlugin(host, port); bool libev = KEYFILE_STRING("service", "eventloop") == "libev";