diff options
author | Matthew Kosarek <mattkae@protonmail.com> | 2021-05-16 19:49:37 -0400 |
---|---|---|
committer | Matthew Kosarek <mattkae@protonmail.com> | 2021-05-16 19:49:37 -0400 |
commit | 4941a1874b6ca9d142d94df70b2aec5e0b35b94e (patch) | |
tree | 64e0d585420230213bb9eee57f2be0a3325e766d | |
parent | 61128756e24e88d84bd77cd4993b5f14284791f0 (diff) |
Removed the entirety of the backend
-rw-r--r-- | backend/Server/Server.sln | 31 | ||||
-rw-r--r-- | backend/Server/Server/Server.vcxproj | 150 | ||||
-rw-r--r-- | backend/Server/Server/Server.vcxproj.filters | 27 | ||||
-rw-r--r-- | backend/Server/Server/Server.vcxproj.user | 10 | ||||
-rw-r--r-- | backend/Server/Server/x64/Debug/Server.Build.CppClean.log | 0 | ||||
-rw-r--r-- | backend/server.cpp | 407 | ||||
-rw-r--r-- | backend/server.obj | bin | 2927 -> 0 bytes | |||
-rw-r--r-- | backend/stringmanip.h | 27 |
8 files changed, 0 insertions, 652 deletions
diff --git a/backend/Server/Server.sln b/backend/Server/Server.sln deleted file mode 100644 index f8ce6ca..0000000 --- a/backend/Server/Server.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30717.126 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server", "Server\Server.vcxproj", "{9CF802AF-02FE-48AA-9198-1DC6B51817FF}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Debug|x64.ActiveCfg = Debug|x64 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Debug|x64.Build.0 = Debug|x64 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Debug|x86.ActiveCfg = Debug|Win32 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Debug|x86.Build.0 = Debug|Win32 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Release|x64.ActiveCfg = Release|x64 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Release|x64.Build.0 = Release|x64 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Release|x86.ActiveCfg = Release|Win32 - {9CF802AF-02FE-48AA-9198-1DC6B51817FF}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {AAA96BC8-E6A5-4E6A-8EFA-92ADECB2E8D6} - EndGlobalSection -EndGlobal diff --git a/backend/Server/Server/Server.vcxproj b/backend/Server/Server/Server.vcxproj deleted file mode 100644 index 0e87860..0000000 --- a/backend/Server/Server/Server.vcxproj +++ /dev/null @@ -1,150 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>16.0</VCProjectVersion> - <Keyword>Win32Proj</Keyword> - <ProjectGuid>{9cf802af-02fe-48aa-9198-1dc6b51817ff}</ProjectGuid> - <RootNamespace>Server</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\server.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\stringmanip.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/backend/Server/Server/Server.vcxproj.filters b/backend/Server/Server/Server.vcxproj.filters deleted file mode 100644 index 5026929..0000000 --- a/backend/Server/Server/Server.vcxproj.filters +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\server.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\stringmanip.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/backend/Server/Server/Server.vcxproj.user b/backend/Server/Server/Server.vcxproj.user deleted file mode 100644 index 6813734..0000000 --- a/backend/Server/Server/Server.vcxproj.user +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LocalDebuggerWorkingDirectory>$(SolutionDir)</LocalDebuggerWorkingDirectory> - <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> - </PropertyGroup> - <PropertyGroup> - <ShowAllFiles>true</ShowAllFiles> - </PropertyGroup> -</Project>
\ No newline at end of file diff --git a/backend/Server/Server/x64/Debug/Server.Build.CppClean.log b/backend/Server/Server/x64/Debug/Server.Build.CppClean.log deleted file mode 100644 index e69de29..0000000 --- a/backend/Server/Server/x64/Debug/Server.Build.CppClean.log +++ /dev/null diff --git a/backend/server.cpp b/backend/server.cpp deleted file mode 100644 index b9d6f1c..0000000 --- a/backend/server.cpp +++ /dev/null @@ -1,407 +0,0 @@ -#include <stdio.h> -#include <wS2tcpip.h> -#include <string.h> -#include <assert.h> -#include <time.h> -#include "stringmanip.h" - -#pragma comment (lib, "ws2_32.lib") - -#define WIN32_LEAN_AND_MEAN -#define PORT 80 -#define NUM_CLIENT_THREADS 8 - -void handleClient(SOCKET clientSocket); -DWORD WINAPI runConnection(LPVOID lpParam); - -struct ClientConnection { - bool isActive = false; - SOCKET clientSocket; -}; - -struct ClientConnectionThreadArray { - ClientConnection connectionList[NUM_CLIENT_THREADS]; - DWORD threadIdArray[NUM_CLIENT_THREADS]; - HANDLE threadArray[NUM_CLIENT_THREADS]; - - void start() { - for (int tIdx = 0; tIdx < NUM_CLIENT_THREADS; tIdx++) { - threadArray[tIdx] = CreateThread( - NULL, - 0, - runConnection, - &connectionList[tIdx], - 0, - &threadIdArray[tIdx] - ); - } - } - - void run(SOCKET clientSocket) { - bool found = false; - while (!found) { - for (int connIdx = 0; connIdx < NUM_CLIENT_THREADS; connIdx++) { - if (!connectionList[connIdx].isActive) { - connectionList[connIdx].clientSocket = clientSocket; - connectionList[connIdx].isActive = true; - found = true; - break; - } - } - - if (!found) { - Sleep(50); - } - } - } -}; - -int main() { - // Initializing Winsock - WSADATA wsaData; - WORD version = MAKEWORD(2, 2); - - int wsOK = WSAStartup(version, &wsaData); - if (wsOK != 0) { - printf("Cannot initialize winsock: %d\n", wsOK); - return EXIT_FAILURE; - } - - // Creating a socket - SOCKET listeningSocket = socket(AF_INET, SOCK_STREAM, 0); - if (listeningSocket == INVALID_SOCKET) { - printf("Cannot create socket\n"); - return EXIT_FAILURE; - } - - // Bind an IP address and port to a socket - sockaddr_in hint = { 0 }; - hint.sin_family = AF_INET; - hint.sin_port = htons(PORT); // Networking is big endian, while PCs are little endian - hint.sin_addr.S_un.S_addr = htonl(INADDR_ANY); - - bind(listeningSocket, (sockaddr*)&hint, sizeof(hint)); - - // Tell Winsock the socket is for listening - listen(listeningSocket, SOMAXCONN); - - ClientConnectionThreadArray threadManager; - threadManager.start(); - - while (true) { - - // Wait for a connection - sockaddr_in client; - int clientSize = sizeof(client); - - SOCKET clientSocket = accept(listeningSocket, (sockaddr*)&client, &clientSize); - if (clientSocket == INVALID_SOCKET) { - printf("Cannot create the client socket\n"); - return EXIT_FAILURE; - } - - char host[NI_MAXHOST]; // Client's remote name - char service[NI_MAXSERV]; // Service (i.e. port) the client is connected on - - ZeroMemory(host, NI_MAXHOST); - ZeroMemory(service, NI_MAXSERV); - - if (getnameinfo((sockaddr*)&client, sizeof(client), host, NI_MAXHOST, service, NI_MAXSERV, 0) == 0) { - printf("Host %s connected on port %s\n", host, service); - } else { - inet_ntop(AF_INET, &client.sin_addr, host, NI_MAXHOST); - printf("Host %s connected on port %d\n", host, ntohs(client.sin_port)); - } - - threadManager.run(clientSocket); - } - - // Close listening socket - closesocket(listeningSocket); - - // Cleanup winsock - WSACleanup(); - - return EXIT_SUCCESS; -} - -enum HttpRequestType { - HttpRequestType_None, - HttpRequestType_Get -}; - -enum HttpRequestError { - HttpRequestError_None, - HttpRequestError_UnsupportedRequest, - HttpRequestError_NoBuffer, - HttpRequestError_ClientDisconnect -}; - -struct HeaderParseResult { - HttpRequestType requestType; - char resource[512]; - HttpRequestError error = HttpRequestError_None; -}; - - -struct HeaderParser { - char buffer[4096]; - int bufferPtr = 0; - int bufferSize = 0; - char line[512]; - int lineIndex = 0 ; - - bool tryReadLine() { - int startIndex = bufferPtr; - int endIndex = startIndex; - while (true) { - if (bufferPtr >= bufferSize) { - endIndex = bufferPtr; - break; - } - - if (strncmp(&buffer[bufferPtr], "\r\n", 2) == 0) { - endIndex = bufferPtr; - bufferPtr += 2; // Move past the new line character - break; - } - - bufferPtr++; - } - - int lineLength = endIndex - startIndex; - if (lineLength == 0) { - return false; - } - - assert(lineLength < 512 && lineLength > 0); - strncpy_s(line, &buffer[startIndex], lineLength); - line[lineLength] = '\0'; - return true; - } - - HeaderParseResult readHeader(SOCKET clientSocket) { - HeaderParseResult retval; - ZeroMemory(buffer, 4096); - - // Wait for client to send data - bufferSize = recv(clientSocket, buffer, 4096, 0); - if (bufferSize == SOCKET_ERROR) { - printf("Error in receive. Quitting\n"); - retval.error = HttpRequestError_NoBuffer; - return retval; - } else if (bufferSize == 0) { - printf("Client disconnected\n"); - retval.error = HttpRequestError_ClientDisconnect; - return retval; - } - - printf("Received message (%d bytes): %s", bufferSize, buffer); - - while (tryReadLine()) { - if (lineIndex == 0) { - // Parse request, only supporting GETs for now - int linePtr = 0; - if (strncmp(line, "GET ", 3) == 0) { - retval.requestType = HttpRequestType_Get; - linePtr += 4; // Move past teh get - } else { - retval.error = HttpRequestError_UnsupportedRequest; - return retval; - } - - copyUntilStr(retval.resource, &line[linePtr], " "); - printf("Get request on resource: %s\n", retval.resource); - } - - lineIndex++; - } - - return retval; - } -}; - -enum FileType { - FileType_None, - FileType_HTML, - FileType_CSS, - FileType_JS -}; - -enum HttpStatusCode { - HttpStatusCode_OK = 200, - HttpStatusCode_BADREQUEST = 400, - HttpStatusCode_NOTFOUND = 404 -}; - -void sendErrorMessage(SOCKET socket, HttpStatusCode status, const char* errorHtml) { - char timeStr[100]; - char header[512]; - - ZeroMemory(timeStr, 100); - ZeroMemory(header, 100); - - const char* errorMessage; - switch (status) { - case HttpStatusCode_BADREQUEST: - errorMessage = "Bad Request"; - break; - case HttpStatusCode_NOTFOUND: - errorMessage = "Not found"; - break; - default: - errorMessage = "Unknown"; - break; - } - - getCurrentDateStr(timeStr); - int contentLen = strlen(errorHtml); - sprintf(header, "HTTP/1.1 %d %s\r\nDate: %s\r\nContent-Type: text/html; charset=utf-8\r\nConnection: keep-alive\r\nContent-Length: %d\r\n\r\n", status, errorMessage, timeStr, contentLen); - send(socket, header, strlen(header), 0); - - send(socket, errorHtml, contentLen, 0); -} - -#define MAXBUFLEN 1000000 - -int readFileToMemory(char* filepath, char source[MAXBUFLEN + 1], bool isBinary) { - FILE* file; - fopen_s(&file, filepath, isBinary ? "rb" : "r+"); - - if(file == NULL) { - printf("Failed to read the file\n"); - return -1; - } - - size_t newLen = fread(source, sizeof(char), MAXBUFLEN, file); - if ( ferror( file ) != 0 ) { - fputs("Error reading file", stderr); - return -1; - } - - fclose(file); - return newLen; -} - - -int fixNewLines(char* str, int strSize) { - int removed = 0; - for(int i = 0; i < strSize; i++) { - if(str[i] == '\n') { - str[i] = '\r\n'; - removed++; - } - } - - return removed; -} - - -bool trySendFile(SOCKET clientSocket, char* filename) { - char filePath[128]; - sprintf(filePath, "../../frontend%s", filename); - - bool isBinary = false; - if (endsWith(filename, ".ico") || endsWith(filename, ".wasm")) { - isBinary = true; - } - - char source[MAXBUFLEN + 1]; - int fileSizeBytes = readFileToMemory(filePath, source, isBinary); - - if (fileSizeBytes <= 0) { - return false; - } - - const char* contentType; - if (endsWith(filename, ".html")) { - contentType = "text/html"; - } else if (endsWith(filename, ".js")) { - contentType = "application/javascript"; - } else if (endsWith(filename, ".css")) { - contentType = "text/css"; - } else if (endsWith(filename, ".ico")) { - contentType = "image/x-icon"; - } else if (endsWith(filename, ".wasm")) { - contentType = "application/wasm"; - } else { - contentType = "text/plain"; - } - - char timeStr[100]; - char header[512]; - - ZeroMemory(timeStr, 100); - ZeroMemory(header, 100); - - getCurrentDateStr(timeStr); - sprintf(header, "HTTP/1.1 200 OK\r\nDate: %s\r\nContent-Type: %s; charset=utf-8\r\nConnection: keep-alive\r\nContent-Length: %d\r\n\r\n", timeStr, contentType, fileSizeBytes); - send(clientSocket, header, strlen(header), 0); - - - int bytesSent = 0; - int bytesRemaining = fileSizeBytes; - while (bytesSent < fileSizeBytes) { - int amountToSend = bytesRemaining >= 4096 ? 4096 : bytesRemaining; // Send 4K bytes at a time max - send(clientSocket, &source[bytesSent], amountToSend, 0); - bytesRemaining -= amountToSend; - bytesSent += amountToSend; - } - - return true; -} - -void handleClient(SOCKET clientSocket) { - while (true) { - HeaderParser parser; - HeaderParseResult parseResult = parser.readHeader(clientSocket); - bool shouldBreak = false; - - switch (parseResult.error) { - case HttpRequestError_ClientDisconnect: { - shouldBreak = true; - break; - } - case HttpRequestError_UnsupportedRequest: { - shouldBreak = true; - break; - } - } - - if (shouldBreak) { - break; - } - - switch (parseResult.requestType) { - case HttpRequestType_Get: { - if (strcmp(parseResult.resource, "/") == 0) { - trySendFile(clientSocket, (char*)"/index.html"); - } else { - trySendFile(clientSocket, parseResult.resource); - } - shouldBreak = true; - break; - } - } - - if (shouldBreak) { - break; - } - } - - // Close the socket - closesocket(clientSocket); -} - -DWORD WINAPI runConnection(LPVOID lpParam) { - ClientConnection* connection = (ClientConnection*)lpParam; - - while (true) { - Sleep(100); - - if (connection->isActive) { - handleClient(connection->clientSocket); - connection->isActive = false; - } - } -}
\ No newline at end of file diff --git a/backend/server.obj b/backend/server.obj Binary files differdeleted file mode 100644 index 59b2db2..0000000 --- a/backend/server.obj +++ /dev/null diff --git a/backend/stringmanip.h b/backend/stringmanip.h deleted file mode 100644 index c5a32dc..0000000 --- a/backend/stringmanip.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#include <string.h> - -void copyUntilStr(char* destination, char* source, const char* cmpstr) { - int index = 0; - char* ptr = source; - int cmpStrLen = strlen(cmpstr); - while (strncmp(ptr, cmpstr, cmpStrLen) != 0) { - destination[index++] = *ptr; - ptr++; - } - - destination[index] = '\0'; -} - -int endsWith(const char *str, const char *suffix) { - size_t str_len = strlen(str); - size_t suffix_len = strlen(suffix); - - return (str_len >= suffix_len) && - (!memcmp(str + str_len - suffix_len, suffix, suffix_len)); -} - -void getCurrentDateStr(char* text) { - time_t now = time(NULL); - sprintf(text, "%s GMT", ctime(&now)); -}
\ No newline at end of file |