]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
added rdf to lua + sockaddr conversion. Almost ready to read/write from wire
authorMiek Gieben <miekg@NLnetLabs.nl>
Wed, 10 Aug 2005 09:39:26 +0000 (09:39 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Wed, 10 Aug 2005 09:39:26 +0000 (09:39 +0000)
lua/lua-rns.c
lua/lua-todo
lua/rdf.lua [new file with mode: 0644]
lua/rns-lib.lua
net.c

index 8de178f38f82d2d91d9f0d582c8c56fbc3fb4b91..2723d5995ba6ba1b5872184c7ecab56400111f50 100644 (file)
@@ -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
index 2af10f15d8110f67e2f5eb064512b84418690509..344108996f8dbbe9a727a63e6e205a76381266b8 100644 (file)
@@ -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 (file)
index 0000000..d44ac5c
--- /dev/null
@@ -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()
index 581f8bfc283152129da8cb70ef5eecf539aef672..f79e079c0c4a482fb002c2d5ef636107ccd816e5 100644 (file)
@@ -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 2f8ad7e498ae21c0df92cf5d83f26679bd8cfa58..0be69afb7744870172cee62491d9d5d3f446cbbb 100644 (file)
--- 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;
 }