static int ts_lua_server_request_get_uri(lua_State *L) { char uri[TS_LUA_MAX_URL_LENGTH]; const char *path; int path_len; int uri_len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); path = TSUrlPathGet(http_ctx->server_request_bufp, http_ctx->server_request_url, &path_len); uri_len = snprintf(uri, TS_LUA_MAX_URL_LENGTH, "/%.*s", path_len, path); if (uri_len >= TS_LUA_MAX_URL_LENGTH) { lua_pushlstring(L, uri, TS_LUA_MAX_URL_LENGTH - 1); } else { lua_pushlstring(L, uri, uri_len); } return 1; }
static int ts_lua_server_request_set_uri_params(lua_State *L) { const char *param; size_t param_len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); param = luaL_checklstring(L, 1, ¶m_len); TSUrlHttpParamsSet(http_ctx->server_request_bufp, http_ctx->server_request_url, param, param_len); return 0; }
static int ts_lua_server_request_set_url_scheme(lua_State *L) { const char *scheme; size_t len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); scheme = luaL_checklstring(L, 1, &len); TSUrlSchemeSet(http_ctx->server_request_bufp, http_ctx->server_request_url, scheme, len); return 0; }
static int ts_lua_server_request_get_url_scheme(lua_State *L) { const char *scheme; int len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); scheme = TSUrlSchemeGet(http_ctx->server_request_bufp, http_ctx->server_request_url, &len); lua_pushlstring(L, scheme, len); return 1; }
static int ts_lua_server_request_set_uri_args(lua_State *L) { const char *param; size_t param_len; ts_lua_http_ctx *http_ctx; http_ctx = ts_lua_get_http_ctx(L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); param = luaL_checklstring(L, 1, ¶m_len); TSUrlHttpQuerySet(http_ctx->server_request_bufp, http_ctx->server_request_url, param, param_len); return 0; }
static int ts_lua_server_request_get_uri(lua_State *L) { const char *path; int path_len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); path = TSUrlPathGet(http_ctx->server_request_bufp, http_ctx->server_request_url, &path_len); lua_pushlstring(L, "/", 1); lua_pushlstring(L, path, path_len >= TS_LUA_MAX_URL_LENGTH - 1 ? TS_LUA_MAX_URL_LENGTH - 2 : path_len); lua_concat(L, 2); return 1; }
static int ts_lua_server_request_get_url_host(lua_State *L) { const char *host; int len = 0; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); host = TSUrlHostGet(http_ctx->server_request_bufp, http_ctx->server_request_url, &len); if (len == 0) { char *key = "Host"; char *l_key = "host"; int key_len = 4; TSMLoc field_loc; field_loc = TSMimeHdrFieldFind(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, key, key_len); if (field_loc) { host = TSMimeHdrFieldValueStringGet(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, field_loc, -1, &len); TSHandleMLocRelease(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, field_loc); } else { field_loc = TSMimeHdrFieldFind(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, l_key, key_len); if (field_loc) { host = TSMimeHdrFieldValueStringGet(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, field_loc, -1, &len); TSHandleMLocRelease(http_ctx->server_request_bufp, http_ctx->server_request_hdrp, field_loc); } } } lua_pushlstring(L, host, len); return 1; }
static int ts_lua_server_request_get_uri_params(lua_State *L) { const char *param; int param_len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); param = TSUrlHttpParamsGet(http_ctx->server_request_bufp, http_ctx->server_request_url, ¶m_len); if (param && param_len > 0) { lua_pushlstring(L, param, param_len); } else { lua_pushnil(L); } return 1; }
static int ts_lua_server_request_set_uri(lua_State *L) { const char *path; size_t path_len; ts_lua_http_ctx *http_ctx; GET_HTTP_CONTEXT(http_ctx, L); TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); path = luaL_checklstring(L, 1, &path_len); if (*path == '/') { path++; path_len--; } TSUrlPathSet(http_ctx->server_request_bufp, http_ctx->server_request_url, path, path_len); return 0; }