From 1db5be3db8cf558c1e9da26f31848a91a6ee8451 2011-10-17 21:26:13 From: HanzZ Date: 2011-10-17 21:26:13 Subject: [PATCH] Working libpurple FT again --- diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index b5e4d279a5d1ce632c0ff037122acd89622b2a61..c7e3890b0bf7aa9f876c4b58b2a6e0056729ddf9 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";