summaryrefslogtreecommitdiffstats
path: root/src/Net/Connection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/Connection.cpp')
-rw-r--r--src/Net/Connection.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/Net/Connection.cpp b/src/Net/Connection.cpp
index f1beb35..256bbfe 100644
--- a/src/Net/Connection.cpp
+++ b/src/Net/Connection.cpp
@@ -35,7 +35,7 @@ Connection::~Connection() {
void Connection::handleHandshake(const boost::system::error_code& error) {
if(error) {
- application->logf("Error: %s", error.message().c_str());
+ application->logf(Core::Logger::LOG_NETWORK, "Error: %s", error.message().c_str());
// TODO Error handling
doDisconnect();
@@ -64,7 +64,7 @@ void Connection::handleShutdown(const boost::system::error_code& error) {
boost::lock_guard<boost::shared_mutex> lock(connectionLock);
if(error) {
- application->logf(Core::Logger::LOG_VERBOSE, "Shutdown error: %s", error.message().c_str());
+ application->logf(Core::Logger::LOG_NETWORK, Core::Logger::LOG_VERBOSE, "Shutdown error: %s", error.message().c_str());
}
_setState(DISCONNECTED);
@@ -90,11 +90,17 @@ void Connection::handleHeaderReceive(const boost::shared_array<boost::uint8_t> &
header = *reinterpret_cast<const Packet::Header*>(data.get());
}
- if(header.length == 0) {
+ boost::uint32_t length = ntohl(header.length);
+
+ if(length == 0) {
receiveSignal.emit(boost::shared_ptr<Packet>(new Packet(ntohs(header.requestId))));
enterReceiveLoop();
}
+ else if(length > receiveLimit) {
+ application->log(Core::Logger::LOG_NETWORK, Core::Logger::LOG_WARNING, "Packet size limit exceeded. Disconnecting.");
+ doDisconnect();
+ }
else {
rawReceive(ntohl(header.length), boost::bind(&Connection::handleDataReceive, thisPtr.lock(), _1));
}
@@ -115,7 +121,7 @@ void Connection::handleRead(const boost::system::error_code& error, std::size_t
if(error == boost::system::errc::operation_canceled)
return;
- application->logf(Core::Logger::LOG_DEFAULT, "Read error: %s", error.message().c_str());
+ application->logf(Core::Logger::LOG_NETWORK, "Read error: %s", error.message().c_str());
// TODO Error
doDisconnect();
@@ -176,7 +182,7 @@ void Connection::rawReceive(std::size_t length, const boost::function1<void, con
void Connection::handleWrite(const boost::system::error_code& error, std::size_t) {
if(error)
- application->logf(Core::Logger::LOG_VERBOSE, "Write error: %s", error.message().c_str());
+ application->logf(Core::Logger::LOG_NETWORK, Core::Logger::LOG_VERBOSE, "Write error: %s", error.message().c_str());
{
boost::unique_lock<boost::shared_mutex> lock(connectionLock);