diff --git a/include/transport/WebSocketClient.h b/include/transport/WebSocketClient.h index bdfa7dbc..9a7869a2 100644 --- a/include/transport/WebSocketClient.h +++ b/include/transport/WebSocketClient.h @@ -50,7 +50,7 @@ class Component; class WebSocketClient { public: - WebSocketClient(Component *component); + WebSocketClient(Component *component, const std::string &user); virtual ~WebSocketClient(); @@ -82,6 +82,7 @@ class WebSocketClient { std::string m_buffer; bool m_upgraded; Swift::Timer::ref m_reconnectTimer; + std::string m_user; }; } diff --git a/libtransport/WebSocketClient.cpp b/libtransport/WebSocketClient.cpp index 36c9335e..60cb8dca 100644 --- a/libtransport/WebSocketClient.cpp +++ b/libtransport/WebSocketClient.cpp @@ -34,9 +34,10 @@ namespace Transport { DEFINE_LOGGER(logger, "WebSocketClient"); -WebSocketClient::WebSocketClient(Component *component) { +WebSocketClient::WebSocketClient(Component *component, const std::string &user) { m_component = component; m_upgraded = false; + m_user = user; #if HAVE_SWIFTEN_3 Swift::TLSOptions o; @@ -63,7 +64,7 @@ WebSocketClient::~WebSocketClient() { } void WebSocketClient::connectServer() { - LOG4CXX_INFO(logger, "Starting DNS query for " << m_host << " " << m_path); + LOG4CXX_INFO(logger, m_user << ": Starting DNS query for " << m_host << " " << m_path); m_upgraded = false; m_buffer.clear(); @@ -88,7 +89,6 @@ void WebSocketClient::write(const std::string &data) { uint8_t opcode = 129; // UTF8 if (data.empty()) { - LOG4CXX_INFO(logger, "pong"); opcode = 138; // PONG } @@ -117,7 +117,7 @@ void WebSocketClient::write(const std::string &data) { + payload)); } - LOG4CXX_INFO(logger, "> " << data); + LOG4CXX_INFO(logger, m_user << ": > " << data); } void WebSocketClient::handleDataRead(boost::shared_ptr data) { @@ -137,16 +137,11 @@ void WebSocketClient::handleDataRead(boost::shared_ptr dat while (m_buffer.size() > 0) { if (m_buffer.size() >= 2) { - LOG4CXX_INFO(logger, "BUFFER: '" << m_buffer << "'"); - LOG4CXX_INFO(logger, "BUFFER: '" << Swift::Hexify::hexify(Swift::createByteArray(m_buffer)) << "'"); uint8_t opcode = *((uint8_t *) &m_buffer[0]) & 0xf; uint8_t size7 = *((uint8_t *) &m_buffer[1]) & 127; bool mask = *((uint8_t *) &m_buffer[1]) & 128; uint16_t size16 = 0; int header_size = 2; - LOG4CXX_INFO(logger, "OPCODE: " << (int) opcode); - LOG4CXX_INFO(logger, "SIZE7: " << (int) size7); - LOG4CXX_INFO(logger, "MASK: " << (int) mask); if (size7 == 126) { if (m_buffer.size() >= 4) { size16 = *((uint16_t *) &m_buffer[2]); @@ -161,19 +156,15 @@ void WebSocketClient::handleDataRead(boost::shared_ptr dat // This seems to be Slack bug... sometimes we receive 0x89 followed by 0x81 // For now, in that case we will just ignore the 0x89 and skip it... if (opcode == 9 && mask && size7 == 1) { - LOG4CXX_WARN(logger, "Applying Slack workaround because of partial data received from server"); + LOG4CXX_WARN(logger, m_user << ": Applying Slack workaround because of partial data received from server"); m_buffer.erase(0, 1); continue; } -// if (opcode == 9) { -// write(""); -// } - unsigned int size = (size16 == 0 ? size7 : size16); if (m_buffer.size() >= size + header_size) { std::string payload = m_buffer.substr(header_size, size); - LOG4CXX_INFO(logger, "< " << payload); + LOG4CXX_INFO(logger, m_user << ": < " << payload); onPayloadReceived(payload); m_buffer.erase(0, size + header_size); @@ -198,7 +189,7 @@ void WebSocketClient::handleConnected(bool error) { return; } - LOG4CXX_INFO(logger, "Connected to " << m_host); + LOG4CXX_INFO(logger, m_user << ": Connected to " << m_host); std::string req = ""; req += "GET " + m_path + " HTTP/1.1\r\n"; @@ -217,20 +208,20 @@ void WebSocketClient::handleDisconnected(const boost::optionalstart(); } void WebSocketClient::handleDNSResult(const std::vector &addrs, boost::optional error) { if (error) { - LOG4CXX_ERROR(logger, "DNS resolving error. Will try again in 1 second."); + LOG4CXX_ERROR(logger, m_user << ": DNS resolving error. Will try again in 1 second."); m_reconnectTimer->start(); return; } if (addrs.empty()) { - LOG4CXX_ERROR(logger, "DNS name cannot be resolved. Will try again in 1 second."); + LOG4CXX_ERROR(logger, m_user << ": DNS name cannot be resolved. Will try again in 1 second."); m_reconnectTimer->start(); return; } diff --git a/spectrum/src/frontends/slack/SlackRTM.cpp b/spectrum/src/frontends/slack/SlackRTM.cpp index 2a27070e..dcd02e0b 100644 --- a/spectrum/src/frontends/slack/SlackRTM.cpp +++ b/spectrum/src/frontends/slack/SlackRTM.cpp @@ -45,7 +45,7 @@ SlackRTM::SlackRTM(Component *component, StorageBackend *storageBackend, SlackId m_counter = 0; m_started = false; m_idManager = idManager; - m_client = new WebSocketClient(component); + m_client = new WebSocketClient(component, m_uinfo.jid); m_client->onPayloadReceived.connect(boost::bind(&SlackRTM::handlePayloadReceived, this, _1)); m_client->onWebSocketConnected.connect(boost::bind(&SlackRTM::handleWebSocketConnected, this));