From f2381529701cdcbfb5df211d60f369585556cfde Mon Sep 17 00:00:00 2001 From: malloc Date: Mon, 2 Apr 2018 17:04:21 -0500 Subject: [PATCH] if you look at this your mother will die in her sleep --- server/src/sock/scapesock.cpp | 29 ++++++++++++++++++++++++++--- server/src/utils/string.cpp | 10 ++++++++++ server/src/utils/string.hpp | 3 +++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/server/src/sock/scapesock.cpp b/server/src/sock/scapesock.cpp index 5e7afaf..dab30f0 100644 --- a/server/src/sock/scapesock.cpp +++ b/server/src/sock/scapesock.cpp @@ -30,12 +30,35 @@ int sosc::ScapeConnection::Handshake() { return SOSC_SHAKE_ERR; } - auto lines = str::split(this->buffer, "\r\n"); - - if(!str::contains(this->buffer, "\r\n\r\n")) return SOSC_SHAKE_CONT; + std::string websocket_key = ""; + auto lines = str::split(this->buffer, "\r\n"); + for(auto line_r = lines.begin() + 1; line_r != lines.end(); ++line_r) { + std::string line = str::trim(*line_r); + + if(str::starts(line, "Sec-WebSocket-Key")) { + auto parts = str::split(line, ':'); + if(parts.size() < 2) + break; + + websocket_key = str::trim(parts[1]); + break; + } + } + + if(websocket_key == "") { + this->Close(); + return SOSC_SHAKE_ERR; + } + + std::stringstream stream; + stream << "HTTP/1.1 101 Switching Protocols\r\n" + << "Upgrade: websocket\r\n" + << "Connection: Upgrade\r\n" + << "Sec-WebSock"; + this->handshaked = true; return SOSC_SHAKE_DONE; } diff --git a/server/src/utils/string.cpp b/server/src/utils/string.cpp index 3af624a..20eeff0 100644 --- a/server/src/utils/string.cpp +++ b/server/src/utils/string.cpp @@ -120,3 +120,13 @@ bool sosc::str::contains { return haystack.find(needle) != std::string::npos; } + +std::string sosc::str::tolower(std::string str) { + std::transform(str.begin(), str.end(), str.begin(), ::tolower); + return str; +} + +std::string* sosc::str::tolower(std::string* str) { + std::transform(str->begin(), str->end(), str->begin(), ::tolower); + return str; +} diff --git a/server/src/utils/string.hpp b/server/src/utils/string.hpp index 266fd0c..86f6528 100644 --- a/server/src/utils/string.hpp +++ b/server/src/utils/string.hpp @@ -35,6 +35,9 @@ bool starts(const std::string& str, const std::string& start); bool ends(const std::string& str, const std::string& end); bool contains(const std::string& haystack, const std::string& needle); + +std::string tolower(std::string str); +std::string* tolower(std::string* str); }} #endif