# Programas
targets=ip
tests=test_send test_recv test_ipaddr test_ipin test_ipout test_devtcp \
- test_poll test_resolvprotos test_resolvprotoc test_nameserver_file \
+ test_poll test_resolvproto test_nameserver_file \
test_nameserver_resolvnext
# Fuentes
fuentes ?= $(wildcard *.cpp) $(wildcard *.c)
+ip_objs=ipout.o ipin.o ipaddr.o ipheader.o devque.o devtcp.o routetable.o \
+ libtcp.o
+dns_objs=nameserver.o resolvproto.o
# REGLAS
#########
test_poll: test_poll.o libtcp.o
-#FIXME no va libtcp.o, debe ir sobre mi implementación de ip.
-test_resolvprotos: test_resolvprotos.o libtcp.o ipaddr.o resolvproto.o
-
-#FIXME no va libtcp.o, debe ir sobre mi implementación de ip.
-test_resolvprotoc: test_resolvprotoc.o libtcp.o ipaddr.o resolvproto.o
+test_resolvproto: test_resolvproto.o resolvproto.o ipaddr.o
-#FIXME no va libtcp.o, debe ir sobre mi implementación de ip.
-test_nameserver_file: test_nameserver_file.o ipaddr.o nameserver.o \
- resolvproto.o libtcp.o
+test_nameserver_file: test_nameserver_file.o $(dns_objs) $(ip_objs)
#FIXME no va libtcp.o, debe ir sobre mi implementación de ip.
-test_nameserver_resolvnext: test_nameserver_resolvnext.o ipaddr.o \
- nameserver.o resolvproto.o libtcp.o
+test_nameserver_resolvnext: test_nameserver_resolvnext.o $(dns_objs) $(ip_objs)
-ip: ip.o ipout.o ipin.o ipaddr.o ipheader.o devque.o devtcp.o routetable.o \
- libtcp.o
+ip: ip.o $(ip_objs)
depend:
@makedepend $(fuentes) > /dev/null 2>&1
devtcp.o: /usr/include/bits/fcntl.h /usr/include/sys/ipc.h
devtcp.o: /usr/include/bits/ipctypes.h /usr/include/bits/ipc.h
devtcp.o: /usr/include/sys/msg.h /usr/include/bits/msq.h
+dns.o: ipout.h ipaddr.h /usr/include/stdint.h /usr/include/features.h
+dns.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+dns.o: /usr/include/bits/wchar.h /usr/include/bits/wordsize.h ipheader.h
+dns.o: routetable.h dev.h ipin.h devtcp.h /usr/include/sys/poll.h
+dns.o: /usr/include/bits/poll.h devque.h /usr/include/unistd.h
+dns.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
+dns.o: /usr/include/bits/typesizes.h /usr/include/bits/confname.h
+dns.o: /usr/include/getopt.h /usr/include/fcntl.h /usr/include/bits/fcntl.h
+dns.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h
+dns.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+dns.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+dns.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+dns.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
+dns.o: /usr/include/sys/wait.h /usr/include/signal.h
+dns.o: /usr/include/bits/signum.h /usr/include/bits/siginfo.h
+dns.o: /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h
+dns.o: /usr/include/asm/sigcontext.h /usr/include/asm-i486/sigcontext.h
+dns.o: /usr/include/linux/compiler.h /usr/include/bits/sigstack.h
+dns.o: /usr/include/bits/sigthread.h /usr/include/sys/resource.h
+dns.o: /usr/include/bits/resource.h /usr/include/bits/waitflags.h
+dns.o: /usr/include/bits/waitstatus.h /usr/include/sys/ipc.h
+dns.o: /usr/include/bits/ipctypes.h /usr/include/bits/ipc.h
+dns.o: /usr/include/sys/msg.h /usr/include/bits/msq.h
ip.o: ipout.h ipaddr.h /usr/include/stdint.h /usr/include/features.h
ip.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
ip.o: /usr/include/bits/wchar.h /usr/include/bits/wordsize.h ipheader.h
ipout.o: /usr/include/sys/ipc.h /usr/include/bits/ipctypes.h
ipout.o: /usr/include/bits/ipc.h /usr/include/sys/msg.h
ipout.o: /usr/include/bits/msq.h
-nameserver.o: nameserver.h ipaddr.h /usr/include/stdint.h
+nameserver.o: nameserver.h devque.h dev.h ipaddr.h /usr/include/stdint.h
nameserver.o: /usr/include/features.h /usr/include/sys/cdefs.h
nameserver.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-nameserver.o: /usr/include/bits/wordsize.h resolvproto.h
+nameserver.o: /usr/include/bits/wordsize.h resolvproto.h ipin.h ipheader.h
+nameserver.o: ipout.h routetable.h
resolvproto.o: resolvproto.h ipaddr.h /usr/include/stdint.h
resolvproto.o: /usr/include/features.h /usr/include/sys/cdefs.h
resolvproto.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-resolvproto.o: /usr/include/bits/wordsize.h libtcp.h /usr/include/stdio.h
-resolvproto.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
-resolvproto.o: /usr/include/libio.h /usr/include/_G_config.h
-resolvproto.o: /usr/include/wchar.h /usr/include/gconv.h
-resolvproto.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
-resolvproto.o: /usr/include/stdlib.h /usr/include/sys/types.h
-resolvproto.o: /usr/include/time.h /usr/include/endian.h
-resolvproto.o: /usr/include/bits/endian.h /usr/include/sys/select.h
-resolvproto.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
-resolvproto.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
-resolvproto.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
-resolvproto.o: /usr/include/alloca.h /usr/include/unistd.h
-resolvproto.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
-resolvproto.o: /usr/include/getopt.h /usr/include/signal.h
-resolvproto.o: /usr/include/bits/signum.h /usr/include/bits/siginfo.h
-resolvproto.o: /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h
-resolvproto.o: /usr/include/asm/sigcontext.h
-resolvproto.o: /usr/include/asm-i486/sigcontext.h
-resolvproto.o: /usr/include/linux/compiler.h /usr/include/bits/sigstack.h
-resolvproto.o: /usr/include/bits/sigthread.h /usr/include/sys/wait.h
-resolvproto.o: /usr/include/sys/resource.h /usr/include/bits/resource.h
-resolvproto.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h
-resolvproto.o: /usr/include/string.h /usr/include/sys/socket.h
-resolvproto.o: /usr/include/sys/uio.h /usr/include/bits/uio.h
-resolvproto.o: /usr/include/bits/socket.h /usr/include/limits.h
-resolvproto.o: /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h
-resolvproto.o: /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h
-resolvproto.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-resolvproto.o: /usr/include/asm-i486/socket.h /usr/include/asm/sockios.h
-resolvproto.o: /usr/include/asm-i486/sockios.h /usr/include/netinet/in.h
-resolvproto.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
-resolvproto.o: /usr/include/arpa/inet.h /usr/include/netdb.h
-resolvproto.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h
+resolvproto.o: /usr/include/bits/wordsize.h ipin.h ipheader.h dev.h ipout.h
+resolvproto.o: routetable.h
routetable.o: routetable.h dev.h ipaddr.h /usr/include/stdint.h
routetable.o: /usr/include/features.h /usr/include/sys/cdefs.h
routetable.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
test_ipout.o: /usr/include/sys/ipc.h /usr/include/bits/ipctypes.h
test_ipout.o: /usr/include/bits/ipc.h /usr/include/sys/msg.h
test_ipout.o: /usr/include/bits/msq.h
-test_nameserver_file.o: nameserver.h ipaddr.h /usr/include/stdint.h
-test_nameserver_file.o: /usr/include/features.h /usr/include/sys/cdefs.h
-test_nameserver_file.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-test_nameserver_file.o: /usr/include/bits/wordsize.h resolvproto.h
-test_nameserver_resolvnext.o: nameserver.h ipaddr.h /usr/include/stdint.h
-test_nameserver_resolvnext.o: /usr/include/features.h
+test_nameserver_file.o: nameserver.h devque.h dev.h ipaddr.h
+test_nameserver_file.o: /usr/include/stdint.h /usr/include/features.h
+test_nameserver_file.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
+test_nameserver_file.o: /usr/include/bits/wchar.h
+test_nameserver_file.o: /usr/include/bits/wordsize.h resolvproto.h ipin.h
+test_nameserver_file.o: ipheader.h ipout.h routetable.h
+test_nameserver_resolvnext.o: nameserver.h devque.h dev.h ipaddr.h
+test_nameserver_resolvnext.o: /usr/include/stdint.h /usr/include/features.h
test_nameserver_resolvnext.o: /usr/include/sys/cdefs.h
test_nameserver_resolvnext.o: /usr/include/gnu/stubs.h
test_nameserver_resolvnext.o: /usr/include/bits/wchar.h
test_nameserver_resolvnext.o: /usr/include/bits/wordsize.h resolvproto.h
+test_nameserver_resolvnext.o: ipin.h ipheader.h ipout.h routetable.h
test_recv.o: devque.h dev.h /usr/include/unistd.h /usr/include/features.h
test_recv.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
test_recv.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
test_recv.o: /usr/include/bits/sched.h /usr/include/sys/ipc.h
test_recv.o: /usr/include/bits/ipctypes.h /usr/include/bits/ipc.h
test_recv.o: /usr/include/sys/msg.h /usr/include/bits/msq.h
+test_resolvproto.o: resolvproto.h ipaddr.h /usr/include/stdint.h
+test_resolvproto.o: /usr/include/features.h /usr/include/sys/cdefs.h
+test_resolvproto.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
+test_resolvproto.o: /usr/include/bits/wordsize.h ipin.h ipheader.h dev.h
+test_resolvproto.o: ipout.h routetable.h libtcp.h /usr/include/stdio.h
+test_resolvproto.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
+test_resolvproto.o: /usr/include/libio.h /usr/include/_G_config.h
+test_resolvproto.o: /usr/include/wchar.h /usr/include/gconv.h
+test_resolvproto.o: /usr/include/bits/stdio_lim.h
+test_resolvproto.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h
+test_resolvproto.o: /usr/include/sys/types.h /usr/include/time.h
+test_resolvproto.o: /usr/include/endian.h /usr/include/bits/endian.h
+test_resolvproto.o: /usr/include/sys/select.h /usr/include/bits/select.h
+test_resolvproto.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+test_resolvproto.o: /usr/include/sys/sysmacros.h
+test_resolvproto.o: /usr/include/bits/pthreadtypes.h
+test_resolvproto.o: /usr/include/bits/sched.h /usr/include/alloca.h
+test_resolvproto.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h
+test_resolvproto.o: /usr/include/bits/confname.h /usr/include/getopt.h
+test_resolvproto.o: /usr/include/signal.h /usr/include/bits/signum.h
+test_resolvproto.o: /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h
+test_resolvproto.o: /usr/include/bits/sigcontext.h
+test_resolvproto.o: /usr/include/asm/sigcontext.h
+test_resolvproto.o: /usr/include/asm-i486/sigcontext.h
+test_resolvproto.o: /usr/include/linux/compiler.h
+test_resolvproto.o: /usr/include/bits/sigstack.h
+test_resolvproto.o: /usr/include/bits/sigthread.h /usr/include/sys/wait.h
+test_resolvproto.o: /usr/include/sys/resource.h /usr/include/bits/resource.h
+test_resolvproto.o: /usr/include/bits/waitflags.h
+test_resolvproto.o: /usr/include/bits/waitstatus.h /usr/include/string.h
+test_resolvproto.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+test_resolvproto.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+test_resolvproto.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
+test_resolvproto.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
+test_resolvproto.o: /usr/include/bits/posix2_lim.h
+test_resolvproto.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
+test_resolvproto.o: /usr/include/asm-i486/socket.h /usr/include/asm/sockios.h
+test_resolvproto.o: /usr/include/asm-i486/sockios.h /usr/include/netinet/in.h
+test_resolvproto.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
+test_resolvproto.o: /usr/include/arpa/inet.h /usr/include/netdb.h
+test_resolvproto.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h
test_resolvprotoc.o: resolvproto.h ipaddr.h /usr/include/stdint.h
test_resolvprotoc.o: /usr/include/features.h /usr/include/sys/cdefs.h
test_resolvprotoc.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-test_resolvprotoc.o: /usr/include/bits/wordsize.h libtcp.h
-test_resolvprotoc.o: /usr/include/stdio.h /usr/include/bits/types.h
-test_resolvprotoc.o: /usr/include/bits/typesizes.h /usr/include/libio.h
-test_resolvprotoc.o: /usr/include/_G_config.h /usr/include/wchar.h
-test_resolvprotoc.o: /usr/include/gconv.h /usr/include/bits/stdio_lim.h
+test_resolvprotoc.o: /usr/include/bits/wordsize.h ipin.h ipheader.h dev.h
+test_resolvprotoc.o: ipout.h routetable.h libtcp.h /usr/include/stdio.h
+test_resolvprotoc.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
+test_resolvprotoc.o: /usr/include/libio.h /usr/include/_G_config.h
+test_resolvprotoc.o: /usr/include/wchar.h /usr/include/gconv.h
+test_resolvprotoc.o: /usr/include/bits/stdio_lim.h
test_resolvprotoc.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h
test_resolvprotoc.o: /usr/include/sys/types.h /usr/include/time.h
test_resolvprotoc.o: /usr/include/endian.h /usr/include/bits/endian.h
test_resolvprotoc.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
test_resolvprotoc.o: /usr/include/netdb.h /usr/include/rpc/netdb.h
test_resolvprotoc.o: /usr/include/bits/netdb.h
-test_resolvprotos.o: resolvproto.h ipaddr.h /usr/include/stdint.h
-test_resolvprotos.o: /usr/include/features.h /usr/include/sys/cdefs.h
-test_resolvprotos.o: /usr/include/gnu/stubs.h /usr/include/bits/wchar.h
-test_resolvprotos.o: /usr/include/bits/wordsize.h libtcp.h
-test_resolvprotos.o: /usr/include/stdio.h /usr/include/bits/types.h
-test_resolvprotos.o: /usr/include/bits/typesizes.h /usr/include/libio.h
-test_resolvprotos.o: /usr/include/_G_config.h /usr/include/wchar.h
-test_resolvprotos.o: /usr/include/gconv.h /usr/include/bits/stdio_lim.h
-test_resolvprotos.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h
-test_resolvprotos.o: /usr/include/sys/types.h /usr/include/time.h
-test_resolvprotos.o: /usr/include/endian.h /usr/include/bits/endian.h
-test_resolvprotos.o: /usr/include/sys/select.h /usr/include/bits/select.h
-test_resolvprotos.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
-test_resolvprotos.o: /usr/include/sys/sysmacros.h
-test_resolvprotos.o: /usr/include/bits/pthreadtypes.h
-test_resolvprotos.o: /usr/include/bits/sched.h /usr/include/alloca.h
-test_resolvprotos.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h
-test_resolvprotos.o: /usr/include/bits/confname.h /usr/include/getopt.h
-test_resolvprotos.o: /usr/include/signal.h /usr/include/bits/signum.h
-test_resolvprotos.o: /usr/include/bits/siginfo.h
-test_resolvprotos.o: /usr/include/bits/sigaction.h
-test_resolvprotos.o: /usr/include/bits/sigcontext.h
-test_resolvprotos.o: /usr/include/asm/sigcontext.h
-test_resolvprotos.o: /usr/include/asm-i486/sigcontext.h
-test_resolvprotos.o: /usr/include/linux/compiler.h
-test_resolvprotos.o: /usr/include/bits/sigstack.h
-test_resolvprotos.o: /usr/include/bits/sigthread.h /usr/include/sys/wait.h
-test_resolvprotos.o: /usr/include/sys/resource.h /usr/include/bits/resource.h
-test_resolvprotos.o: /usr/include/bits/waitflags.h
-test_resolvprotos.o: /usr/include/bits/waitstatus.h /usr/include/string.h
-test_resolvprotos.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
-test_resolvprotos.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
-test_resolvprotos.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
-test_resolvprotos.o: /usr/include/bits/local_lim.h
-test_resolvprotos.o: /usr/include/linux/limits.h
-test_resolvprotos.o: /usr/include/bits/posix2_lim.h
-test_resolvprotos.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
-test_resolvprotos.o: /usr/include/asm-i486/socket.h
-test_resolvprotos.o: /usr/include/asm/sockios.h
-test_resolvprotos.o: /usr/include/asm-i486/sockios.h
-test_resolvprotos.o: /usr/include/netinet/in.h /usr/include/bits/in.h
-test_resolvprotos.o: /usr/include/bits/byteswap.h /usr/include/arpa/inet.h
-test_resolvprotos.o: /usr/include/netdb.h /usr/include/rpc/netdb.h
-test_resolvprotos.o: /usr/include/bits/netdb.h
test_send.o: devque.h dev.h /usr/include/unistd.h /usr/include/features.h
test_send.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
test_send.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
#include "resolvproto.h"
-#include "libtcp.h"
#include <cstdlib>
#include <algorithm>
#include <iterator>
-/// Constructor
-ResolvProtoRequest::ResolvProtoRequest(int fd)
-{
- recv(fd);
-}
-
/// Constructor
ResolvProtoRequest::ResolvProtoRequest(std::string name, uint8_t query_type):
query_type(query_type), name(name)
{}
-/// Envía por socket
-void ResolvProtoRequest::send(int sockfd) const
- throw (std::runtime_error)
+/// Constructor a partir de un buffer
+ResolvProtoRequest::ResolvProtoRequest(std::string buf)
{
- if (libtcp_send(sockfd, &query_type, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al enviar query_type por socket");
+ memcpy(&query_type, buf.c_str(), sizeof(uint8_t));
+ uint16_t size;
+ memcpy(&size, buf.c_str() + sizeof(uint8_t), sizeof(uint16_t));
+ name.assign(buf.c_str() + sizeof(uint8_t) + sizeof(uint16_t), size);
+}
+
+/// Convierte a un buffer
+ResolvProtoRequest::operator std::string () const
+{
+ std::string buf((char*)&query_type, sizeof(uint8_t));
uint16_t size = name.size();
- if (libtcp_send(sockfd, &size, sizeof(uint16_t)) != sizeof(uint16_t))
- throw std::runtime_error("Error al enviar size por socket");
- if (libtcp_send(sockfd, name.c_str(), size) != size)
- throw std::runtime_error("Error al enviar name por socket");
+ buf.append((char*)&size, sizeof(uint16_t));
+ buf.append(name);
+ return buf;
}
-/// Recibe por socket
-void ResolvProtoRequest::recv(int sockfd)
- throw (std::runtime_error)
+size_t ResolvProtoRequest::packet_size() const
{
- if (libtcp_receive_bin(sockfd, &query_type, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al recibir query_type por socket");
- uint16_t size;
- if (libtcp_receive_bin(sockfd, &size, sizeof(uint16_t)) != sizeof(uint16_t))
- throw std::runtime_error("Error al recibir size por socket");
- char* buf = (char*) malloc(size);
- if (libtcp_receive_bin(sockfd, buf, size) != size)
- {
- free(buf);
- throw std::runtime_error("Error al recibir name por socket");
- }
- name.assign(buf, size);
- free(buf);
+ return sizeof(uint8_t) + sizeof(uint16_t) + name.size();
}
/// Impresión de request
}
/// Constructor
-ResolvProtoResponse::ResolvProtoResponse(int fd)
+ResolvProtoResponse::ResolvProtoResponse(std::string buf)
{
- recv(fd);
+ memcpy(&ret, buf.c_str(), sizeof(uint8_t));
+ memcpy(&ttl, buf.c_str() + sizeof(uint8_t), sizeof(uint32_t));
+ uint8_t count;
+ memcpy(&count, buf.c_str() + sizeof(uint8_t) + sizeof(uint32_t),
+ sizeof(uint8_t));
+ ips.reserve(count);
+ for (uint8_t i = 0; i < count; ++i)
+ {
+ uint32_t ip;
+ memcpy(&ip, buf.c_str() + 2 * sizeof(uint8_t)
+ + sizeof(uint32_t) * (i + 1), sizeof(uint32_t));
+ ips.push_back(ip);
+ }
}
/// Constructor
ret(ret), ttl(ttl), ips(ips)
{}
-/// Envía por socket
-void ResolvProtoResponse::send(int sockfd) const
- throw (std::runtime_error)
+/// Convierte a buffer
+ResolvProtoResponse::operator std::string () const
{
- if (libtcp_send(sockfd, &ret, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al enviar ret por socket");
- if (libtcp_send(sockfd, &ttl, sizeof(uint32_t)) != sizeof(uint32_t))
- throw std::runtime_error("Error al enviar ttl por socket");
+ std::string buf((char*)&ret, sizeof(uint8_t));
+ buf.append((char*)&ttl, sizeof(uint32_t));
uint8_t count = ips.size();
- if (libtcp_send(sockfd, &count, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al enviar count por socket");
+ buf.append((char*)&count, sizeof(uint8_t));
for (ipvec_t::const_iterator i = ips.begin(); i != ips.end(); ++i)
{
uint32_t ip = *i;
- if (libtcp_send(sockfd, &ip, sizeof(uint32_t)) != sizeof(uint32_t))
- throw std::runtime_error("Error al enviar IPAddr por socket");
+ buf.append((char*)&ip, sizeof(uint32_t));
}
+ return buf;
}
-/// Recibe por socket
-void ResolvProtoResponse::recv(int sockfd)
- throw (std::runtime_error)
+size_t ResolvProtoResponse::packet_size() const
{
- if (libtcp_receive_bin(sockfd, &ret, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al recibir ret por socket");
- if (libtcp_receive_bin(sockfd, &ttl, sizeof(uint32_t)) != sizeof(uint32_t))
- throw std::runtime_error("Error al recibir ttl por socket");
- uint8_t count;
- if (libtcp_receive_bin(sockfd, &count, sizeof(uint8_t)) != sizeof(uint8_t))
- throw std::runtime_error("Error al recibir count por socket");
- ips.clear();
- ips.reserve(count);
- for (uint8_t i = 0; i < count; ++i)
- {
- uint32_t ip;
- if (libtcp_receive_bin(sockfd, &ip, sizeof(uint32_t)) != sizeof(uint32_t))
- throw std::runtime_error("Error al recibir IPAddr por socket");
- ips.push_back(ip);
- }
+ return 2 * sizeof(uint8_t) + (ips.size() + 1) * sizeof(uint32_t);
}
/// Impresión de response