libs/nixio: implement getproto(), getprotobyname() and getprotobynumber()
This commit is contained in:
parent
4e78f77d63
commit
2b33717dc4
5 changed files with 91 additions and 11 deletions
|
@ -21,8 +21,8 @@ else
|
|||
endif
|
||||
|
||||
NIXIO_OBJ = src/nixio.o src/socket.o src/sockopt.o src/bind.o src/address.o \
|
||||
src/poll.o src/io.o src/file.o src/splice.o src/process.o src/syslog.o \
|
||||
src/bit.o src/binary.o src/fs.o src/user.o \
|
||||
src/protoent.o src/poll.o src/io.o src/file.o src/splice.o src/process.o \
|
||||
src/syslog.o src/bit.o src/binary.o src/fs.o src/user.o \
|
||||
$(if $(NIXIO_TLS),src/tls-crypto.o src/tls-context.o src/tls-socket.o,)
|
||||
|
||||
ifeq ($(NIXIO_TLS),axtls)
|
||||
|
|
|
@ -37,6 +37,39 @@ module "nixio"
|
|||
-- <li>ifindex = Interface Index (Linux, "packet"-family)</li>
|
||||
-- </ul>
|
||||
|
||||
--- Get protocol entry by name.
|
||||
-- @usage This function returns nil if the given protocol is unknown.
|
||||
-- @class function
|
||||
-- @name nixio.getprotobyname
|
||||
-- @param name protocol name to lookup
|
||||
-- @return Table containing the following fields: <ul>
|
||||
-- <li>name = Protocol Name</li>
|
||||
-- <li>proto = Protocol Number</li>
|
||||
-- <li>aliases = Table of alias names</li>
|
||||
-- </ul>
|
||||
|
||||
--- Get protocol entry by number.
|
||||
-- @usage This function returns nil if the given protocol is unknown.
|
||||
-- @class function
|
||||
-- @name nixio.getprotobynumber
|
||||
-- @param proto protocol number to lookup
|
||||
-- @return Table containing the following fields: <ul>
|
||||
-- <li>name = Protocol Name</li>
|
||||
-- <li>proto = Protocol Number</li>
|
||||
-- <li>aliases = Table of alias names</li>
|
||||
-- </ul>
|
||||
|
||||
--- Get all or a specifc proto entry.
|
||||
-- @class function
|
||||
-- @name nixio.getproto
|
||||
-- @param proto protocol number or name to lookup (optional)
|
||||
-- @return Table (or if no parameter is given, a table of tables)
|
||||
-- containing the following fields: <ul>
|
||||
-- <li>name = Protocol Name</li>
|
||||
-- <li>proto = Protocol Number</li>
|
||||
-- <li>aliases = Table of alias names</li>
|
||||
-- </ul>
|
||||
|
||||
--- Create a new socket and bind it to a network address.
|
||||
-- This function is a shortcut for calling nixio.socket and then bind()
|
||||
-- on the socket object.
|
||||
|
@ -431,4 +464,4 @@ module "nixio"
|
|||
-- @class function
|
||||
-- @name nixio.tls
|
||||
-- @param mode TLS-Mode ["client", "server"]
|
||||
-- @return TLSContext Object
|
||||
-- @return TLSContext Object
|
||||
|
|
|
@ -493,22 +493,67 @@ static int nixio_getifaddrs(lua_State *L) {
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* protoent conversion helper
|
||||
*/
|
||||
static int nixio__pushprotoent(lua_State *L, struct protoent *e) {
|
||||
int i;
|
||||
if (e) {
|
||||
lua_newtable(L);
|
||||
|
||||
lua_pushstring(L, e->p_name);
|
||||
lua_setfield(L, -2, "name");
|
||||
|
||||
lua_pushnumber(L, e->p_proto);
|
||||
lua_setfield(L, -2, "proto");
|
||||
|
||||
lua_newtable(L);
|
||||
for (i = 0; e->p_aliases[i]; i++) {
|
||||
lua_pushstring(L, e->p_aliases[i]);
|
||||
lua_rawseti(L, -2, i+1);
|
||||
}
|
||||
lua_setfield(L, -2, "aliases");
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getprotobyname(name)
|
||||
*/
|
||||
static int nixio_getprotobyname(lua_State *L) {
|
||||
const char *name = luaL_checkstring(L, 1);
|
||||
struct protoent *res = getprotobyname(name);
|
||||
return nixio__pushprotoent(L, res);
|
||||
}
|
||||
|
||||
/**
|
||||
* getprotobynumber(proto)
|
||||
*/
|
||||
static int nixio_getprotobynumber(lua_State *L) {
|
||||
int proto = luaL_checkinteger(L, 1);
|
||||
struct protoent *res = getprotobynumber(proto);
|
||||
return nixio__pushprotoent(L, res);
|
||||
}
|
||||
|
||||
/* module table */
|
||||
static const luaL_reg R[] = {
|
||||
#if defined(__linux__) || defined(BSD)
|
||||
{"getifaddrs", nixio_getifaddrs},
|
||||
{"getifaddrs", nixio_getifaddrs},
|
||||
#endif
|
||||
{"getaddrinfo", nixio_getaddrinfo},
|
||||
{"getnameinfo", nixio_getnameinfo},
|
||||
{NULL, NULL}
|
||||
{"getaddrinfo", nixio_getaddrinfo},
|
||||
{"getnameinfo", nixio_getnameinfo},
|
||||
{"getprotobyname", nixio_getprotobyname},
|
||||
{"getprotobynumber", nixio_getprotobynumber},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* object table */
|
||||
static const luaL_reg M[] = {
|
||||
{"getsockname", nixio_sock_getsockname},
|
||||
{"getpeername", nixio_sock_getpeername},
|
||||
{NULL, NULL}
|
||||
{"getsockname", nixio_sock_getsockname},
|
||||
{"getpeername", nixio_sock_getpeername},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
void nixio_open_address(lua_State *L) {
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
#define VERSION 0.3
|
||||
#define VERSION 0.4
|
||||
|
||||
|
||||
/* pushes nil, error number and errstring on the stack */
|
||||
|
@ -133,6 +133,7 @@ NIXIO_API int luaopen_nixio(lua_State *L) {
|
|||
nixio_open_sockopt(L);
|
||||
nixio_open_bind(L);
|
||||
nixio_open_address(L);
|
||||
nixio_open_protoent(L);
|
||||
nixio_open_poll(L);
|
||||
nixio_open_io(L);
|
||||
nixio_open_splice(L);
|
||||
|
|
|
@ -111,6 +111,7 @@ void nixio_open_socket(lua_State *L);
|
|||
void nixio_open_sockopt(lua_State *L);
|
||||
void nixio_open_bind(lua_State *L);
|
||||
void nixio_open_address(lua_State *L);
|
||||
void nixio_open_protoent(lua_State *L);
|
||||
void nixio_open_poll(lua_State *L);
|
||||
void nixio_open_io(lua_State *L);
|
||||
void nixio_open_splice(lua_State *L);
|
||||
|
|
Loading…
Reference in a new issue