From: Miek Gieben Date: Wed, 10 Aug 2005 09:39:26 +0000 (+0000) Subject: added rdf to lua + sockaddr conversion. Almost ready to read/write from wire X-Git-Tag: release-1.0.0~335 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b42350daa8616ebd890c5fa0e7cb868a460edc7;p=thirdparty%2Fldns.git added rdf to lua + sockaddr conversion. Almost ready to read/write from wire --- diff --git a/lua/lua-rns.c b/lua/lua-rns.c index 8de178f3..2723d599 100644 --- a/lua/lua-rns.c +++ b/lua/lua-rns.c @@ -41,7 +41,6 @@ lua_State* L; char *VERSION = "lua-rns 0.1"; - void usage(FILE *f, char *progname) { @@ -61,6 +60,45 @@ version(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 @@ -75,8 +113,12 @@ l_rr_new_frm_str(lua_State *L) 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 @@ -88,6 +130,14 @@ l_rr_print(lua_State *L) 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 @@ -97,8 +147,12 @@ static int 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; + } } @@ -109,11 +163,12 @@ l_pkt_push_rr(lua_State *L) 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 @@ -135,10 +190,10 @@ 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; @@ -152,10 +207,10 @@ l_pkt_set_rr(lua_State *L) { 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; @@ -168,7 +223,6 @@ static int 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; } @@ -255,6 +309,22 @@ l_pkt2string(lua_State *L) 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 @@ -290,9 +360,14 @@ register_ldns_functions(void) { /* 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); @@ -309,6 +384,7 @@ register_ldns_functions(void) /* CONVERSIONs */ lua_register(L, "l_pkt2string", l_pkt2string); + lua_register(L, "l_rdf2sockaddr_storage", l_rdf2sockaddr_storage); } int diff --git a/lua/lua-todo b/lua/lua-todo index 2af10f15..34410899 100644 --- a/lua/lua-todo +++ b/lua/lua-todo @@ -1 +1,3 @@ free functions from ldns - sometimes they are needed + +read packet from socket diff --git a/lua/rdf.lua b/lua/rdf.lua new file mode 100644 index 00000000..d44ac5c7 --- /dev/null +++ b/lua/rdf.lua @@ -0,0 +1,7 @@ +-- test rdf stuff + +dofile("rns-lib.lua") + +rdf = l_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, "miek.nl") +l_rdf_print(rdf) +print() diff --git a/lua/rns-lib.lua b/lua/rns-lib.lua index 581f8bfc..f79e079c 100644 --- a/lua/rns-lib.lua +++ b/lua/rns-lib.lua @@ -1,4 +1,4 @@ --- ldns defines +-- ldns defines - need a better way to keep these current LDNS_SECTION_QUESTION = 0 LDNS_SECTION_ANSWER = 1 LDNS_SECTION_AUTHORITY = 2 @@ -6,19 +6,47 @@ LDNS_SECTION_ADDITIONAL = 3 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) diff --git a/net.c b/net.c index 2f8ad7e4..0be69afb 100644 --- a/net.c +++ b/net.c @@ -311,7 +311,6 @@ ldns_tcp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage close(sockfd); return 0; } - return bytes; } @@ -341,14 +340,12 @@ ldns_udp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage close(sockfd); return 0; } - return bytes; } uint8_t * ldns_udp_read_wire(int sockfd, size_t *size) { - /* AANPASSEN */ uint8_t *wire; ssize_t wire_size; @@ -365,6 +362,7 @@ ldns_udp_read_wire(int sockfd, size_t *size) } *size = (size_t) wire_size; + wire = LDNS_XREALLOC(wire, uint8_t, wire_size); return wire; }