26 #include <core/threading/thread.h>
27 #include <netcomm/socket/stream.h>
28 #include <utils/system/signal.h>
29 #include <utils/system/argparser.h>
33 using namespace fawkes;
35 class StreamServerThread :
public Thread
39 :
Thread(
"StreamServerThread",
Thread::OPMODE_CONTINUOUS)
51 printf(
"Closing server socket\n");
54 printf(
"Closed server socket\n");
65 printf(
"Server MTU: %u\n", cs->mtu());
72 cs->write(&i,
sizeof(i));
74 cs->read(&ri,
sizeof(ri));
76 printf(
"ERROR: sent %u but received %u\n", i, ri);
78 printf(
"OK: sent %u and received %u\n", i, ri);
83 printf(
"Loop failed, disconnecting and waiting for new connection\n");
99 class StreamClientThread :
public Thread
102 StreamClientThread(
const char *host)
103 :
Thread(
"StreamClientThread",
Thread::OPMODE_CONTINUOUS)
105 if ( host == NULL ) {
106 this->host =
"127.0.0.1";
115 ~StreamClientThread()
117 printf(
"Closing client socket\n");
119 printf(
"Closed client socket\n");
127 s->connect(host, 1910);
129 printf(
"Client MTU: %u\n", s->mtu());
136 s->read(&i,
sizeof(i));
137 s->write(&i,
sizeof(i));
151 static const unsigned int MODE_STANDALONE = 1;
152 static const unsigned int MODE_SERVER = 2;
153 static const unsigned int MODE_CLIENT = 3;
155 StreamSocketQAMain(
unsigned int mode,
const char *host = NULL)
159 if ( (mode == MODE_STANDALONE) ||
160 (mode == MODE_SERVER) ) {
161 s =
new StreamServerThread();
163 if ( (mode == MODE_STANDALONE) ||
164 (mode == MODE_CLIENT) ) {
165 c =
new StreamClientThread(host);
169 ~StreamSocketQAMain()
176 virtual void handle_signal(
int signum)
178 printf(
"Signal received, cancelling threads\n");
181 printf(
"Threads cancelled\n");
193 StreamServerThread *s;
194 StreamClientThread *c;
199 main(
int argc,
char **argv)
201 StreamSocketQAMain *m;
206 if ( argp.has_arg(
"s") || argp.has_arg(
"c") ) {
208 if ( argp.has_arg(
"s") ) {
210 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_SERVER);
212 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_CLIENT,
216 m =
new StreamSocketQAMain(StreamSocketQAMain::MODE_STANDALONE);