#include <istream>
#include <iostream>
#include <iterator>
-#include "CAmDatabaseHandler.h"
+#include <unistd.h>
+#include <stdexcept>
+#include <cstdlib>
+#include "CAmDatabaseHandlerInterface.h"
#include "CAmRoutingSender.h"
#include "CAmTelnetMenuHelper.h"
#include "shared/CAmDltWrapper.h"
#define PRINT_BOOL(var) var ? output+="true\t\t" : output+="false\t\t";
-CAmTelnetServer::CAmTelnetServer(CAmSocketHandler *iSocketHandler, CAmCommandSender *iCommandSender, CAmCommandReceiver *iCommandReceiver, CAmRoutingSender *iRoutingSender, CAmRoutingReceiver *iRoutingReceiver, CAmControlSender *iControlSender, CAmControlReceiver *iControlReceiver, CAmDatabaseHandler *iDatabasehandler, CAmRouter *iRouter, unsigned int servPort, unsigned int maxConnections) :
- telnetConnectFiredCB(this, &CAmTelnetServer::connectSocket), telnetReceiveFiredCB(this, &CAmTelnetServer::receiveData), telnetDispatchCB(this, &CAmTelnetServer::dispatchData), telnetCheckCB(this, &CAmTelnetServer::check), mpSocketHandler(iSocketHandler), mpCommandSender(iCommandSender), mpCommandReceiver(iCommandReceiver), mpRoutingSender(iRoutingSender), mpRoutingReceiver(iRoutingReceiver), mpControlSender(iControlSender), mpControlReceiver(iControlReceiver), mpDatabasehandler(iDatabasehandler), mpRouter(iRouter), mConnecthandle(), mListMessages(), mListConnections(), mConnectFD(NULL), mServerPort(servPort), mMaxConnections(maxConnections), mTelnetMenuHelper(iSocketHandler, iCommandSender, iCommandReceiver, iRoutingSender, iRoutingReceiver, iControlSender, iControlReceiver,
- iDatabasehandler, iRouter, this)
+CAmTelnetServer::CAmTelnetServer(CAmSocketHandler *iSocketHandler, CAmCommandSender *iCommandSender, CAmCommandReceiver *iCommandReceiver, CAmRoutingSender *iRoutingSender, CAmRoutingReceiver *iRoutingReceiver, CAmControlSender *iControlSender, CAmControlReceiver *iControlReceiver, CAmDatabaseHandlerInterface *iDatabasehandler, CAmRouter *iRouter, unsigned int servPort, unsigned int maxConnections) :
+ telnetConnectFiredCB(this, &CAmTelnetServer::connectSocket), //
+ telnetReceiveFiredCB(this, &CAmTelnetServer::receiveData), //
+ telnetDispatchCB(this, &CAmTelnetServer::dispatchData), //
+ telnetCheckCB(this, &CAmTelnetServer::check), //
+ mpSocketHandler(iSocketHandler), //
+ mpCommandSender(iCommandSender), //
+ mpCommandReceiver(iCommandReceiver), //
+ mpRoutingSender(iRoutingSender), //
+ mpRoutingReceiver(iRoutingReceiver), //
+ mpControlSender(iControlSender), //
+ mpControlReceiver(iControlReceiver), //
+ mpDatabasehandler(iDatabasehandler), //
+ mpRouter(iRouter), //
+ mConnecthandle(), //
+ mListMessages(), //
+ mListConnections(), //
+ mConnectFD(0), //
+ mServerPort(servPort), //
+ mMaxConnections(maxConnections), //
+ mTelnetMenuHelper(iSocketHandler, iCommandSender, iCommandReceiver, iRoutingSender, iRoutingReceiver, iControlSender, iControlReceiver, iDatabasehandler, iRouter, this)
{
assert(mpSocketHandler!=NULL);
assert(mpCommandReceiver!=NULL);
//setup the port Listener
mConnectFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
assert (mConnectFD>0);
- setsockopt(mConnectFD, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
+ assert(setsockopt(mConnectFD, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))==0);
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = INADDR_ANY;
servAddr.sin_port = htons(servPort);
- bind(mConnectFD, (struct sockaddr *) &servAddr, sizeof(servAddr));
+ if(bind(mConnectFD, (struct sockaddr *) &servAddr, sizeof(servAddr))!=0)
+ {
+ logError("CAmTelnetServer::CAmTelnetServer bind failed, error",errno);
+ throw std::runtime_error("CAmTelnetServer::CAmTelnetServer bind failed");
+ }
if (listen(mConnectFD, mMaxConnections) < 0)
{
logError("TelnetServer::TelnetServerk cannot listen ", errno);
+ throw std::runtime_error("CAmTelnetServer::CAmTelnetServer bind failed");
}
else
logInfo("TelnetServer::TelnetServer started listening on port", mServerPort);
short event = 0;
event |= POLLIN;
- //aded the filedescriptor to the sockethandler and register the callbacks for receiving the data
+ //add the filedescriptor to the sockethandler and register the callbacks for receiving the data
mpSocketHandler->addFDPoll(connection.filedescriptor, event, NULL, &telnetReceiveFiredCB, &telnetCheckCB, &telnetDispatchCB, NULL, connection.handle);
mListConnections.push_back(connection);
}
//initialize buffer
char buffer[100];
//read until buffer is full or no more data is there
- int read = recv(pollfd.fd, buffer, 100, NULL);
+ int read = recv(pollfd.fd, buffer, 100, 0);
if (read > 1)
{
//read the message and store it in a queue - its a telnet connection so data will be sent on enter !