Tools/NetTest - TCP stack testing, going well
[tpg/acess2.git] / Tools / NetTest / cmdline_backend.c
1 /*
2  */
3 #define DEBUG   1
4 #include "cmdline.h"
5 #include "tcpserver.h"
6 #include <vfs_ext.h>
7 #include <threads.h>
8 #include <events.h>
9
10 // === PROTOTYES ===
11 void    Cmdline_Backend_Thread(void *unused);
12
13 // === GLOBALS ===
14 tThread *gpCmdline_WorkerThread;
15 tNetTest_TCPServer      *gpCmdline_TCPEchoServer;
16
17 // === CODE ===
18 void Cmdline_Backend_StartThread(void)
19 {
20         ASSERT(!gpCmdline_WorkerThread);
21         gpCmdline_WorkerThread = Proc_SpawnWorker(Cmdline_Backend_Thread, NULL);
22 }
23
24 void Cmdline_Backend_Thread(void *unused)
25 {
26         Threads_SetName("Cmdline Worker");
27         for( ;; )
28         {
29                 fd_set  rfd, wfd, efd;
30                  int    max = -1;
31                 
32                 FD_ZERO(&rfd);
33                 
34                 LOG("gpCmdline_TCPEchoServer = %p", gpCmdline_TCPEchoServer);
35                 if(gpCmdline_TCPEchoServer)
36                         max = MAX(max, NetTest_TCPServer_FillSelect(gpCmdline_TCPEchoServer, &rfd));
37                 
38                 memcpy(&wfd, &rfd, sizeof(rfd));
39                 memcpy(&efd, &rfd, sizeof(rfd));
40                 
41                 LOG("max = %i", max);
42                 int rv = VFS_Select(max+1, &rfd, &wfd, &efd, NULL, THREAD_EVENT_USER1, true);
43                 LOG("rv = %i", rv);
44                 
45                 if(gpCmdline_TCPEchoServer)
46                         NetTest_TCPServer_HandleSelect(gpCmdline_TCPEchoServer, &rfd, &wfd, &efd);
47         }
48 }
49
50 void Cmdline_Backend_StartEchoServer(int Port)
51 {
52         if(gpCmdline_TCPEchoServer)
53         {
54                 // Oops, two
55         }
56         else
57         {
58                 gpCmdline_TCPEchoServer = NetTest_TCPServer_Create(Port);
59                 Log_Debug("Cmdline", "Echo Server = %p", gpCmdline_TCPEchoServer);
60                 Threads_PostEvent(gpCmdline_WorkerThread, THREAD_EVENT_USER1);
61         }
62 }

UCC git Repository :: git.ucc.asn.au