l_write_wire_udp(lua_State *L)
{
int sockfd = (int)lua_tonumber(L, 1);
- ldns_buffer *pktbuf = (ldns_buffer*) lua_touserdata(L, 2);
+ ldns_buffer *pktbuf = (ldns_buffer*)lua_touserdata(L, 2);
ldns_rdf *rdf_to = (ldns_rdf*)lua_touserdata(L, 3);
uint16_t port = (uint16_t)lua_tonumber(L, 4); /* port number */
size_t size;
uint8_t *pktbuf_raw;
ldns_buffer *pktbuf;
- /* returned frm wire */
- socklen_t from_size;
struct sockaddr_storage *from;
+ socklen_t from_len;
from = LDNS_MALLOC(struct sockaddr_storage);
if (!from) {
return 0;
}
(void)memset(from, 0, sizeof(struct sockaddr_storage));
+ from_len = sizeof(struct sockaddr_storage); /* set to predefined state */
pktbuf = ldns_buffer_new(LDNS_MIN_BUFLEN); /* this /should/ happen in buf_new_frm_data */
if (!pktbuf) {
return 0;
}
- pktbuf_raw = ldns_udp_read_wire(sockfd, &size, from, &from_size);
+ pktbuf_raw = ldns_udp_read_wire(sockfd, &size, from, &from_len);
if (!pktbuf_raw) {
return 0;
ldns_buffer_new_frm_data(pktbuf, pktbuf_raw, size);
/* push our buffer onto the stack */
- /* stack func lua cal in same order buf, from, size = */
+ /* stack func lua cal in same order buf, from */
lua_pushlightuserdata(L, pktbuf);
lua_pushlightuserdata(L, from);
- lua_pushnumber(L, (lua_Number)from_size);
- return 3;
+ /* lua_pushnumber(L, (lua_Number)from_size); */
+ return 2;
}
/* header bits */
+++ /dev/null
-There is a strange networking problem, calling udp_read more than once
-gives an error
-upd.read (with a dot) doesn't work at all.
-
-I suspect these 2 errors are related. It may be the case this is a bug
-in the core ldns
while true do
-- read from the socket, this blocks...
-wirebuf, sockaddr_from, fromlen = udp_read(socket) -- this works
---wirebuf, sockaddr_from, fromlen = udp.read(socket) -- this doesn't
+wirebuf, sockaddr_from = udp_read(socket) -- this works
+--wirebuf, sockaddr_from = udp.read(socket) -- this doesn't
-- wrap this in new functions
if wirebuf == nil then
struct sockaddr_in *data_in;
struct sockaddr_in6 *data_in6;
-/*
- * DEAD CODE???
- struct in_addr *b;
- b = (struct in_addr*)rd->_data;
-*/
-
data = LDNS_MALLOC(struct sockaddr_storage);
if (!data) {
return NULL;
ldns_rdf *
ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port)
{
-
ldns_rdf *addr;
struct sockaddr_in *data_in;
struct sockaddr_in6 *data_in6;
case AF_INET:
data_in = (struct sockaddr_in*)sock;
if (port) {
- *port = ntohs(data_in->sin_port);
+ *port = ntohs((uint16_t)data_in->sin_port);
}
addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_A,
- sizeof(struct sockaddr_in),
+ LDNS_IP4ADDRLEN,
&data_in->sin_addr);
break;
case AF_INET6:
data_in6 = (struct sockaddr_in6*)sock;
if (port) {
- *port = ntohs(data_in6->sin6_port);
+ *port = ntohs((uint16_t)data_in6->sin6_port);
}
addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_AAAA,
- sizeof(struct sockaddr_in6),
+ LDNS_IP6ADDRLEN,
&data_in6->sin6_addr);
break;
default:
HEADER = config.h
TESTS = run-test0 run-test7 run-test18 run-test19 run-test20 \
dname-label-test notify run-test-read-zone \
- rrsig-test serial
+ rrsig-test serial server
.PHONY: all clean realclean
serial: serial.o
$(LINK) -o $@ $+
+server: server.o
+ $(LINK) -o $@ $+
+
## implicit rule
%.o: %.c $(HEADER)
$(COMPILE) -c $<