]> git.llucax.com Git - z.facultad/75.74/practicos.git/commitdiff
Se saca TCP por abajo del protocolo de resolución (que estaba de más porque va
authorLeandro Lucarella <llucax@gmail.com>
Fri, 23 Jun 2006 13:41:20 +0000 (13:41 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 23 Jun 2006 13:41:20 +0000 (13:41 +0000)
sobre MI IP). Se actualizan pruebas.

practicas/pipi/src/Makefile
practicas/pipi/src/resolvproto.cpp
practicas/pipi/src/resolvproto.h
practicas/pipi/src/test_resolvproto.cpp [new file with mode: 0644]
practicas/pipi/src/test_resolvprotoc.cpp [deleted file]
practicas/pipi/src/test_resolvprotos.cpp [deleted file]

index 9110dca0bcf4966fb6906221d9f5f91535feb4e7..f76f0e2053039a5035b5d75b22a49e088740df38 100644 (file)
@@ -32,12 +32,15 @@ CC=g++
 # 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
 #########
@@ -62,22 +65,14 @@ test_devtcp: test_devtcp.o devtcp.o libtcp.o ipaddr.o
 
 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
@@ -139,6 +134,29 @@ devtcp.o: /usr/include/bits/netdb.h /usr/include/fcntl.h
 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
@@ -187,46 +205,16 @@ ipout.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.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
@@ -292,16 +280,19 @@ test_ipout.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.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
@@ -316,14 +307,56 @@ test_recv.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.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
@@ -360,50 +393,6 @@ test_resolvprotoc.o: /usr/include/netinet/in.h /usr/include/bits/in.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
index 4c45f69ba04e0288934466c4cf5e72f31395105b..55e960c570375c925ed82e92852eebcc1209a6ca 100644 (file)
@@ -1,50 +1,35 @@
 #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
@@ -60,9 +45,21 @@ ResolvProtoResponse::ResolvProtoResponse(): ret(R_NOTFOUND), ttl(0)
 }
 
 /// 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
@@ -71,45 +68,24 @@ ResolvProtoResponse::ResolvProtoResponse(ret_t ret, uint32_t ttl,
     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
index ab41bf9408b71a2ef46db9deaae9d0d935b176de..50ec1719c10db88215f68079a5a51a772b41efd0 100644 (file)
@@ -2,6 +2,8 @@
 #define _RESOLVPROTO_H_
 
 #include "ipaddr.h"
+#include "ipin.h"
+#include "ipout.h"
 #include <string>
 #include <vector>
 #include <stdexcept>
@@ -27,14 +29,20 @@ struct ResolvProtoRequest
     std::string name;
 
     /// Constructores
-    ResolvProtoRequest(int fd);
-    ResolvProtoRequest(std::string name, uint8_t query_type = QT_RECURSIVE);
+    ResolvProtoRequest(std::string name, uint8_t query_type);
+    ResolvProtoRequest(std::string buf);
 
     /// Envía por socket
-    void send(int sockfd) const throw (std::runtime_error);
+    void send(IPOut& ipo) const throw (std::runtime_error);
 
     /// Recibe por socket
-    void recv(int sockfd) throw (std::runtime_error);
+    void recv(IPIn& ipi) throw (std::runtime_error);
+
+    /// Obtiene tamaño del paquete
+    size_t packet_size() const;
+
+    /// Convierte a un string
+    operator std::string () const;
 
 };
 
@@ -69,15 +77,21 @@ struct ResolvProtoResponse
 
     /// Constructores
     ResolvProtoResponse();
-    ResolvProtoResponse(int fd);
     ResolvProtoResponse(ret_t ret, uint32_t ttl = 0,
             const ipvec_t& ips = ipvec_t());
+    ResolvProtoResponse(std::string buf);
 
     /// Envía por socket
-    void send(int sockfd) const throw (std::runtime_error);
+    void send(IPOut& ipo) const throw (std::runtime_error);
 
     /// Recibe por socket
-    void recv(int sockfd) throw (std::runtime_error);
+    void recv(IPIn& ipi) throw (std::runtime_error);
+
+    /// Obtiene tamaño del paquete
+    size_t packet_size() const;
+
+    /// Convierte a un string
+    operator std::string () const;
 
 };
 
diff --git a/practicas/pipi/src/test_resolvproto.cpp b/practicas/pipi/src/test_resolvproto.cpp
new file mode 100644 (file)
index 0000000..ba1c136
--- /dev/null
@@ -0,0 +1,23 @@
+
+#include "resolvproto.h"
+#include "libtcp.h"
+#include <iostream>
+#include <cassert>
+
+int main()
+{
+    ResolvProtoRequest req("hola.tito", ResolvProtoRequest::QT_RECURSIVE);
+    std::cout << "Request Original: " << req << "\n";
+    ResolvProtoRequest req2 = std::string(req);
+    std::cout << "Request Reconstruido: " << req2 << "\n";
+    ResolvProtoResponse res(ResolvProtoResponse::R_A, 600);
+    res.ips.push_back(IPAddr("10.10.10.2"));
+    res.ips.push_back(IPAddr("100.20.45.21"));
+    res.ips.push_back(IPAddr("230.23.62.189"));
+    std::cout << "Response Original: " << res << "\n";
+    ResolvProtoResponse res2 = std::string(res);
+    std::cout << "Response Reconstruido: " << res2 << "\n";
+    return 0;
+}
+
+// vim: set et sw=4 sts=4 :
diff --git a/practicas/pipi/src/test_resolvprotoc.cpp b/practicas/pipi/src/test_resolvprotoc.cpp
deleted file mode 100644 (file)
index 4f04686..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#include "resolvproto.h"
-#include "libtcp.h"
-#include <iostream>
-#include <cassert>
-
-int main()
-{
-    int fd = libtcp_open_activo("localhost", 5050); assert(fd != -1);
-    ResolvProtoRequest rpr("hola.mundo.cruel");
-    std::cout << "Vamos a enviar: " << rpr << "\n";
-    rpr.send(fd);
-    ResolvProtoResponse rps(fd);
-    std::cout << "Recibimos: " << rps << "\n";
-    close(fd);
-    return 0;
-}
-
-// vim: set et sw=4 sts=4 :
diff --git a/practicas/pipi/src/test_resolvprotos.cpp b/practicas/pipi/src/test_resolvprotos.cpp
deleted file mode 100644 (file)
index 54c8c10..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#include "resolvproto.h"
-#include "libtcp.h"
-#include <iostream>
-#include <cassert>
-
-int main()
-{
-    int sfd = libtcp_open_pasivo(5050); assert(sfd != -1);
-    int cfd = accept(sfd, NULL, NULL); assert(cfd != -1);
-    close(sfd);
-    ResolvProtoRequest rpr(cfd);
-    std::cout << "Recibimos: " << rpr << "\n";
-    ResolvProtoResponse rps(ResolvProtoResponse::R_A, 600);
-    rps.ips.push_back(IPAddr("10.10.10.2"));
-    rps.ips.push_back(IPAddr("100.20.45.21"));
-    rps.ips.push_back(IPAddr("230.23.62.189"));
-    std::cout << "Contestamos: " << rps << "\n";
-    rps.send(cfd);
-    close(cfd);
-    return 0;
-}
-
-// vim: set et sw=4 sts=4 :