/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* COPYING NOTES
*
* server.cpp -- main server body
*
* Copyright (C) 2002 Roberto A. Foglietta <robang@libero.it>
* Copyright (C) 2002 GEA-Automotive <fogliettar@gea-automotive.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* REVISION NOTES:
* released 21-10-2002 by Roberto A. Foglietta
*/
#include "../ServerSocket.h"
#include "../SocketException.h"
#include <iostream>
#include <cstring>
#include <string>
#include <cassert>
extern "C"
{
#include "replyfunc.h"
#include "mysignal.h"
}
int
main (int argc, char *argv[])
{
int port;
char *str;
if (argc == 2)
port = atoi (argv[1]);
else
port = _PORT;
std::cout << "running on port " << port << " ...\n";
signal (SIGINT, catch_int);
while (true) {
try {
// Create the socket
ServerSocket server (port);
ServerSocket new_sock;
server.accept (new_sock);
while (true) {
try {
while (true) {
std::string data;
new_sock >> data;
std::cout << "received:\n" << data << "\n";
if (CTRL_C_FLAG) {
std::cout << "sent:\n" << _STOP << "\n";
new_sock << _STOP << "\n";
return 0;
}
str = reply_func (data.c_str ());
if (str) {
new_sock << (std::string) str;
std::cout << "sent:\n" << (std::string) str << "\n";
} else {
new_sock << _FAIL;
std::cout << "sent:\n" << _FAIL << "\n";
}
}
}
catch (SocketException & e) {
std::cout << "Exception was caught:" << e.description () << "\nrestarting.\n";
break;
}
}
}
catch (SocketException & e) {
std::cout << "Exception was caught:" << e.description () << "\nExiting.\n";
return 1;
}
}
return 0;
}