diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 9e03792a9779616c652dd756b252790b8f578c5f..51943171f5ebd0eb3931f864959dab0c38ec5858 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -45,6 +45,7 @@ using namespace log4cxx; static LoggerPtr logger_libpurple = log4cxx::Logger::getLogger("libpurple"); static LoggerPtr logger = log4cxx::Logger::getLogger("backend"); int m_sock; +static int writeInput; using namespace Transport; @@ -61,6 +62,8 @@ template std::string stringOf(T object) { return (os.str()); } +static void transportDataReceived(gpointer data, gint source, PurpleInputCondition cond); + class SpectrumNetworkPlugin; GKeyFile *keyfile; @@ -73,6 +76,13 @@ static std::string KEYFILE_STRING(const std::string &cat, const std::string &key } std::string ret(str); free(str); + + if (ret.find("#") != std::string::npos) { + ret = ret.substr(0, ret.find("#")); + while(*(ret.end() - 1) == ' ') { + ret.erase(ret.end() - 1); + } + } return ret; } @@ -907,6 +917,8 @@ class SpectrumNetworkPlugin : public NetworkPlugin { void sendData(const std::string &string) { write(m_sock, string.c_str(), string.size()); + if (writeInput == 0) + writeInput = purple_input_add(m_sock, PURPLE_INPUT_WRITE, &transportDataReceived, NULL); } void readyForData() { @@ -1750,6 +1762,10 @@ static void transportDataReceived(gpointer data, gint source, PurpleInputConditi np->handleDataRead(d); } else { + if (writeInput != 0) { + purple_input_remove(writeInput); + writeInput = 0; + } np->readyForData(); } } @@ -1852,7 +1868,6 @@ int main(int argc, char **argv) { m_sock = create_socket(host, port); 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";