diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..5ee97e7 --- /dev/null +++ b/.clang-format @@ -0,0 +1,57 @@ +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignArrayOfStructures: Left +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false +AlignConsecutiveAssignments: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: true + PadOperators: true +AlignConsecutiveMacros: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false +AlignOperands: Align +AllowAllParametersOfDeclarationOnNextLine: true +AllowAllArgumentsOnNextLine: false +AllowShortLambdasOnASingleLine: Empty +AllowShortFunctionsOnASingleLine: Empty +AllowShortBlocksOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: AllIfsAndElse +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakTemplateDeclarations: "Yes" +BinPackArguments: false +BinPackParameters: false +BreakBeforeBraces: Custom +BreakBeforeBinaryOperators: NonAssignment +ColumnLimit: 120 +CommentPragmas: "^ IWYU pragma:" +ConstructorInitializerIndentWidth: 4 +IndentWidth: 4 +Language: Cpp +MaxEmptyLinesToKeep: 2 +PointerAlignment: Left +TabWidth: 4 +UseTab: Never +SortIncludes: CaseSensitive +BraceWrapping: + AfterEnum: true + AfterStruct: true + AfterClass: true + AfterUnion: true + AfterExternBlock: true + AfterFunction: true + AfterNamespace: true +IndentRequires: true +FixNamespaceComments: false +NamespaceIndentation: None +BreakBeforeConceptDeclarations: Always +RequiresClausePosition: OwnLine +IndentRequiresClause: true +AllowBreakBeforeNoexceptSpecifier: OnlyWithParen diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39e9a10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.cache/ +.vscode/ +.xmake/ +build/ +compile_commands.json diff --git a/include/kqm/defs.h b/include/kqm/defs.h new file mode 100644 index 0000000..b37f67a --- /dev/null +++ b/include/kqm/defs.h @@ -0,0 +1,8 @@ +#ifndef DEFS_H +#define DEFS_H + +#define CR "\r" +#define LF "\n" +#define CRLF "\r\n" + +#endif // DEFS_H diff --git a/include/kqm/types.h b/include/kqm/types.h new file mode 100644 index 0000000..64232fc --- /dev/null +++ b/include/kqm/types.h @@ -0,0 +1,11 @@ +#ifndef TYPES_H +#define TYPES_H + +#include + +typedef struct mg_callbacks mg_callbacks; +typedef struct mg_context mg_context; +typedef struct mg_connection mg_connection; +typedef struct mg_request_info mg_request_info; + +#endif // TYPES_H diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..471974d --- /dev/null +++ b/src/main.c @@ -0,0 +1,31 @@ +#include + +#include +#include + +#include +#include + +static int request_handler(mg_connection* conn, void* cbdata) +{ + mg_printf(conn, + "HTTP/1.1 200 OK" CRLF "Content-Type: text/plain" CRLF "Connection: close" CRLF CRLF "Hello, World!"); + return 200; +} + +int main(int argc, char** argv) +{ + const char* options[] = {"document_root", ".", "listening_ports", "8080", NULL}; + mg_callbacks callbacks; + mg_context* ctx; + + memset(&callbacks, 0, sizeof(callbacks)); + ctx = mg_start(&callbacks, NULL, options); + + mg_set_request_handler(ctx, "/", request_handler, NULL); + + printf("Server started on port(s) %s\n", mg_get_option(ctx, "listening_ports")); + getchar(); + mg_stop(ctx); + +} diff --git a/xmake.lua b/xmake.lua new file mode 100644 index 0000000..d149017 --- /dev/null +++ b/xmake.lua @@ -0,0 +1,15 @@ +add_rules("mode.debug", "mode.release") +add_rules("plugin.compile_commands.autoupdate") + +set_languages("c23") + +set_warnings("all") +set_warnings("error") + +add_requires("civetweb") + +target("math") + set_kind("binary") + add_packages("civetweb") + add_includedirs("include") + add_files("src/main.c")