libs/nixio: implement getproto(), getprotobyname() and getprotobynumber()

This commit is contained in:
Jo-Philipp Wich 2011-08-12 10:26:33 +00:00
parent 4e78f77d63
commit 2b33717dc4
5 changed files with 91 additions and 11 deletions

View file

@ -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)

View file

@ -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

View file

@ -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) {

View file

@ -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);

View file

@ -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);