Browse Source

Merge branch '6-bytes-transferred'

Michał Słomkowski 8 years ago
parent
commit
fa3956f081
5 changed files with 20 additions and 9 deletions
  1. 1 1
      include/mumlib.hpp
  2. 1 1
      include/mumlib/Callback.hpp
  3. 2 3
      include/mumlib/Transport.hpp
  4. 13 2
      src/Transport.cpp
  5. 3 2
      src/mumlib.cpp

+ 1 - 1
include/mumlib.hpp

@@ -41,7 +41,7 @@ namespace mumlib {
 
         void sendTextMessage(std::string message);
 
-        void joinChannel(int channel_id);
+        void joinChannel(int channelId);
 
     private:
         _Mumlib_Private *impl;

+ 1 - 1
include/mumlib/Callback.hpp

@@ -179,7 +179,7 @@ namespace mumlib {
                 string welcome_text,
                 int32_t session,
                 int32_t max_bandwidth,
-                int64_t permissions);
+                int64_t permissions) override;
 
         virtual void channelRemove(uint32_t channel_id) override;
 

+ 2 - 3
include/mumlib/Transport.hpp

@@ -18,7 +18,7 @@
 namespace mumlib {
 
     constexpr int MAX_UDP_LENGTH = 1024;
-    constexpr int MAX_TCP_LENGTH = 2048;
+    constexpr int MAX_TCP_LENGTH = 129 * 1024; // 128 kB + some reserve
 
     using namespace std;
     using namespace boost::asio;
@@ -85,8 +85,7 @@ namespace mumlib {
 
         ssl::context sslContext;
         ssl::stream<tcp::socket> sslSocket;
-        uint8_t sslIncomingBuffer[MAX_TCP_LENGTH];
-
+        uint8_t *sslIncomingBuffer;
 
         deadline_timer pingTimer;
         std::chrono::time_point<std::chrono::system_clock> lastReceivedUdpPacketTimestamp;

+ 13 - 2
src/Transport.cpp

@@ -42,11 +42,14 @@ mumlib::Transport::Transport(
         pingTimer(ioService, PING_INTERVAL),
         asyncBufferPool(max(MAX_UDP_LENGTH, MAX_TCP_LENGTH)) {
 
+    sslIncomingBuffer = new uint8_t[MAX_TCP_LENGTH];
+
     pingTimer.async_wait(boost::bind(&Transport::pingTimerTick, this, _1));
 }
 
 mumlib::Transport::~Transport() {
     disconnect();
+    delete[] sslIncomingBuffer;
 }
 
 void mumlib::Transport::connect(
@@ -292,9 +295,16 @@ void mumlib::Transport::doReceiveSsl() {
                 }
 
                 const int payloadSize = ntohl(*reinterpret_cast<uint32_t *>(sslIncomingBuffer + 2));
-                size_t remaining = payloadSize + 6 - bytesTransferred;
+                const int wholeMessageLength = payloadSize + 6;
+                size_t remaining = wholeMessageLength - bytesTransferred;
                 remaining = max(remaining, (size_t) 0);
 
+                if (wholeMessageLength > MAX_TCP_LENGTH) {
+                    throwTransportException(
+                            (boost::format("message bigger (%d B) than max allowed size (%d B)")
+                             % wholeMessageLength % MAX_TCP_LENGTH).str());
+                }
+
                 return remaining;
             },
             [this](const boost::system::error_code &ec, size_t bytesTransferred) {
@@ -314,7 +324,8 @@ void mumlib::Transport::doReceiveSsl() {
                 } else {
                     logger.error("SSL receiver error: %s. Bytes transferred: %d.",
                                  ec.message().c_str(), bytesTransferred);
-                    throwTransportException("receive failed: " + ec.message());
+                    //todo temporarily disable exception throwing until issue #6 is solved
+                    //throwTransportException("receive failed: " + ec.message());
                 }
             });
 }

+ 3 - 2
src/mumlib.cpp

@@ -386,9 +386,10 @@ namespace mumlib {
         impl->transport.sendControlMessage(MessageType::TEXTMESSAGE, textMessage);
     }
 
-    void Mumlib::joinChannel(int channel_id) {
+    void Mumlib::joinChannel(int channelId) {
         MumbleProto::UserState userState;
-        userState.set_channel_id(channel_id);
+        userState.set_channel_id(channelId);
         impl->transport.sendControlMessage(MessageType::USERSTATE, userState);
+        impl->channelId = channelId;
     }
 }