char *VERSION = "lua-rns 0.1";
-
void
usage(FILE *f, char *progname)
{
=====================================================
*/
+
+/*
+==========
+ RDF
+==========
+ */
+l_rdf_new_frm_str(lua_State *L)
+{
+ uint16_t t = lua_tonumber(L, 1);
+ char *str = strdup((char*)luaL_checkstring(L, 2));
+
+ ldns_rdf *new_rdf = ldns_rdf_new_frm_str((ldns_rdf_type)t, str);
+
+ if (new_rdf) {
+ lua_pushlightuserdata(L, new_rdf);
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static int
+l_rdf_print(lua_State *L)
+{
+ /* we always print to stdout */
+ ldns_rdf *toprint = (ldns_rdf*)lua_touserdata(L, 1); /* pop from the stack */
+ ldns_rdf_print(stdout, toprint);
+ return 0;
+}
+
+static int
+l_rdf_free(lua_State *L)
+{
+ ldns_rdf *tofree = (ldns_rdf*)lua_touserdata(L, 1); /* pop from the stack */
+ ldns_rdf_free(tofree);
+ return 0;
+}
+
+
/*
==========
RR
char *str = strdup((char*)luaL_checkstring(L, 1));
ldns_rr *new_rr = ldns_rr_new_frm_str(str);
- lua_pushlightuserdata(L, new_rr);
- return 1;
+ if (new_rr) {
+ lua_pushlightuserdata(L, new_rr);
+ return 1;
+ } else {
+ return 0;
+ }
}
static int
return 0;
}
+static int
+l_rr_free(lua_State *L)
+{
+ ldns_rr *tofree = (ldns_rr*)lua_touserdata(L, 1); /* pop from the stack */
+ ldns_rr_free(tofree);
+ return 0;
+}
+
/*
=========
PACKETS
l_pkt_new(lua_State *L)
{
ldns_pkt *new_pkt = ldns_pkt_new();
- lua_pushlightuserdata(L, new_pkt);
- return 1;
+ if (new_pkt) {
+ lua_pushlightuserdata(L, new_pkt);
+ return 1;
+ } else {
+ return 0;
+ }
}
ldns_pkt_section s = lua_tonumber(L, 2); /* the section where to put it */
ldns_rr *rr = (ldns_rr*)lua_touserdata(L, 3); /* the rr to put */
- /* this function return bool, what to do with it??? */
- ldns_pkt_push_rr(pkt, s, rr);
-
- lua_pushlightuserdata(L, pkt);
- return 1;
+ if (ldns_pkt_push_rr(pkt, s, rr)) {
+ lua_pushlightuserdata(L, pkt);
+ return 1;
+ } else {
+ return 0;
+ }
}
static int
l_pkt_get_rr(lua_State *L)
{
ldns_pkt *p = (ldns_pkt*)lua_touserdata(L, 1); /* pop from the stack */
- unsigned int n = lua_tonumber(L, 2);
+ uint16_t n = lua_tonumber(L, 2);
ldns_rr *r;
- r = ldns_pkt_get_rr(p, (uint16_t) n);
+ r = ldns_pkt_get_rr(p, n);
if (r) {
lua_pushlightuserdata(L, r);
return 1;
{
ldns_pkt *p = (ldns_pkt*)lua_touserdata(L, 1);
ldns_rr *rr = (ldns_rr*)lua_touserdata(L, 2);
- unsigned int n = lua_tonumber(L, 3);
+ uint16_t n = lua_tonumber(L, 3);
ldns_rr *r;
- r = ldns_pkt_set_rr(p, rr, (uint16_t) n);
+ r = ldns_pkt_set_rr(p, rr, n);
if (r) {
lua_pushlightuserdata(L, r);
return 1;
l_pkt_rr_count(lua_State *L)
{
ldns_pkt *p = (ldns_pkt*)lua_touserdata(L, 1);
-
lua_pushnumber(L, ldns_pkt_section_count(p, LDNS_SECTION_ANY));
return 1;
}
return 1;
}
+static int
+l_rdf2sockaddr_storage(lua_State *L)
+{
+ ldns_rdf *rd = (ldns_rdf*)lua_touserdata(L, 1);
+ struct sockaddr_storage *s;
+
+ s = ldns_rdf2native_sockaddr_storage(rd);
+
+ if (s) {
+ lua_pushlightuserdata(L, s);
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
/*
============
EXAMPLES
{
/* register our functions */
lua_register(L, "l_average", l_average);
+ /* RDFs */
+ lua_register(L, "l_rdf_new_frm_str", l_rdf_new_frm_str);
+ lua_register(L, "l_rdf_print", l_rdf_print);
+ lua_register(L, "l_rdf_free", l_rdf_free);
/* RRs */
lua_register(L, "l_rr_new_frm_str", l_rr_new_frm_str);
lua_register(L, "l_rr_print", l_rr_print);
+ lua_register(L, "l_rr_free", l_rr_free);
/* PKTs */
lua_register(L, "l_pkt_new", l_pkt_new);
lua_register(L, "l_pkt_push_rr", l_pkt_push_rr);
/* CONVERSIONs */
lua_register(L, "l_pkt2string", l_pkt2string);
+ lua_register(L, "l_rdf2sockaddr_storage", l_rdf2sockaddr_storage);
}
int
--- ldns defines
+-- ldns defines - need a better way to keep these current
LDNS_SECTION_QUESTION = 0
LDNS_SECTION_ANSWER = 1
LDNS_SECTION_AUTHORITY = 2
LDNS_SECTION_ANY = 4
LDNS_SECTION_ANY_NOQUESTION = 5
+-- rdf types
+LDNS_RDF_TYPE_NONE = 0
+LDNS_RDF_TYPE_DNAME = 1
+LDNS_RDF_TYPE_INT8 = 1
+LDNS_RDF_TYPE_INT16 = 3
+LDNS_RDF_TYPE_INT32 = 4
+LDNS_RDF_TYPE_A = 5
+LDNS_RDF_TYPE_AAAA = 6
+LDNS_RDF_TYPE_STR = 7
+LDNS_RDF_TYPE_APL = 8
+LDNS_RDF_TYPE_B64 = 9
+LDNS_RDF_TYPE_HEX = 10
+LDNS_RDF_TYPE_NSEC = 11
+LDNS_RDF_TYPE_TYPE = 12
+LDNS_RDF_TYPE_CLASS = 13
+LDNS_RDF_TYPE_CERT = 14
+LDNS_RDF_TYPE_ALG = 15
+LDNS_RDF_TYPE_UNKNOWN = 16
+LDNS_RDF_TYPE_TIME = 17
+LDNS_RDF_TYPE_PERIOD = 18
+LDNS_RDF_TYPE_TSIGTIME = 19
+LDNS_RDF_TYPE_TSIG = 20
+LDNS_RDF_TYPE_INT16_DATA = 21
+LDNS_RDF_TYPE_SERVICE = 22
+LDNS_RDF_TYPE_LOC = 23
+LDNS_RDF_TYPE_WKS = 24
+LDNS_RDF_TYPE_NSA = 25
+LDNS_RDF_TYPE_IPSECKEY = 26
+
-- read a pkt from the wire
function lua_recv_pkt()
end
-
-- transpose 2 rrs in a pkt --
function lua_transpose_rr(pkt, n1, n2)
print("[info] [RR] transpose", n1, n2)
local rr_n1 = l_pkt_get_rr(pkt, n1)
local rr_n2 = l_pkt_set_rr(pkt, rr_n1, n2)
local rr_tm = l_pkt_set_rr(pkt, rr_n2, n1)
- -- rm_tm is mem leak atm -- need free functions of ldns
+ l_rr_free(rm_tm)
end
function lua_transpose_rr_random(pkt)