]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi-2da-entrega/src/test_devtcp.cpp
Tag de 2da entrega.
[z.facultad/75.74/practicos.git] / practicas / pipi-2da-entrega / src / test_devtcp.cpp
1
2 #include "ipaddr.h"
3 #include "devtcp.h"
4 #include <iostream>
5 #include <fstream>
6 #include <sstream>
7 #include <string>
8 #include <cassert>
9 #include <unistd.h>
10 #include <fcntl.h>
11 #include <sys/types.h>
12 #include <sys/wait.h>
13 #include <sys/ipc.h>
14 #include <sys/msg.h>
15 #include <signal.h>
16
17 // Uso: ./test_devtcp port
18
19 void send_loop(Dev& dev);
20
21 int main(int argc, char* argv[])
22 {
23     if (argc < 3)
24     {
25         std::cerr << "Uso: " << argv[0] << " addr port\n";
26         return 1;
27     }
28     Dev::mac_type mac = atoi(argv[1]);
29     uint16_t port = atoi(argv[2]);
30     // Creo medio físico y cola para forwarding
31     DevTCP dev(mac, port);
32     // Creo procesos
33     pid_t pid_send = fork();
34     if (pid_send == -1)
35     {
36         perror("fork()");
37         return 2;
38     }
39     if (pid_send) // Padre, send
40     {
41         int ret;
42         send_loop(dev);
43         kill(pid_send, SIGTERM);
44         waitpid(pid_send, &ret, 0);
45         return 0;
46     }
47     else // Hijo receive
48     {
49         while (true)
50         {
51             std::string s = dev.receive();
52             std::cout << "Recibido '" << s << "' (len " << s.size() << ")\n";
53         }
54         return 0;
55     }
56     return 0;
57 }
58
59 void send_loop(Dev& dev)
60 {
61     std::string dst;
62     std::string msg;
63     while (std::getline(std::cin, dst))
64     {
65         if (!std::getline(std::cin, msg))
66             break;
67         dev.transmit(msg, IPAddr(dst.c_str()));
68         std::cout << "Enviado '" << msg << "' a " << dst << "\n";
69     }
70 }
71
72 // vim: set et sw=4 sts=4 :