diff options
author | Aki <please@ignore.pl> | 2020-08-24 19:42:00 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2020-08-24 19:42:00 +0200 |
commit | c47d4b2314b06f28cae47d4dd14ef4c9c5c1af60 (patch) | |
tree | ea5ede20a2674d865b28bbf5f121bd2da9779003 | |
parent | beab4f743429525add08cd22341470c972cb01be (diff) | |
download | plop-c47d4b2314b06f28cae47d4dd14ef4c9c5c1af60.zip plop-c47d4b2314b06f28cae47d4dd14ef4c9c5c1af60.tar.gz plop-c47d4b2314b06f28cae47d4dd14ef4c9c5c1af60.tar.bz2 |
Added connection stub
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | connection.c | 52 | ||||
-rw-r--r-- | connection.h | 17 |
3 files changed, 70 insertions, 0 deletions
@@ -9,6 +9,7 @@ main.o: plop.h request.h plop.o: plop.h request.h response.h request.o: request.h response.o: response.h +connection.o: connection.h request.h clean: rm -f plop *.o diff --git a/connection.c b/connection.c new file mode 100644 index 0000000..c7dd151 --- /dev/null +++ b/connection.c @@ -0,0 +1,52 @@ +#include "connection.h" + +#include <stdlib.h> +#include <string.h> + +#include <lauxlib.h> +#include <lua.h> + +#include "request.h" + +/// Creates new connection. +/// \param L Server's Lua state +/// \param client File descriptor of client's socket +/// \return Pointer to connection or NULL if an error occured +struct connection * connection_new(lua_State * L, const int client) +{ + struct connection * c = malloc(sizeof(struct connection)); + + if (NULL == c) + { + return NULL; + } + + memset(c, 0, sizeof(struct connection)); + + c->fd = client; + c->L = lua_newthread(L); + c->lua_ref = luaL_ref(L, LUA_REGISTRYINDEX); + + return c; +} + +/// Clears the state of connection readying it for new request. +/// \param c Connection to clear +void connection_clear(struct connection * c) +{ + if (NULL != c->request) + { + free_request(c->request); + } +} + +/// Frees all resources associated with the connection. +/// \param L Server's Lua state +/// \param c Connection to free +void connection_free(lua_State * L, struct connection * c) +{ + connection_clear(c); + luaL_unref(L, LUA_REGISTRYINDEX, c->lua_ref); + close(c->fd); // TODO: Check for errors in close()? + free(c); +} diff --git a/connection.h b/connection.h new file mode 100644 index 0000000..3a7b32a --- /dev/null +++ b/connection.h @@ -0,0 +1,17 @@ +#pragma once + +#include <lua.h> + +#include "request.h" + +struct connection +{ + int fd; + int lua_ref; + lua_State * L; + struct request * request; +}; + +struct connection * connection_new(lua_State *, const int); +void connection_clear(struct connection *); +void connection_free(lua_State *, struct connection *); |