Browse Source

Add missing url fields.

tags/1.0.0
Vsevolod Stakhov 9 years ago
parent
commit
66f1f01a9b
1 changed files with 84 additions and 0 deletions
  1. 84
    0
      src/lua/lua_url.c

+ 84
- 0
src/lua/lua_url.c View File

@@ -48,8 +48,11 @@ local mistake = res:to_table() -- INVALID! as pool is destroyed
/* URL methods */
LUA_FUNCTION_DEF (url, get_length);
LUA_FUNCTION_DEF (url, get_host);
LUA_FUNCTION_DEF (url, get_port);
LUA_FUNCTION_DEF (url, get_user);
LUA_FUNCTION_DEF (url, get_path);
LUA_FUNCTION_DEF (url, get_query);
LUA_FUNCTION_DEF (url, get_fragment);
LUA_FUNCTION_DEF (url, get_text);
LUA_FUNCTION_DEF (url, get_tld);
LUA_FUNCTION_DEF (url, to_table);
@@ -61,8 +64,11 @@ LUA_FUNCTION_DEF (url, all);
static const struct luaL_reg urllib_m[] = {
LUA_INTERFACE_DEF (url, get_length),
LUA_INTERFACE_DEF (url, get_host),
LUA_INTERFACE_DEF (url, get_port),
LUA_INTERFACE_DEF (url, get_user),
LUA_INTERFACE_DEF (url, get_path),
LUA_INTERFACE_DEF (url, get_query),
LUA_INTERFACE_DEF (url, get_fragment),
LUA_INTERFACE_DEF (url, get_text),
LUA_INTERFACE_DEF (url, get_tld),
LUA_INTERFACE_DEF (url, to_table),
@@ -125,6 +131,25 @@ lua_url_get_host (lua_State *L)
return 1;
}

/***
* @method url:get_port()
* Get port of the url
* @return {number} url port
*/
static gint
lua_url_get_port (lua_State *L)
{
struct rspamd_lua_url *url = lua_check_url (L, 1);

if (url != NULL) {
lua_pushnumber (L, url->url->port);
}
else {
lua_pushnil (L);
}
return 1;
}

/***
* @method url:get_user()
* Get user part of the url (e.g. username in email)
@@ -165,6 +190,46 @@ lua_url_get_path (lua_State *L)
return 1;
}

/***
* @method url:get_query()
* Get query of the url
* @return {string} query part of URL
*/
static gint
lua_url_get_query (lua_State *L)
{
struct rspamd_lua_url *url = lua_check_url (L, 1);

if (url != NULL && url->url->querylen > 0) {
lua_pushlstring (L, url->url->query, url->url->querylen);
}
else {
lua_pushnil (L);
}

return 1;
}

/***
* @method url:get_fragment()
* Get fragment of the url
* @return {string} fragment part of URL
*/
static gint
lua_url_get_fragment (lua_State *L)
{
struct rspamd_lua_url *url = lua_check_url (L, 1);

if (url != NULL && url->url->fragmentlen > 0) {
lua_pushlstring (L, url->url->fragment, url->url->fragmentlen);
}
else {
lua_pushnil (L);
}

return 1;
}

/***
* @method url:get_text()
* Get full content of the url
@@ -280,6 +345,12 @@ lua_url_to_table (lua_State *L)
lua_settable (L, -3);
}

if (u->port != 0) {
lua_pushstring (L, "port");
lua_pushnumber (L, u->port);
lua_settable (L, -3);
}

if (u->tldlen > 0) {
lua_pushstring (L, "tld");
lua_pushlstring (L, u->tld, u->tldlen);
@@ -298,6 +369,19 @@ lua_url_to_table (lua_State *L)
lua_settable (L, -3);
}

if (u->querylen > 0) {
lua_pushstring (L, "query");
lua_pushlstring (L, u->query, u->querylen);
lua_settable (L, -3);
}

if (u->fragmentlen > 0) {
lua_pushstring (L, "fragment");
lua_pushlstring (L, u->fragment, u->fragmentlen);
lua_settable (L, -3);
}


lua_pushstring (L, "protocol");

switch (u->protocol) {

Loading…
Cancel
Save