#include "connection.h" #include #include #include #include #include #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); }