From 91c0a083b3d87f5e9b24a733bbfa9e42e00d48e7 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Fri, 25 Jul 2014 10:28:56 +0200 Subject: [PATCH] argv, argc moved from tcpip interface to slsReceiver --- .../slsReceiver/slsReceiver.cpp | 126 +++++++++++++- .../slsReceiver/slsReceiverTCPIPInterface.cpp | 155 ++++++------------ .../slsReceiver/slsReceiverTCPIPInterface.h | 20 ++- 3 files changed, 188 insertions(+), 113 deletions(-) diff --git a/slsReceiverSoftware/slsReceiver/slsReceiver.cpp b/slsReceiverSoftware/slsReceiver/slsReceiver.cpp index 72e9bf7fb..cd5ab551d 100644 --- a/slsReceiverSoftware/slsReceiver/slsReceiver.cpp +++ b/slsReceiverSoftware/slsReceiver/slsReceiver.cpp @@ -3,18 +3,140 @@ * @short creates the UDP and TCP class objects ***********************************************/ +#include +#include +#include +#include +#include + #include "slsReceiver.h" #include "slsReceiverUDPFunctions.h" #include "eigerReceiver.h" +using namespace std; slsReceiver::slsReceiver(int argc, char *argv[], int &success){ //creating base receiver cout << "SLS Receiver" << endl; receiverBase = new slsReceiverUDPFunctions(); + int tcpip_port_no=-1; + + + + ifstream infile; + string sLine,sargname; + int iline = 0; + + + success=OK; + + string fname = ""; + + //parse command line for config + for(int iarg=1;iarg> sargname; + + //tcp port + if(sargname=="rx_tcpport"){ + if(sstr.good()) { + sstr >> sargname; + if(sscanf(sargname.c_str(),"%d",&tcpip_port_no)) + cout<<"dataport:"<> sargname; - - //tcp port - if(sargname=="rx_tcpport"){ - if(sstr.good()) { - sstr >> sargname; - if(sscanf(sargname.c_str(),"%d",&port_no)) - cout<<"dataport:"<0) + port_no = pn; + success=OK; //create socket if(success == OK){ @@ -157,6 +56,7 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int argc, char *argv[], int delete socket; socket=NULL; } else { + portNumber=port_no; //initialize variables strcpy(socket->lastClientIP,"none"); strcpy(socket->thisClientIP,"none1"); @@ -175,6 +75,47 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int argc, char *argv[], int } +int slsReceiverTCPIPInterface::setPortNumber(int pn){ + int p_number; + MySocketTCP *oldsocket=NULL;; + int sd=0; + + if (pn>0) { + p_number = pn; + + if (p_number<1024) { + sprintf(mess,"Too low port number %d\n", p_number); + cout << mess << endl; + } else { + + oldsocket=socket; + socket = new MySocketTCP(p_number); + if(socket){ + sd = socket->getErrorStatus(); + if (!sd){ + portNumber=p_number; + delete oldsocket; + } else { + cout << "Could not bind port " << p_number << endl; + if (sd==-10) { + + cout << "Port "<< p_number << " already set" << endl; + } else { + delete socket; + socket=oldsocket; + } + } + + } else { + socket=oldsocket; + } + } + } + + return portNumber; +} + + int slsReceiverTCPIPInterface::start(){ cout << "Creating TCP Server Thread" << endl; diff --git a/slsReceiverSoftware/slsReceiver/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/slsReceiver/slsReceiverTCPIPInterface.h index d4c1681b5..423d0949a 100644 --- a/slsReceiverSoftware/slsReceiver/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/slsReceiver/slsReceiverTCPIPInterface.h @@ -23,12 +23,19 @@ public: /** * Constructor * reads config file, creates socket, assigns function table - * @param argc from command line - * @param argv from command line * @param succecc socket creation was successfull - * rbase pointer to the receiver base + * @param rbase pointer to the receiver base + * @param pn port number (defaults to default port number) */ - slsReceiverTCPIPInterface(int argc, char *argv[], int &success, slsReceiverBase* rbase); + slsReceiverTCPIPInterface(int &success, slsReceiverBase* rbase, int pn=-1); + + /** + * Sets the port number to listen to. + Take care that the client must know to whcih port it has to listen to, so normally it is better to use a fixes port from the instatiation or change it from the client. + @param pn port number (-1 only get) + \returns actual port number + */ + int setPortNumber(int pn=-1); /** * Starts listening on the TCP port for client comminication @@ -100,6 +107,7 @@ private: */ static void* startTCPServerThread(void *this_pointer); + /** * Thread started which is a TCP server * Called by start() @@ -261,6 +269,10 @@ private: /** size of one frame*/ int tenGigaEnable; + /** port number */ + int portNumber; + + protected: /** Socket */ MySocketTCP* socket;