2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "mvpserver.h"
23 MVPServer::MVPServer()
27 MVPServer::~MVPServer()
29 if (threadIsActive()) stop();
34 if (!threadIsActive()) return 0;
37 log.log("MVPServer", Log::INFO, "Stopped MVPServer thread");
42 close(listeningSocket);
49 if (threadIsActive()) return 1;
51 log.init(Log::DEBUG, "/tmp/vompserver.log", 0);
55 log.log("MVPServer", Log::CRIT, "Could not start UDP replier");
63 log.log("MVPServer", Log::CRIT, "Could not start MVPServer thread");
69 log.log("MVPServer", Log::DEBUG, "MVPServer run success");
73 void MVPServer::threadMethod()
75 // I want to die as soon as I am cancelled because I'll be in accept()
76 pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
77 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
79 struct sockaddr_in address;
80 address.sin_family = AF_INET;
81 address.sin_port = htons(3024);
82 address.sin_addr.s_addr = INADDR_ANY;
83 socklen_t length = sizeof(address);
85 listeningSocket = socket(AF_INET, SOCK_STREAM, 0);
86 if (listeningSocket < 0)
88 log.log("MVPServer", Log::CRIT, "Could not get TCP socket in vompserver");
93 setsockopt(listeningSocket,SOL_SOCKET,SO_REUSEADDR,&value,sizeof(value));
95 if (bind(listeningSocket,(struct sockaddr *)&address,sizeof(address)) < 0)
97 log.log("MVPServer", Log::CRIT, "Could not bind to socket in vompserver");
98 close(listeningSocket);
102 listen(listeningSocket, 5);
108 clientSocket = accept(listeningSocket,(struct sockaddr *)&address, &length);
109 MVPClient* m = new MVPClient(clientSocket);
115 ULLONG ntohll(ULLONG a)
120 ULLONG htonll(ULLONG a)
122 #if BYTE_ORDER == BIG_ENDIAN
127 b = ((a << 56) & 0xFF00000000000000ULL)
128 | ((a << 40) & 0x00FF000000000000ULL)
129 | ((a << 24) & 0x0000FF0000000000ULL)
130 | ((a << 8) & 0x000000FF00000000ULL)
131 | ((a >> 8) & 0x00000000FF000000ULL)
132 | ((a >> 24) & 0x0000000000FF0000ULL)
133 | ((a >> 40) & 0x000000000000FF00ULL)
134 | ((a >> 56) & 0x00000000000000FFULL) ;