From 9d5848d0d69af14d6c86f308f3a5d0f6416b2d0a Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 15 May 2019 09:12:14 +0200 Subject: [PATCH 01/21] inprogress --- .../include/slsReceiverTCPIPInterface.h | 4 +-- .../src/slsReceiverTCPIPInterface.cpp | 31 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 00431f8f8..b83b73cfe 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -11,7 +11,7 @@ class MySocketTCP; class ServerInterface; class slsReceiverImplementation; - +#include "ServerSocket.h" /** @@ -113,7 +113,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int function_table(); /** Decodes Function */ - int decode_function(); + int decode_function(sls::DataSocket &socket); /** function not implemented for specific detector */ void functionNotImplemented(); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 28a2f820f..fc8c0a444 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -5,6 +5,7 @@ #include "slsReceiverTCPIPInterface.h" #include "MySocketTCP.h" +#include "ServerSocket.h" #include "ServerInterface.h" #include "slsReceiver.h" #include "slsReceiverImplementation.h" @@ -12,11 +13,10 @@ #include "versionAPI.h" #include -#include //EXIT #include #include #include -#include //unique_ptr +#include #include #include #include @@ -24,14 +24,10 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { stop(); - if(mySock) { - delete mySock; - mySock=nullptr; - } - - delete interface; - - delete receiver; + delete mySock; + mySock=nullptr; + delete interface; + delete receiver; } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn): @@ -79,9 +75,7 @@ int slsReceiverTCPIPInterface::start(){ return FAIL; } tcpThreadCreated = true; - //#ifdef VERYVERBOSE FILE_LOG(logDEBUG) << "TCP Server thread created successfully."; - //#endif return OK; } @@ -142,10 +136,13 @@ void slsReceiverTCPIPInterface::startTCPServer(){ int ret = OK; while(true) { - if(mySock->Connect() >= 0){ - ret = decode_function(); - mySock->Disconnect(); - } + auto server = sls::ServerSocket(portNumber); + auto socket = server.accept(); + ret = decode_function(socket); + // if(mySock->Connect() >= 0){ + // ret = decode_function(); + // mySock->Disconnect(); + // } //if tcp command was to exit server if(ret == GOODBYE){ @@ -242,7 +239,7 @@ int slsReceiverTCPIPInterface::function_table(){ -int slsReceiverTCPIPInterface::decode_function(){ +int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){ ret = FAIL; int n = mySock->ReceiveDataOnly(&fnum,sizeof(fnum)); if (n <= 0) { From 8f8d565e4eeaa52d4cb642475913ebd97e6ba122 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 15 May 2019 10:09:54 +0200 Subject: [PATCH 02/21] work --- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 36c2ea220..021cb1f36 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -243,7 +243,8 @@ int slsReceiverTCPIPInterface::function_table(){ int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){ ret = FAIL; - int n = mySock->ReceiveDataOnly(&fnum,sizeof(fnum)); + // int n = mySock->ReceiveDataOnly(&fnum,sizeof(fnum)); + int n = socket.receiveData(&fnum, sizeof(fnum)); if (n <= 0) { FILE_LOG(logDEBUG3) << "Could not read socket. " "Received " << n << " bytes," << From 40c2d9f760d415136be4ef9e3bfe552d16631e8c Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 15 May 2019 12:17:32 +0200 Subject: [PATCH 03/21] try for accept --- .../include/slsReceiverTCPIPInterface.h | 4 +- .../src/slsReceiverTCPIPInterface.cpp | 104 ++++++++++-------- slsSupportLib/include/DataSocket.h | 2 + slsSupportLib/include/logger.h | 4 +- slsSupportLib/src/DataSocket.cpp | 16 ++- slsSupportLib/src/ServerSocket.cpp | 4 +- 6 files changed, 83 insertions(+), 51 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index b83b73cfe..d3f6851cb 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -126,7 +126,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { void validate(T arg, T retval, std::string modename, numberMode hex); /** Unrecognized Function */ - int M_nofunc(); + int M_nofunc(sls::DataSocket & socket); @@ -386,6 +386,8 @@ protected: /** Socket */ MySocketTCP* mySock; + std::unique_ptr server{nullptr}; + /** client interface */ ServerInterface* interface; }; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 021cb1f36..7446dd801 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -55,13 +55,13 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn): // create socket portNumber = (pn > 0 ? pn : DEFAULT_PORTNO + 2); - MySocketTCP* m = new MySocketTCP(portNumber); - mySock = m; - interface = new ServerInterface(mySock, -1, "Receiver"); + // MySocketTCP* m = new MySocketTCP(portNumber); + // mySock = m; + // interface = new ServerInterface(mySock, -1, "Receiver"); //initialize variables - strcpy(mySock->lastClientIP,"none"); - strcpy(mySock->thisClientIP,"none1"); + // strcpy(mySock->lastClientIP,"none"); + // strcpy(mySock->thisClientIP,"none1"); memset(mess,0,sizeof(mess)); strcpy(mess,"dummy message"); @@ -86,7 +86,9 @@ void slsReceiverTCPIPInterface::stop(){ if (tcpThreadCreated) { FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber; killTCPServerThread = 1; - if(mySock) mySock->ShutDownSocket(); + // if(mySock) mySock->ShutDownSocket(); + if(server) + server->shutDownSocket(); FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber; pthread_join(TCPServer_thread, nullptr); tcpThreadCreated = false; @@ -131,49 +133,56 @@ void* slsReceiverTCPIPInterface::startTCPServerThread(void *this_pointer){ return this_pointer; } +void slsReceiverTCPIPInterface::startTCPServer() { + FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) + << "]"; + ; + FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port " + << portNumber << std::endl; + int ret = OK; -void slsReceiverTCPIPInterface::startTCPServer(){ - FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) << "]";; - FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << std::endl; - int ret = OK; + server = sls::make_unique(portNumber); + while (true) { - while(true) { - auto server = sls::ServerSocket(portNumber); - auto socket = server.accept(); - ret = decode_function(socket); - // if(mySock->Connect() >= 0){ - // ret = decode_function(); - // mySock->Disconnect(); - // } + try { + auto socket = server->accept(); + ret = decode_function(socket); + // if(mySock->Connect() >= 0){ + // ret = decode_function(); + // mySock->Disconnect(); + // } - //if tcp command was to exit server - if(ret == GOODBYE){ - FILE_LOG(logINFO) << "Shutting down UDP Socket"; - if(receiver){ - receiver->shutDownUDPSockets(); - } + // if tcp command was to exit server + if (ret == GOODBYE) { + FILE_LOG(logINFO) << "Shutting down UDP Socket"; + if (receiver) { + receiver->shutDownUDPSockets(); + } - mySock->exitServer(); - FILE_LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) <<"]"; - pthread_exit(nullptr); + mySock->exitServer(); + FILE_LOG(logINFOBLUE) + << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) + << "]"; + pthread_exit(nullptr); + } + }catch(const sls::SocketError& e){ + std::cout << "Accept failed\n"; } - //if user entered exit - if(killTCPServerThread) { - if (ret != GOODBYE) { - if(receiver){ - receiver->shutDownUDPSockets(); - } - } - FILE_LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) <<"]"; - pthread_exit(nullptr); - } - } + // if user entered exit + if (killTCPServerThread) { + if (ret != GOODBYE) { + if (receiver) { + receiver->shutDownUDPSockets(); + } + } + FILE_LOG(logINFOBLUE) + << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) << "]"; + pthread_exit(nullptr); + } + } } - - - int slsReceiverTCPIPInterface::function_table(){ flist[F_EXEC_RECEIVER_COMMAND] = &slsReceiverTCPIPInterface::exec_command; flist[F_EXIT_RECEIVER] = &slsReceiverTCPIPInterface::exit_server; @@ -257,7 +266,7 @@ int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){ if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) { FILE_LOG(logERROR) << "Unknown function enum " << fnum; - ret = (this->M_nofunc)(); + ret = (this->M_nofunc)(socket); } else{ FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " " "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") " @@ -301,18 +310,23 @@ void slsReceiverTCPIPInterface::validate(T arg, T retval, std::string modename, } } -int slsReceiverTCPIPInterface::M_nofunc(){ +int slsReceiverTCPIPInterface::M_nofunc(sls::DataSocket &socket){ ret = FAIL; memset(mess, 0, sizeof(mess)); // to receive any arguments + + socket.setReceiveTimeout(500); int n = 1; while (n > 0) - n = mySock->ReceiveDataOnly(mess, MAX_STR_LENGTH); + n = socket.read(mess, MAX_STR_LENGTH); sprintf(mess,"Unrecognized Function enum %d. Please do not proceed.\n", fnum); FILE_LOG(logERROR) << mess; - return interface->Server_SendResult(false, ret, nullptr, 0, mess); + socket.sendData(&ret, sizeof(ret)); + socket.sendData(mess, sizeof(mess)); + return 0; + // return interface->Server_SendResult(false, ret, nullptr, 0, mess); } diff --git a/slsSupportLib/include/DataSocket.h b/slsSupportLib/include/DataSocket.h index a4ad27fe1..a9e7dcc6e 100755 --- a/slsSupportLib/include/DataSocket.h +++ b/slsSupportLib/include/DataSocket.h @@ -20,7 +20,9 @@ class DataSocket { } size_t sendData(const void *buffer, size_t size); size_t receiveData(void *buffer, size_t size); + size_t read(void *buffer, size_t size); int setTimeOut(int t_seconds); + int setReceiveTimeout(int us); void close(); void shutDownSocket(); diff --git a/slsSupportLib/include/logger.h b/slsSupportLib/include/logger.h index 8de0c2f49..541da95b0 100755 --- a/slsSupportLib/include/logger.h +++ b/slsSupportLib/include/logger.h @@ -17,8 +17,8 @@ #endif #ifndef FILELOG_MAX_LEVEL -#define FILELOG_MAX_LEVEL logINFO -// #define FILELOG_MAX_LEVEL logDEBUG5 +// #define FILELOG_MAX_LEVEL logINFO +#define FILELOG_MAX_LEVEL logDEBUG5 #endif diff --git a/slsSupportLib/src/DataSocket.cpp b/slsSupportLib/src/DataSocket.cpp index 1af3db89f..3da9cbf75 100755 --- a/slsSupportLib/src/DataSocket.cpp +++ b/slsSupportLib/src/DataSocket.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace sls { @@ -43,12 +44,25 @@ size_t DataSocket::receiveData(void *buffer, size_t size) { size_t dataRead = 0; while (dataRead < size) { dataRead += - read(getSocketId(), reinterpret_cast(buffer) + dataRead, + ::read(getSocketId(), reinterpret_cast(buffer) + dataRead, size - dataRead); } return dataRead; } +size_t DataSocket::read(void *buffer, size_t size){ + return ::read(getSocketId(), reinterpret_cast(buffer), size); +} + +int DataSocket::setReceiveTimeout(int us) { + timeval t{}; + t.tv_sec = 0; + t.tv_usec = us; + return ::setsockopt(getSocketId(), SOL_SOCKET, SO_RCVTIMEO, &t, + sizeof(struct timeval)); +} + + size_t DataSocket::sendData(const void *buffer, size_t size) { size_t dataSent = 0; while (dataSent < size) { diff --git a/slsSupportLib/src/ServerSocket.cpp b/slsSupportLib/src/ServerSocket.cpp index 0876c212c..7f07b49fc 100755 --- a/slsSupportLib/src/ServerSocket.cpp +++ b/slsSupportLib/src/ServerSocket.cpp @@ -27,7 +27,7 @@ ServerSocket::ServerSocket(int port) if (bind(getSocketId(), (struct sockaddr *)&serverAddr, sizeof(serverAddr)) != 0) { close(); - throw std::runtime_error("Server ERROR: cannot bind socket"); + throw sls::SocketError("Server ERROR: cannot bind socket"); } if (listen(getSocketId(), DEFAULT_BACKLOG) != 0) { close(); @@ -41,7 +41,7 @@ DataSocket ServerSocket::accept() { int newSocket = ::accept(getSocketId(), (struct sockaddr *)&clientAddr, &addr_size); if (newSocket == -1) { - throw std::runtime_error("Server ERROR: socket accept failed\n"); + throw sls::SocketError("Server ERROR: socket accept failed\n"); } inet_ntop(AF_INET, &(clientAddr.sin_addr), &thisClient_.front(), INET_ADDRSTRLEN); From e252b8e0e9ebcb336ff2c3175399f35553063ce5 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 15 May 2019 17:51:48 +0200 Subject: [PATCH 04/21] receiver socket --- .../include/slsReceiverTCPIPInterface.h | 122 ++-- .../src/slsReceiverTCPIPInterface.cpp | 563 +++++++++--------- slsSupportLib/CMakeLists.txt | 1 + slsSupportLib/include/ServerInterface2.h | 28 + slsSupportLib/include/ServerSocket.h | 17 +- slsSupportLib/include/network_utils.h | 1 + slsSupportLib/src/ServerInterface2.cpp | 32 + slsSupportLib/src/ServerSocket.cpp | 17 +- slsSupportLib/src/network_utils.cpp | 1 + 9 files changed, 440 insertions(+), 342 deletions(-) create mode 100644 slsSupportLib/include/ServerInterface2.h create mode 100644 slsSupportLib/src/ServerInterface2.cpp diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index d3f6851cb..292b74bbd 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -113,7 +113,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int function_table(); /** Decodes Function */ - int decode_function(sls::DataSocket &socket); + int decode_function(sls::ServerInterface2 &socket); /** function not implemented for specific detector */ void functionNotImplemented(); @@ -126,177 +126,177 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { void validate(T arg, T retval, std::string modename, numberMode hex); /** Unrecognized Function */ - int M_nofunc(sls::DataSocket & socket); + int M_nofunc(sls::ServerInterface2 & socket); /** Execute command */ - int exec_command(); + int exec_command(sls::ServerInterface2 &socket); /** Exit Receiver Server */ - int exit_server(); + int exit_server(sls::ServerInterface2 &socket); /** Locks Receiver */ - int lock_receiver(); + int lock_receiver(sls::ServerInterface2 &socket); /** Get Last Client IP*/ - int get_last_client_ip(); + int get_last_client_ip(sls::ServerInterface2 &socket); /** Set port */ - int set_port(); + int set_port(sls::ServerInterface2 &socket); /** Updates Client if different clients connect */ - int update_client(); + int update_client(sls::ServerInterface2 &socket); /** Sends the updated parameters to client */ - int send_update(); + int send_update(sls::ServerInterface2 &socket); /** get version, calls get_version */ - int get_id(); + int get_id(sls::ServerInterface2 &socket); /** Set detector type */ - int set_detector_type(); + int set_detector_type(sls::ServerInterface2 &socket); /** set detector hostname */ - int set_detector_hostname(); + int set_detector_hostname(sls::ServerInterface2 &socket); /** set roi */ - int set_roi(); + int set_roi(sls::ServerInterface2 &socket); /** Set up UDP Details */ - int setup_udp(); + int setup_udp(sls::ServerInterface2 &socket); /** set acquisition period, frame number etc */ - int set_timer(); + int set_timer(sls::ServerInterface2 &socket); /** set dynamic range */ - int set_dynamic_range(); + int set_dynamic_range(sls::ServerInterface2 &socket); /** Sets the receiver streaming frequency */ - int set_streaming_frequency(); + int set_streaming_frequency(sls::ServerInterface2 &socket); /** Gets receiver status */ - int get_status(); + int get_status(sls::ServerInterface2 &socket); /** Start Receiver - starts listening to udp packets from detector */ - int start_receiver(); + int start_receiver(sls::ServerInterface2 &socket); /** Stop Receiver - stops listening to udp packets from detector*/ - int stop_receiver(); + int stop_receiver(sls::ServerInterface2 &socket); /** Set File path */ - int set_file_dir(); + int set_file_dir(sls::ServerInterface2 &socket); /** Set File name without frame index, file index and extension */ - int set_file_name(); + int set_file_name(sls::ServerInterface2 &socket); /** Set File index */ - int set_file_index(); + int set_file_index(sls::ServerInterface2 &socket); /** Gets frame index for each acquisition */ - int get_frame_index(); + int get_frame_index(sls::ServerInterface2 &socket); /** Gets Total Frames Caught */ - int get_frames_caught(); + int get_frames_caught(sls::ServerInterface2 &socket); /** Resets Total Frames Caught */ - int reset_frames_caught(); + int reset_frames_caught(sls::ServerInterface2 &socket); /** Enable File Write*/ - int enable_file_write(); + int enable_file_write(sls::ServerInterface2 &socket); /** Enable Master File Write */ - int enable_master_file_write(); + int enable_master_file_write(sls::ServerInterface2 &socket); /** enable compression */ - int enable_compression(); + int enable_compression(sls::ServerInterface2 &socket); /** enable overwrite */ - int enable_overwrite(); + int enable_overwrite(sls::ServerInterface2 &socket); /** enable 10Gbe */ - int enable_tengiga(); + int enable_tengiga(sls::ServerInterface2 &socket); /** set fifo depth */ - int set_fifo_depth(); + int set_fifo_depth(sls::ServerInterface2 &socket); /** activate/ deactivate */ - int set_activate(); + int set_activate(sls::ServerInterface2 &socket); /* Set the data stream enable */ - int set_data_stream_enable(); + int set_data_stream_enable(sls::ServerInterface2 &socket); /** Sets the steadming timer when frequency is set to 0 */ - int set_streaming_timer(); + int set_streaming_timer(sls::ServerInterface2 &socket); /** enable flipped data */ - int set_flipped_data(); + int set_flipped_data(sls::ServerInterface2 &socket); /** set file format */ - int set_file_format(); + int set_file_format(sls::ServerInterface2 &socket); /** set position id */ - int set_detector_posid(); + int set_detector_posid(sls::ServerInterface2 &socket); /** set multi detector size */ - int set_multi_detector_size(); + int set_multi_detector_size(sls::ServerInterface2 &socket); /** set streaming port */ - int set_streaming_port(); + int set_streaming_port(sls::ServerInterface2 &socket); /** set streaming source ip */ - int set_streaming_source_ip(); + int set_streaming_source_ip(sls::ServerInterface2 &socket); /** set silent mode */ - int set_silent_mode(); + int set_silent_mode(sls::ServerInterface2 &socket); /** enable gap pixels */ - int enable_gap_pixels(); + int enable_gap_pixels(sls::ServerInterface2 &socket); /** restream stop packet */ - int restream_stop(); + int restream_stop(sls::ServerInterface2 &socket); /** set additional json header */ - int set_additional_json_header(); + int set_additional_json_header(sls::ServerInterface2 &socket); /** get additional json header */ - int get_additional_json_header(); + int get_additional_json_header(sls::ServerInterface2 &socket); /** set udp socket buffer size */ - int set_udp_socket_buffer_size(); + int set_udp_socket_buffer_size(sls::ServerInterface2 &socket); /** get real udp socket buffer size */ - int get_real_udp_socket_buffer_size(); + int get_real_udp_socket_buffer_size(sls::ServerInterface2 &socket); /** set frames per file */ - int set_frames_per_file(); + int set_frames_per_file(sls::ServerInterface2 &socket); /** check version compatibility */ - int check_version_compatibility(); + int check_version_compatibility(sls::ServerInterface2 &socket); /** set frame discard policy */ - int set_discard_policy(); + int set_discard_policy(sls::ServerInterface2 &socket); /** set partial frame padding enable*/ - int set_padding_enable(); + int set_padding_enable(sls::ServerInterface2 &socket); /** set deactivated receiver padding enable */ - int set_deactivated_padding_enable(); + int set_deactivated_padding_enable(sls::ServerInterface2 &socket); /** set readout flags */ - int set_readout_flags(); + int set_readout_flags(sls::ServerInterface2 &socket); /** set adc mask */ - int set_adc_mask(); + int set_adc_mask(sls::ServerInterface2 &socket); /** set receiver dbit list */ - int set_dbit_list(); + int set_dbit_list(sls::ServerInterface2 &socket); /** get receiver dbit list */ - int get_dbit_list(); + int get_dbit_list(sls::ServerInterface2 &socket); /** set dbit offset */ - int set_dbit_offset(); + int set_dbit_offset(sls::ServerInterface2 &socket); /** detector type */ @@ -306,7 +306,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { slsReceiverImplementation *receiver; /** Function List */ - int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(); + int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); /** Message */ char mess[MAX_STR_LENGTH]; @@ -390,4 +390,8 @@ protected: /** client interface */ ServerInterface* interface; + + private: + int VerifyLock(int &ret, char *mess); + int VerifyLockAndIdle(int &ret, char *mess, int fnum); }; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 7446dd801..b620fb094 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -145,8 +145,15 @@ void slsReceiverTCPIPInterface::startTCPServer() { while (true) { try { + std::cout << "<--------- hej\n"; auto socket = server->accept(); + std::cout << "<--------- hej2\n"; + socket.setTimeOut(1); + socket.setReceiveTimeout(1000); + std::cout << "<--------- hej3\n"; ret = decode_function(socket); + std::cout << "<--------- hej4\n"; + socket.close(); // if(mySock->Connect() >= 0){ // ret = decode_function(); // mySock->Disconnect(); @@ -250,10 +257,11 @@ int slsReceiverTCPIPInterface::function_table(){ -int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){ +int slsReceiverTCPIPInterface::decode_function(sls::ServerInterface2 &socket){ ret = FAIL; - // int n = mySock->ReceiveDataOnly(&fnum,sizeof(fnum)); - int n = socket.receiveData(&fnum, sizeof(fnum)); + std::cout << "<------ decode 1\n"; + int n = socket.read(&fnum, sizeof(fnum)); + std::cout << "<------ decode 2\n"; if (n <= 0) { FILE_LOG(logDEBUG3) << "Could not read socket. " "Received " << n << " bytes," << @@ -271,7 +279,7 @@ int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){ FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " " "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") " "located at " << flist[fnum]; - ret = (this->*flist[fnum])(); + ret = (this->*flist[fnum])(socket); if (ret == FAIL) { FILE_LOG(logDEBUG1) << "Failed to execute function = " << fnum << " (" @@ -310,7 +318,7 @@ void slsReceiverTCPIPInterface::validate(T arg, T retval, std::string modename, } } -int slsReceiverTCPIPInterface::M_nofunc(sls::DataSocket &socket){ +int slsReceiverTCPIPInterface::M_nofunc(sls::ServerInterface2 &socket){ ret = FAIL; memset(mess, 0, sizeof(mess)); @@ -323,29 +331,43 @@ int slsReceiverTCPIPInterface::M_nofunc(sls::DataSocket &socket){ sprintf(mess,"Unrecognized Function enum %d. Please do not proceed.\n", fnum); FILE_LOG(logERROR) << mess; - socket.sendData(&ret, sizeof(ret)); - socket.sendData(mess, sizeof(mess)); - return 0; - // return interface->Server_SendResult(false, ret, nullptr, 0, mess); + return socket.sendResult(false, ret, nullptr, 0, mess); } +int slsReceiverTCPIPInterface::VerifyLock(int &ret, char *mess) { + if (server->getThisClient() != server->getLockedBy() && lockStatus) { + ret = FAIL; + sprintf(mess, "Receiver locked\n"); + FILE_LOG(logERROR) << mess; + } + return ret; +} +int slsReceiverTCPIPInterface::VerifyLockAndIdle(int &ret, char *mess, int fnum) { + VerifyLock(ret, mess); + if (ret == FAIL) + return ret; + if (receiver->getStatus() != IDLE) { + sprintf(mess, "Can not execute %s when receiver is not idle\n", + getFunctionNameFromEnum((enum detFuncs)fnum)); + } + ret = OK; + return ret; +} - -int slsReceiverTCPIPInterface::exec_command() { +int slsReceiverTCPIPInterface::exec_command(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); - char cmd[MAX_STR_LENGTH] = {0}; - char retval[MAX_STR_LENGTH] = {0}; + char cmd[MAX_STR_LENGTH]{}; + char retval[MAX_STR_LENGTH]{}; // get args, return if socket crashed - if (interface->Server_ReceiveArg(ret, mess, cmd, MAX_STR_LENGTH) == FAIL) + if (socket.receiveArg(ret, mess, cmd, MAX_STR_LENGTH) == FAIL) return FAIL; FILE_LOG(logINFO) << "Executing command (" << cmd << ")"; // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { - + if (VerifyLock(ret, mess) == OK) { const size_t tempsize = 256; std::array temp; std::string sresult; @@ -364,56 +386,55 @@ int slsReceiverTCPIPInterface::exec_command() { FILE_LOG(logINFO) << "Result of cmd (" << cmd << "):\n" << retval; } } - return interface->Server_SendResult(false, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(false, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::exit_server() { +int slsReceiverTCPIPInterface::exit_server(sls::ServerInterface2 &socket) { FILE_LOG(logINFO) << "Closing server"; ret = OK; memset(mess, 0, sizeof(mess)); - interface->Server_SendResult(false, ret, nullptr, 0); + socket.sendResult(false, ret, nullptr, 0, nullptr); return GOODBYE; } +int slsReceiverTCPIPInterface::lock_receiver(sls::ServerInterface2 &socket) { + ret = OK; + memset(mess, 0, sizeof(mess)); + int lock = 0; + // get args, return if socket crashed + if (socket.receiveArg(ret, mess, &lock, sizeof(lock)) == FAIL) + return FAIL; + FILE_LOG(logDEBUG1) << "Locking Server to " << lock; -int slsReceiverTCPIPInterface::lock_receiver() { + // execute action + if (lock >= 0) { + if (!lockStatus || (server->getLockedBy() == server->getThisClient())) { + lockStatus = lock; + lock ? server->setLockedBy(server->getThisClient()) + : server->setLockedBy(sls::IpAddr{}); + } else{ + sprintf(mess, "Receiver locked\n"); + FILE_LOG(logERROR) << mess; + } + + } + return socket.sendResult(true, ret, &lockStatus, + sizeof(lockStatus), mess); +} + +int slsReceiverTCPIPInterface::get_last_client_ip(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); - int lock = 0; - - // get args, return if socket crashed - if (interface->Server_ReceiveArg(ret, mess, &lock, sizeof(lock)) == FAIL) - return FAIL; - FILE_LOG(logDEBUG1) << "Locking Server to " << lock; - - // execute action - if (lock >= 0) { - if (!lockStatus || // if it was unlocked, anyone can lock - (!strcmp(mySock->lastClientIP,mySock->thisClientIP)) || // if it was locked, need same ip - (!strcmp(mySock->lastClientIP,"none"))) // if it was locked, must be by "none" - { - lockStatus = lock; - strcpy(mySock->lastClientIP,mySock->thisClientIP); - } else - interface->Server_LockedError(ret, mess); - } - return interface->Server_SendResult(true, ret, &lockStatus,sizeof(lockStatus), mess); + auto ip = server->getLastClient().str(); + return socket.sendResult(true, ret, &ip.front(), ip.length()+1, nullptr); } -int slsReceiverTCPIPInterface::get_last_client_ip() { - ret = OK; - memset(mess, 0, sizeof(mess)); - return interface->Server_SendResult(true, ret,mySock->lastClientIP, sizeof(mySock->lastClientIP)); -} - - - -int slsReceiverTCPIPInterface::set_port() { +int slsReceiverTCPIPInterface::set_port(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int p_number = -1; @@ -421,11 +442,11 @@ int slsReceiverTCPIPInterface::set_port() { char oldLastClientIP[INET_ADDRSTRLEN] = {0}; // get args, return if socket crashed - if (interface->Server_ReceiveArg(ret, mess, &p_number, sizeof(p_number)) == FAIL) + if (socket.receiveArg(ret, mess, &p_number, sizeof(p_number)) == FAIL) return FAIL; // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { + if (VerifyLock(ret, mess) == OK) { // port number too low if (p_number < 1024) { ret = FAIL; @@ -451,7 +472,7 @@ int slsReceiverTCPIPInterface::set_port() { } } - interface->Server_SendResult(true, ret, &p_number,sizeof(p_number), mess); + socket.sendResult(true, ret, &p_number,sizeof(p_number), mess); // delete old socket if(ret != FAIL){ mySock->Disconnect(); @@ -464,107 +485,106 @@ int slsReceiverTCPIPInterface::set_port() { -int slsReceiverTCPIPInterface::update_client() { +int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); - - interface->Server_SendResult(false, ret, nullptr, 0, mess); + socket.receiveArg(ret, mess, nullptr, 0); + socket.sendResult(false, ret, nullptr, 0, mess); if (ret == FAIL) return ret; // update - return send_update(); + return send_update(socket); } -int slsReceiverTCPIPInterface::send_update() { +int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) { int n = 0; int i32 = -1; char cstring[MAX_STR_LENGTH] = {0}; - n += mySock->SendDataOnly(mySock->lastClientIP,sizeof(mySock->lastClientIP)); + n += socket.sendData(mySock->lastClientIP,sizeof(mySock->lastClientIP)); // filepath strcpy(cstring, receiver->getFilePath().c_str()); - n += mySock->SendDataOnly(cstring, sizeof(cstring)); + n += socket.sendData(cstring, sizeof(cstring)); // filename strcpy(cstring, receiver->getFileName().c_str()); - n += mySock->SendDataOnly(cstring, sizeof(cstring)); + n += socket.sendData(cstring, sizeof(cstring)); // index i32=receiver->getFileIndex(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); //file format i32=(int)receiver->getFileFormat(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); //frames per file i32=(int)receiver->getFramesPerFile(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); //frame discard policy i32=(int)receiver->getFrameDiscardPolicy(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); //frame padding i32=(int)receiver->getFramePaddingEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // file write enable i32=(int)receiver->getFileWriteEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // master file write enable i32=(int)receiver->getMasterFileWriteEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // file overwrite enable i32=(int)receiver->getOverwriteEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // gap pixels i32=(int)receiver->getGapPixelsEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // streaming frequency i32=(int)receiver->getStreamingFrequency(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // streaming port i32=(int)receiver->getStreamingPort(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // streaming source ip strcpy(cstring, receiver->getStreamingSourceIP().c_str()); - n += mySock->SendDataOnly(cstring, sizeof(cstring)); + n += socket.sendData(cstring, sizeof(cstring)); // additional json header strcpy(cstring, receiver->getAdditionalJsonHeader().c_str()); - n += mySock->SendDataOnly(cstring, sizeof(cstring)); + n += socket.sendData(cstring, sizeof(cstring)); // data streaming enable i32=(int)receiver->getDataStreamEnable(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // activate i32=(int)receiver->getActivate(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // deactivated padding enable i32=(int)receiver->getDeactivatedPadding(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // silent mode i32=(int)receiver->getSilentMode(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); // dbit list { @@ -572,48 +592,51 @@ int slsReceiverTCPIPInterface::send_update() { int retvalsize = list.size(); int retval[retvalsize]; std::copy(std::begin(list), std::end(list), retval); - mySock->SendDataOnly(&retvalsize, sizeof(retvalsize)); - mySock->SendDataOnly(retval, sizeof(retval)); + socket.sendData(&retvalsize, sizeof(retvalsize)); + socket.sendData(retval, sizeof(retval)); } // dbit offset i32=receiver->getDbitOffset(); - n += mySock->SendDataOnly(&i32, sizeof(i32)); + n += socket.sendData(&i32, sizeof(i32)); - if (!lockStatus) - strcpy(mySock->lastClientIP, mySock->thisClientIP); + // if (!lockStatus) + // strcpy(mySock->lastClientIP, mySock->thisClientIP); return OK; } -int slsReceiverTCPIPInterface::get_id(){ +int slsReceiverTCPIPInterface::get_id(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int64_t retval = getReceiverVersion(); - return interface->Server_SendResult(true, ret, &retval, sizeof(retval)); + return socket.sendResult(true, ret, &retval, sizeof(retval)); } -int slsReceiverTCPIPInterface::set_detector_type(){ +int slsReceiverTCPIPInterface::set_detector_type(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); detectorType arg = GENERIC; detectorType retval = GENERIC; // get args, return if socket crashed - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; // set if (arg >= 0) { // if object exists, verify unlocked and idle, else only verify lock (connecting first time) - if (receiver == nullptr) - interface->Server_VerifyLock(ret, mess, lockStatus); - else - interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum); + if (receiver == nullptr){ + VerifyLock(ret, mess); + } + else{ + VerifyLockAndIdle(ret, mess, fnum); + } + if (ret == OK) { switch(arg) { case GOTTHARD: @@ -646,9 +669,9 @@ int slsReceiverTCPIPInterface::set_detector_type(){ if(rawDataModifyReadyCallBack) receiver->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack,pRawDataReady); - // client has started updating receiver, update ip - if (!lockStatus) - strcpy(mySock->lastClientIP, mySock->thisClientIP); + // // client has started updating receiver, update ip + // if (!lockStatus) + // strcpy(mySock->lastClientIP, mySock->thisClientIP); } } @@ -656,19 +679,19 @@ int slsReceiverTCPIPInterface::set_detector_type(){ //get retval = myDetectorType; validate((int)arg, (int)retval, std::string("set detector type"), DEC); - return interface->Server_SendResult(false, ret, &retval, sizeof(retval), mess); + return socket.sendResult(false, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_detector_hostname() { +int slsReceiverTCPIPInterface::set_detector_hostname(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char hostname[MAX_STR_LENGTH] = {0}; char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, hostname,MAX_STR_LENGTH, true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, hostname,MAX_STR_LENGTH) == FAIL) return FAIL; // base object not null @@ -676,7 +699,7 @@ int slsReceiverTCPIPInterface::set_detector_hostname() { // set if (strlen(hostname)) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) + if (VerifyLockAndIdle(ret, mess, fnum) == OK) receiver->setDetectorHostname(hostname); } // get @@ -689,12 +712,12 @@ int slsReceiverTCPIPInterface::set_detector_hostname() { } } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::set_roi() { +int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int narg = -1; @@ -731,30 +754,30 @@ int slsReceiverTCPIPInterface::set_roi() { else { // only set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) + if (VerifyLockAndIdle(ret, mess, fnum) == OK) ret = receiver->setROI(arg); } arg.clear(); - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::setup_udp(){ +int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); char args[6][MAX_STR_LENGTH] = {{""}, {""}, {""}, {""}, {""}, {""}}; char retvals[2][MAX_STR_LENGTH] = {{""}, {""}}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, args, sizeof(args), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL) return FAIL; // base object not null if (ret == OK) { // only set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { //setup interfaces count int numInterfaces = atoi(args[0]) > 1 ? 2 : 1; @@ -865,19 +888,19 @@ int slsReceiverTCPIPInterface::setup_udp(){ } } } - return interface->Server_SendResult(true, ret, retvals, sizeof(retvals), mess); + return socket.sendResult(true, ret, retvals, sizeof(retvals), mess); } -int slsReceiverTCPIPInterface::set_timer() { +int slsReceiverTCPIPInterface::set_timer(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int64_t index[2] = {-1, -1}; int64_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -887,7 +910,7 @@ int slsReceiverTCPIPInterface::set_timer() { // set if (index[1] >= 0) { // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { + if (VerifyLock(ret, mess) == OK) { switch (index[0]) { case ACQUISITION_TIME: ret = receiver->setAcquisitionTime(index[1]); @@ -970,19 +993,19 @@ int slsReceiverTCPIPInterface::set_timer() { validate((int)index[1], (int)retval, std::string("set timer"), DEC); FILE_LOG(logDEBUG1) << slsDetectorDefs::getTimerType((timerIndex)(index[0])) << ":" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_dynamic_range() { +int slsReceiverTCPIPInterface::set_dynamic_range(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int dr = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &dr, sizeof(dr), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &dr, sizeof(dr)) == FAIL) return FAIL; // base object not null @@ -990,7 +1013,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() { // set if (dr >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting dynamic range: " << dr; bool exists = false; switch (dr) { @@ -1025,19 +1048,19 @@ int slsReceiverTCPIPInterface::set_dynamic_range() { validate(dr, retval, std::string("set dynamic range"), DEC); FILE_LOG(logDEBUG1) << "dynamic range: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_streaming_frequency() { +int slsReceiverTCPIPInterface::set_streaming_frequency(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1045,7 +1068,7 @@ int slsReceiverTCPIPInterface::set_streaming_frequency() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting streaming frequency: " << index; ret = receiver->setStreamingFrequency(index); if(ret == FAIL) { @@ -1058,41 +1081,43 @@ int slsReceiverTCPIPInterface::set_streaming_frequency() { retval = receiver->getStreamingFrequency(); validate(index, retval, std::string("set streaming frequency"), DEC); } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::get_status(){ +int slsReceiverTCPIPInterface::get_status(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); enum runStatus retval = ERROR; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting Status"; + std::cout << "kalas\n"; retval = receiver->getStatus(); + std::cout << "puff\n"; FILE_LOG(logDEBUG1) << "Status:" << runStatusType(retval); } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::start_receiver(){ +int slsReceiverTCPIPInterface::start_receiver(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); // no arg, and check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // receiver is not null if (ret == OK) { // only set // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { + if (VerifyLock(ret, mess) == OK) { // should not be idle enum runStatus s = receiver->getStatus(); if (s != IDLE) { @@ -1108,23 +1133,23 @@ int slsReceiverTCPIPInterface::start_receiver(){ } } } - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::stop_receiver(){ +int slsReceiverTCPIPInterface::stop_receiver(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); // no arg, and check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // receiver is not null if (ret == OK) { // only set // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { + if (VerifyLock(ret, mess) == OK) { if(receiver->getStatus() != IDLE) { FILE_LOG(logDEBUG1) << "Stopping Receiver"; receiver->stopReceiver(); @@ -1139,19 +1164,19 @@ int slsReceiverTCPIPInterface::stop_receiver(){ } } } - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::set_file_dir() { +int slsReceiverTCPIPInterface::set_file_dir(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char fPath[MAX_STR_LENGTH] = {0}; char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, fPath, sizeof(fPath), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, fPath, sizeof(fPath)) == FAIL) return FAIL; // base object not null @@ -1171,19 +1196,19 @@ int slsReceiverTCPIPInterface::set_file_dir() { } else FILE_LOG(logDEBUG1) << "file path:" << retval; } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::set_file_name() { +int slsReceiverTCPIPInterface::set_file_name(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char fName[MAX_STR_LENGTH] = {0}; char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, fName, sizeof(fName), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, fName, sizeof(fName)) == FAIL) return FAIL; // base object not null @@ -1203,19 +1228,19 @@ int slsReceiverTCPIPInterface::set_file_name() { } else FILE_LOG(logDEBUG1) << "file name:" << retval; } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::set_file_index() { +int slsReceiverTCPIPInterface::set_file_index(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1223,7 +1248,7 @@ int slsReceiverTCPIPInterface::set_file_index() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting file index: " << index; receiver->setFileIndex(index); } @@ -1233,76 +1258,76 @@ int slsReceiverTCPIPInterface::set_file_index() { validate(index, retval, std::string("set file index"), DEC); FILE_LOG(logDEBUG1) << "file index:" << retval; } - return interface->Server_SendResult(true, ret, &retval,sizeof(retval), mess); + return socket.sendResult(true, ret, &retval,sizeof(retval), mess); } -int slsReceiverTCPIPInterface::get_frame_index(){ +int slsReceiverTCPIPInterface::get_frame_index(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int retval = -1; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting frame index"; retval = receiver->getAcquisitionIndex(); FILE_LOG(logDEBUG1) << "frame index:" << retval; } - return interface->Server_SendResult(true, ret, &retval,sizeof(retval), mess); + return socket.sendResult(true, ret, &retval,sizeof(retval), mess); } -int slsReceiverTCPIPInterface::get_frames_caught(){ +int slsReceiverTCPIPInterface::get_frames_caught(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int retval = -1; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting frames caught"; retval = receiver->getTotalFramesCaught(); FILE_LOG(logDEBUG1) << "frames caught:" << retval; } - return interface->Server_SendResult(true, ret, &retval,sizeof(retval), mess); + return socket.sendResult(true, ret, &retval,sizeof(retval), mess); } -int slsReceiverTCPIPInterface::reset_frames_caught(){ +int slsReceiverTCPIPInterface::reset_frames_caught(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); // no arg, and check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // receiver is not null if (ret == OK) { // only set // verify if receiver is unlocked - if (interface->Server_VerifyLock(ret, mess, lockStatus) == OK) { + if (VerifyLock(ret, mess) == OK) { FILE_LOG(logDEBUG1) << "Reset frames caught"; receiver->resetAcquisitionCount(); } } - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::enable_file_write(){ +int slsReceiverTCPIPInterface::enable_file_write(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int enable = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) return FAIL; // base object not null @@ -1310,7 +1335,7 @@ int slsReceiverTCPIPInterface::enable_file_write(){ // set if (enable >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting File write enable:" << enable; receiver->setFileWriteEnable(enable); } @@ -1320,19 +1345,19 @@ int slsReceiverTCPIPInterface::enable_file_write(){ validate(enable, retval, std::string("set file write enable"), DEC); FILE_LOG(logDEBUG1) << "file write enable:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::enable_master_file_write(){ +int slsReceiverTCPIPInterface::enable_master_file_write(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int enable = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) return FAIL; // base object not null @@ -1340,7 +1365,7 @@ int slsReceiverTCPIPInterface::enable_master_file_write(){ // set if (enable >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting Master File write enable:" << enable; receiver->setMasterFileWriteEnable(enable); } @@ -1350,18 +1375,18 @@ int slsReceiverTCPIPInterface::enable_master_file_write(){ validate(enable, retval, std::string("set master file write enable"), DEC); FILE_LOG(logDEBUG1) << "master file write enable:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::enable_overwrite() { +int slsReceiverTCPIPInterface::enable_overwrite(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1369,7 +1394,7 @@ int slsReceiverTCPIPInterface::enable_overwrite() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting File overwrite enable:" << index; receiver->setOverwriteEnable(index); } @@ -1379,19 +1404,19 @@ int slsReceiverTCPIPInterface::enable_overwrite() { validate(index, retval, std::string("set file overwrite enable"), DEC); FILE_LOG(logDEBUG1) << "file overwrite enable:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::enable_tengiga() { +int slsReceiverTCPIPInterface::enable_tengiga(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int val = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &val, sizeof(val), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &val, sizeof(val)) == FAIL) return FAIL; if (myDetectorType != EIGER && myDetectorType != CHIPTESTBOARD && myDetectorType != MOENCH) @@ -1402,7 +1427,7 @@ int slsReceiverTCPIPInterface::enable_tengiga() { // set if (val >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting 10GbE:" << val; ret = receiver->setTenGigaEnable(val); } @@ -1412,19 +1437,19 @@ int slsReceiverTCPIPInterface::enable_tengiga() { validate(val, retval, std::string("set 10GbE"), DEC); FILE_LOG(logDEBUG1) << "10Gbe:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_fifo_depth() { +int slsReceiverTCPIPInterface::set_fifo_depth(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int value = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &value, sizeof(value), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &value, sizeof(value)) == FAIL) return FAIL; // base object not null @@ -1432,7 +1457,7 @@ int slsReceiverTCPIPInterface::set_fifo_depth() { // set if (value >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting fifo depth:" << value; ret = receiver->setFifoDepth(value); if (ret == FAIL) { @@ -1446,19 +1471,19 @@ int slsReceiverTCPIPInterface::set_fifo_depth() { validate(value, retval, std::string("set fifo depth"), DEC); FILE_LOG(logDEBUG1) << "fifo depth:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_activate() { +int slsReceiverTCPIPInterface::set_activate(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int enable = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) return FAIL; if (myDetectorType != EIGER) @@ -1469,7 +1494,7 @@ int slsReceiverTCPIPInterface::set_activate() { // set if (enable >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting activate:" << enable; receiver->setActivate(enable > 0 ? true : false); } @@ -1479,19 +1504,19 @@ int slsReceiverTCPIPInterface::set_activate() { validate(enable, retval, std::string("set activate"), DEC); FILE_LOG(logDEBUG1) << "Activate: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_data_stream_enable(){ +int slsReceiverTCPIPInterface::set_data_stream_enable(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1499,7 +1524,7 @@ int slsReceiverTCPIPInterface::set_data_stream_enable(){ // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting data stream enable:" << index; ret = receiver->setDataStreamEnable(index); } @@ -1509,19 +1534,19 @@ int slsReceiverTCPIPInterface::set_data_stream_enable(){ validate(index, retval, std::string("set data stream enable"), DEC); FILE_LOG(logDEBUG1) << "data streaming enable:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_streaming_timer(){ +int slsReceiverTCPIPInterface::set_streaming_timer(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1529,7 +1554,7 @@ int slsReceiverTCPIPInterface::set_streaming_timer(){ // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting streaming timer:" << index; receiver->setStreamingTimer(index); } @@ -1539,19 +1564,19 @@ int slsReceiverTCPIPInterface::set_streaming_timer(){ validate(index, retval, std::string("set data stream timer"), DEC); FILE_LOG(logDEBUG1) << "Streaming timer:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_flipped_data(){ +int slsReceiverTCPIPInterface::set_flipped_data(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int args[2] = {0,-1}; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, args, sizeof(args), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL) return FAIL; if (myDetectorType != EIGER) @@ -1562,7 +1587,7 @@ int slsReceiverTCPIPInterface::set_flipped_data(){ // set if (args[1] >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting flipped data:" << args[1]; receiver->setFlippedData(args[0],args[1]); } @@ -1572,19 +1597,19 @@ int slsReceiverTCPIPInterface::set_flipped_data(){ validate(args[1], retval, std::string("set flipped data"), DEC); FILE_LOG(logDEBUG1) << "Flipped Data:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_file_format() { +int slsReceiverTCPIPInterface::set_file_format(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); fileFormat retval = GET_FILE_FORMAT; fileFormat f = GET_FILE_FORMAT; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &f, sizeof(f), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &f, sizeof(f)) == FAIL) return FAIL; // base object not null @@ -1592,7 +1617,7 @@ int slsReceiverTCPIPInterface::set_file_format() { // set if (f >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting file format:" << f; receiver->setFileFormat(f); } @@ -1602,19 +1627,19 @@ int slsReceiverTCPIPInterface::set_file_format() { validate(f, retval, std::string("set file format"), DEC); FILE_LOG(logDEBUG1) << "File Format: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_detector_posid() { +int slsReceiverTCPIPInterface::set_detector_posid(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int arg = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; // base object not null @@ -1622,7 +1647,7 @@ int slsReceiverTCPIPInterface::set_detector_posid() { // set if (arg >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting detector position id:" << arg; receiver->setDetectorPositionId(arg); } @@ -1632,19 +1657,19 @@ int slsReceiverTCPIPInterface::set_detector_posid() { validate(arg, retval, std::string("set detector position id"), DEC); FILE_LOG(logDEBUG1) << "Position Id:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_multi_detector_size() { +int slsReceiverTCPIPInterface::set_multi_detector_size(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); - int arg[2] = {-1, -1}; + int arg[]{-1, -1}; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, arg, sizeof(arg)) == FAIL) return FAIL; // base object not null @@ -1652,7 +1677,7 @@ int slsReceiverTCPIPInterface::set_multi_detector_size() { // set if((arg[0] > 0) && (arg[1] > 0)) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting multi detector size:" << arg[0] << "," << arg[1]; receiver->setMultiDetectorSize(arg); } @@ -1667,19 +1692,19 @@ int slsReceiverTCPIPInterface::set_multi_detector_size() { } FILE_LOG(logDEBUG1) << "Multi Detector Size:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_streaming_port() { +int slsReceiverTCPIPInterface::set_streaming_port(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int port = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &port, sizeof(port), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &port, sizeof(port)) == FAIL) return FAIL; // base object not null @@ -1687,7 +1712,7 @@ int slsReceiverTCPIPInterface::set_streaming_port() { // set if (port >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting streaming port:" << port; receiver->setStreamingPort(port); } @@ -1697,26 +1722,26 @@ int slsReceiverTCPIPInterface::set_streaming_port() { validate(port, retval, std::string("set streaming port"), DEC); FILE_LOG(logDEBUG1) << "streaming port:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_streaming_source_ip() { +int slsReceiverTCPIPInterface::set_streaming_source_ip(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char arg[MAX_STR_LENGTH] = {0}; char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, arg, MAX_STR_LENGTH, true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, arg, MAX_STR_LENGTH) == FAIL) return FAIL; // base object not null if (ret == OK) { // only set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting streaming source ip:" << arg; receiver->setStreamingSourceIP(arg); } @@ -1724,19 +1749,19 @@ int slsReceiverTCPIPInterface::set_streaming_source_ip() { strcpy(retval, receiver->getStreamingSourceIP().c_str()); FILE_LOG(logDEBUG1) << "streaming source ip:" << retval; } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::set_silent_mode() { +int slsReceiverTCPIPInterface::set_silent_mode(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int value = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &value, sizeof(value), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &value, sizeof(value)) == FAIL) return FAIL; // base object not null @@ -1744,7 +1769,7 @@ int slsReceiverTCPIPInterface::set_silent_mode() { // set if (value >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting silent mode:" << value; receiver->setSilentMode(value); } @@ -1754,19 +1779,19 @@ int slsReceiverTCPIPInterface::set_silent_mode() { validate(value, retval, std::string("set silent mode"), DEC); FILE_LOG(logDEBUG1) << "silent mode:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::enable_gap_pixels() { +int slsReceiverTCPIPInterface::enable_gap_pixels(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int enable = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) return FAIL; if (myDetectorType != EIGER) @@ -1777,7 +1802,7 @@ int slsReceiverTCPIPInterface::enable_gap_pixels() { // set if (enable >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting gap pixels enable:" << enable; receiver->setGapPixelsEnable(enable); } @@ -1787,23 +1812,23 @@ int slsReceiverTCPIPInterface::enable_gap_pixels() { validate(enable, retval, std::string("set gap pixels enable"), DEC); FILE_LOG(logDEBUG1) << "Gap Pixels Enable: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::restream_stop(){ +int slsReceiverTCPIPInterface::restream_stop(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); // no arg, and check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // receiver is not null if (ret == OK) { // only set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { if (receiver->getDataStreamEnable() == false) { ret = FAIL; sprintf(mess,"Could not restream stop packet as data Streaming is disabled.\n"); @@ -1818,26 +1843,26 @@ int slsReceiverTCPIPInterface::restream_stop(){ } } } - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::set_additional_json_header() { +int slsReceiverTCPIPInterface::set_additional_json_header(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char arg[MAX_STR_LENGTH] = {0}; char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, arg, sizeof(arg)) == FAIL) return FAIL; // base object not null if (ret == OK) { // only set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting additional json header: " << arg; receiver->setAdditionalJsonHeader(arg); } @@ -1845,18 +1870,18 @@ int slsReceiverTCPIPInterface::set_additional_json_header() { strcpy(retval, receiver->getAdditionalJsonHeader().c_str()); FILE_LOG(logDEBUG1) << "additional json header:" << retval; } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::get_additional_json_header() { +int slsReceiverTCPIPInterface::get_additional_json_header(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); char retval[MAX_STR_LENGTH] = {0}; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // base object not null if (ret == OK) { @@ -1864,19 +1889,19 @@ int slsReceiverTCPIPInterface::get_additional_json_header() { strcpy(retval, receiver->getAdditionalJsonHeader().c_str()); FILE_LOG(logDEBUG1) << "additional json header:" << retval; } - return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); + return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } -int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { +int slsReceiverTCPIPInterface::set_udp_socket_buffer_size(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int64_t index = -1; int64_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1884,7 +1909,7 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting UDP Socket Buffer size: " << index; if (receiver->setUDPSocketBufferSize(index) == FAIL) { ret = FAIL; @@ -1899,36 +1924,36 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { validate(index, retval, std::string("set udp socket buffer size (No CAP_NET_ADMIN privileges?)"), DEC); FILE_LOG(logDEBUG1) << "UDP Socket Buffer Size:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size(){ +int slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); int64_t retval = -1; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting actual UDP buffer size"; retval = receiver->getActualUDPSocketBufferSize(); } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_frames_per_file() { +int slsReceiverTCPIPInterface::set_frames_per_file(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -1936,7 +1961,7 @@ int slsReceiverTCPIPInterface::set_frames_per_file() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting frames per file: " << index; receiver->setFramesPerFile(index); } @@ -1946,18 +1971,18 @@ int slsReceiverTCPIPInterface::set_frames_per_file() { validate(index, retval, std::string("set frames per file"), DEC); FILE_LOG(logDEBUG1) << "frames per file:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::check_version_compatibility() { +int slsReceiverTCPIPInterface::check_version_compatibility(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int64_t arg = -1; - + std::cout << "<----------------- HEY\n"; // get args, return if socket crashed - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; FILE_LOG(logDEBUG1) << "Checking versioning compatibility with value " << arg; int64_t client_requiredVersion = arg; @@ -1986,19 +2011,19 @@ int slsReceiverTCPIPInterface::check_version_compatibility() { FILE_LOG(logERROR) << mess; } else FILE_LOG(logINFO) << "Compatibility with Client: Successful"; - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::set_discard_policy() { +int slsReceiverTCPIPInterface::set_discard_policy(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -2006,7 +2031,7 @@ int slsReceiverTCPIPInterface::set_discard_policy() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting frames discard policy: " << index; receiver->setFrameDiscardPolicy((frameDiscardPolicy)index); } @@ -2016,19 +2041,19 @@ int slsReceiverTCPIPInterface::set_discard_policy() { validate(index, retval, std::string("set discard policy"), DEC); FILE_LOG(logDEBUG1) << "frame discard policy:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_padding_enable() { +int slsReceiverTCPIPInterface::set_padding_enable(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int index = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &index, sizeof(index), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) return FAIL; // base object not null @@ -2036,7 +2061,7 @@ int slsReceiverTCPIPInterface::set_padding_enable() { // set if (index >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { index = (index == 0) ? 0 : 1; FILE_LOG(logDEBUG1) << "Setting frames padding enable: " << index; receiver->setFramePaddingEnable(index); @@ -2047,19 +2072,19 @@ int slsReceiverTCPIPInterface::set_padding_enable() { validate(index, retval, std::string("set frame padding enable"), DEC); FILE_LOG(logDEBUG1) << "Frame Padding Enable:" << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_deactivated_padding_enable() { +int slsReceiverTCPIPInterface::set_deactivated_padding_enable(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int enable = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &enable, sizeof(enable), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) return FAIL; if (myDetectorType != EIGER) @@ -2070,7 +2095,7 @@ int slsReceiverTCPIPInterface::set_deactivated_padding_enable() { // set if (enable >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting deactivated padding enable: " << enable; receiver->setDeactivatedPadding(enable > 0 ? true : false); } @@ -2080,18 +2105,18 @@ int slsReceiverTCPIPInterface::set_deactivated_padding_enable() { validate(enable, retval, std::string("set deactivated padding enable"), DEC); FILE_LOG(logDEBUG1) << "Deactivated Padding Enable: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_readout_flags() { +int slsReceiverTCPIPInterface::set_readout_flags(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); readOutFlags arg = GET_READOUT_FLAGS; readOutFlags retval = GET_READOUT_FLAGS; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; if (myDetectorType == JUNGFRAU || myDetectorType == GOTTHARD || myDetectorType == MOENCH) @@ -2102,7 +2127,7 @@ int slsReceiverTCPIPInterface::set_readout_flags() { // set if (arg >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting readout flag: " << arg; ret = receiver->setReadOutFlags(arg); } @@ -2112,26 +2137,26 @@ int slsReceiverTCPIPInterface::set_readout_flags() { validate((int)arg, (int)(retval & arg), std::string("set readout flags"), HEX); FILE_LOG(logDEBUG1) << "Readout flags: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_adc_mask() { +int slsReceiverTCPIPInterface::set_adc_mask(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); uint32_t arg = -1; uint32_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; // base object not null else if (ret == OK) { // set // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg; receiver->setADCEnableMask(arg); } @@ -2145,14 +2170,14 @@ int slsReceiverTCPIPInterface::set_adc_mask() { } FILE_LOG(logDEBUG1) << "ADC enable mask retval: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_dbit_list() { +int slsReceiverTCPIPInterface::set_dbit_list(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); sls::FixedCapacityContainer args; - if (interface->Server_ReceiveArg(ret, mess, &args, sizeof(args), true, receiver) == FAIL) { + if (socket.receiveArg(ret, mess, &args, sizeof(args)) == FAIL) { return FAIL; } else if (ret == OK) { FILE_LOG(logDEBUG1) << "Setting DBIT list"; @@ -2171,16 +2196,16 @@ int slsReceiverTCPIPInterface::set_dbit_list() { } - return interface->Server_SendResult(true, ret, nullptr, 0, mess); + return socket.sendResult(true, ret, nullptr, 0, mess); } -int slsReceiverTCPIPInterface::get_dbit_list() { +int slsReceiverTCPIPInterface::get_dbit_list(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); sls::FixedCapacityContainer retval; // no arg, check receiver is null - interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + socket.receiveArg(ret, mess, nullptr, 0); // base object not null if (ret == OK) { @@ -2188,18 +2213,18 @@ int slsReceiverTCPIPInterface::get_dbit_list() { retval = receiver->getDbitList(); FILE_LOG(logDEBUG1) << "Dbit list size retval:" << retval.size(); } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } -int slsReceiverTCPIPInterface::set_dbit_offset() { +int slsReceiverTCPIPInterface::set_dbit_offset(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int arg = -1; int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; // base object not null @@ -2207,7 +2232,7 @@ int slsReceiverTCPIPInterface::set_dbit_offset() { // set if (arg >= 0) { // verify if receiver is unlocked and idle - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting Dbit offset: " << arg; receiver->setDbitOffset(arg); } @@ -2217,5 +2242,5 @@ int slsReceiverTCPIPInterface::set_dbit_offset() { validate(arg, retval, std::string("set dbit offset"), DEC); FILE_LOG(logDEBUG1) << "Dbit offset retval: " << retval; } - return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess); + return socket.sendResult(true, ret, &retval, sizeof(retval), mess); } \ No newline at end of file diff --git a/slsSupportLib/CMakeLists.txt b/slsSupportLib/CMakeLists.txt index f9a0134ac..1a675972f 100755 --- a/slsSupportLib/CMakeLists.txt +++ b/slsSupportLib/CMakeLists.txt @@ -6,6 +6,7 @@ set(SOURCES src/DataSocket.cpp src/ServerSocket.cpp src/ServerInterface.cpp + src/ServerInterface2.cpp src/network_utils.cpp ) diff --git a/slsSupportLib/include/ServerInterface2.h b/slsSupportLib/include/ServerInterface2.h new file mode 100644 index 000000000..997ee3e13 --- /dev/null +++ b/slsSupportLib/include/ServerInterface2.h @@ -0,0 +1,28 @@ +#pragma once + +#include "DataSocket.h" +namespace sls { +class ServerInterface2; +} + +#include "ServerSocket.h" +#include "sls_detector_defs.h" +namespace sls { + +class ServerInterface2 : public DataSocket { + using defs = slsDetectorDefs; + + public: + ServerInterface2(int socketId) : DataSocket(socketId){} + + int sendResult(bool update, int ret, void *retval, int retvalSize, + char *mess = nullptr); + int receiveArg(int &ret, char *mess, void *arg, int sizeofArg); + + + +private: + +}; + +} // namespace sls \ No newline at end of file diff --git a/slsSupportLib/include/ServerSocket.h b/slsSupportLib/include/ServerSocket.h index 4e15a820a..45abf942b 100755 --- a/slsSupportLib/include/ServerSocket.h +++ b/slsSupportLib/include/ServerSocket.h @@ -1,7 +1,8 @@ #pragma once #include "DataSocket.h" - +#include "ServerInterface2.h" +#include "network_utils.h" #include #include #include @@ -13,14 +14,18 @@ namespace sls { class ServerSocket : public DataSocket { public: ServerSocket(int port); - DataSocket accept(); - const std::string &getLastClient(); + ServerInterface2 accept(); + constexpr IpAddr getLastClient() noexcept { return lastClient; } + constexpr IpAddr getThisClient() noexcept { return thisClient; } + constexpr IpAddr getLockedBy() noexcept { return lockedBy; } + void setLockedBy(IpAddr addr){ lockedBy = addr; } int getPort() const; - void SendResult(int &ret, void *retval, int retvalSize, char* mess); + void SendResult(int &ret, void *retval, int retvalSize, char *mess); private: - std::string lastClient_ = std::string(INET_ADDRSTRLEN, '\0'); - std::string thisClient_ = std::string(INET_ADDRSTRLEN, '\0'); + IpAddr thisClient; + IpAddr lastClient; + IpAddr lockedBy; int serverPort; // char lastClient_[INET_ADDRSTRLEN]{}; }; diff --git a/slsSupportLib/include/network_utils.h b/slsSupportLib/include/network_utils.h index 59a7432a1..9a8410531 100755 --- a/slsSupportLib/include/network_utils.h +++ b/slsSupportLib/include/network_utils.h @@ -11,6 +11,7 @@ class IpAddr { uint32_t addr_{0}; public: + constexpr IpAddr() noexcept{} constexpr IpAddr(uint32_t address) noexcept : addr_{address} {} IpAddr(const std::string &address); IpAddr(const char *address); diff --git a/slsSupportLib/src/ServerInterface2.cpp b/slsSupportLib/src/ServerInterface2.cpp new file mode 100644 index 000000000..2eab250f5 --- /dev/null +++ b/slsSupportLib/src/ServerInterface2.cpp @@ -0,0 +1,32 @@ +#include "ServerInterface2.h" + +namespace sls { + +int ServerInterface2::sendResult(bool update, int ret, void *retval, + int retvalSize, char *mess) { + + // if (update && ret == defs::OK && server_->DifferentClients()) { + // ret = defs::FORCE_UPDATE; + // } + sendData(&ret, sizeof(ret)); + if (ret == defs::FAIL) { + // send error message + if (mess) + sendData(mess, MAX_STR_LENGTH); + // debugging feature. should not happen. + else + FILE_LOG(logERROR) << "No error message provided for this " + "failure. Will mess up TCP\n"; + } + sendData(retval, retvalSize); + return ret; +} + +int ServerInterface2::receiveArg(int &ret, char *mess, void *arg, + int sizeofArg) { + if (sizeofArg && receiveData(arg, sizeofArg) < 0) + return defs::FAIL; + return defs::OK; +} + +} // namespace sls diff --git a/slsSupportLib/src/ServerSocket.cpp b/slsSupportLib/src/ServerSocket.cpp index 7f07b49fc..a0d1f64e7 100755 --- a/slsSupportLib/src/ServerSocket.cpp +++ b/slsSupportLib/src/ServerSocket.cpp @@ -1,4 +1,6 @@ +#include "ServerInterface2.h" #include "ServerSocket.h" + #include "DataSocket.h" #include "logger.h" #include "sls_detector_defs.h" @@ -35,7 +37,8 @@ ServerSocket::ServerSocket(int port) } } -DataSocket ServerSocket::accept() { +ServerInterface2 ServerSocket::accept() { + lastClient = thisClient; //update from previous connection struct sockaddr_in clientAddr; socklen_t addr_size = sizeof clientAddr; int newSocket = @@ -43,17 +46,15 @@ DataSocket ServerSocket::accept() { if (newSocket == -1) { throw sls::SocketError("Server ERROR: socket accept failed\n"); } - inet_ntop(AF_INET, &(clientAddr.sin_addr), &thisClient_.front(), - INET_ADDRSTRLEN); - std::cout << "lastClient: " << lastClient_ << " thisClient: " << thisClient_ + char tc[INET_ADDRSTRLEN]{}; + inet_ntop(AF_INET, &(clientAddr.sin_addr), tc, INET_ADDRSTRLEN); + thisClient = tc; + std::cout << "lastClient: " << lastClient << " thisClient: " << thisClient << '\n'; - // Here goes any check for locks etc - lastClient_ = thisClient_; - return DataSocket(newSocket); + return ServerInterface2(newSocket); } -const std::string &ServerSocket::getLastClient() { return lastClient_; } int ServerSocket::getPort() const { return serverPort; } diff --git a/slsSupportLib/src/network_utils.cpp b/slsSupportLib/src/network_utils.cpp index a3dba74a8..3b71af9f4 100755 --- a/slsSupportLib/src/network_utils.cpp +++ b/slsSupportLib/src/network_utils.cpp @@ -16,6 +16,7 @@ namespace sls { + IpAddr::IpAddr(const std::string &address) { inet_pton(AF_INET, address.c_str(), &addr_); } From c6651df1b2724d0509443b4d74f36cbcb2dbde3d Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 11:14:03 +0200 Subject: [PATCH 05/21] remove mySock --- slsDetectorSoftware/src/slsDetector.cpp | 8 +- .../include/slsReceiverTCPIPInterface.h | 34 ++- .../src/slsReceiverTCPIPInterface.cpp | 219 ++++++------------ slsSupportLib/include/DataSocket.h | 2 +- slsSupportLib/include/ServerSocket.h | 2 +- slsSupportLib/include/logger.h | 4 +- slsSupportLib/src/DataSocket.cpp | 2 +- 7 files changed, 91 insertions(+), 180 deletions(-) diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index d505b3eba..b904dc26a 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -3220,10 +3220,10 @@ int slsDetector::setReceiverOnline(int value) { } else { shm()->rxOnlineFlag = OFFLINE_FLAG; if (value == ONLINE_FLAG) { - // connect and set offline flag - auto receiver = - ReceiverSocket(shm()->rxHostname, shm()->rxTCPPort); - receiver.close(); + // Connect and ask for receiver id to verify that + // it's online and working + int64_t retval{0}; + sendToReceiver(F_GET_RECEIVER_ID, nullptr, retval); shm()->rxOnlineFlag = ONLINE_FLAG; if (shm()->receiverAPIVersion == 0) { checkReceiverVersionCompatibility(); diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 292b74bbd..37fdc7c75 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -299,6 +299,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int set_dbit_offset(sls::ServerInterface2 &socket); + int LogSocketCrash(); + void NullObjectError(int& ret, char* mess); + /** detector type */ detectorType myDetectorType; @@ -309,25 +312,25 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); /** Message */ - char mess[MAX_STR_LENGTH]; + char mess[MAX_STR_LENGTH]{"dummy message"}; /** success/failure */ - int ret; + int ret{OK}; /** function index */ - int fnum; + int fnum{-1}; /** Lock Status if server locked to a client */ - int lockStatus; + int lockStatus{0}; /** kill tcp server thread */ - int killTCPServerThread; + int killTCPServerThread{0}; /** thread for TCP server */ pthread_t TCPServer_thread; /** tcp thread created flag*/ - bool tcpThreadCreated; + bool tcpThreadCreated{false}; /** port number */ int portNumber; @@ -345,16 +348,16 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { * we write depending on file write enable * users get data to write depending on call backs registered */ - int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*); - void *pStartAcquisition; + int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*) = nullptr; + void *pStartAcquisition{nullptr}; /** * Call back for acquisition finished * callback argument is * total frames caught */ - void (*acquisitionFinishedCallBack)(uint64_t, void*); - void *pAcquisitionFinished; + void (*acquisitionFinishedCallBack)(uint64_t, void*) = nullptr; + void *pAcquisitionFinished{nullptr}; /** @@ -365,7 +368,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { * dataSize in bytes is the size of the data in bytes. */ void (*rawDataReadyCallBack)(char* , - char*, uint32_t, void*); + char*, uint32_t, void*) = nullptr; /** * Call back for raw data (modified) @@ -375,22 +378,17 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { * revDatasize is the reference of data size in bytes. Can be modified to the new size to be written/streamed. (only smaller value). */ void (*rawDataModifyReadyCallBack)(char* , - char*, uint32_t &, void*); + char*, uint32_t &, void*) = nullptr; - void *pRawDataReady; + void *pRawDataReady{nullptr}; protected: - /** Socket */ - MySocketTCP* mySock; std::unique_ptr server{nullptr}; - /** client interface */ - ServerInterface* interface; - private: int VerifyLock(int &ret, char *mess); int VerifyLockAndIdle(int &ret, char *mess, int fnum); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index b620fb094..bc55f67b3 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -5,7 +5,6 @@ #include "FixedCapacityContainer.h" -#include "MySocketTCP.h" #include "ServerSocket.h" #include "ServerInterface.h" #include "slsReceiver.h" @@ -13,6 +12,7 @@ #include "slsReceiverTCPIPInterface.h" #include "slsReceiverUsers.h" #include "versionAPI.h" +#include "string_utils.h" #include #include @@ -26,45 +26,12 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { stop(); - delete mySock; - mySock=nullptr; - delete interface; - delete receiver; } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn): myDetectorType(GOTTHARD), - receiver(nullptr), - ret(OK), - fnum(-1), - lockStatus(0), - killTCPServerThread(0), - tcpThreadCreated(false), - portNumber(DEFAULT_PORTNO+2), - mySock(nullptr), - interface(nullptr) + portNumber(pn > 0 ? pn : DEFAULT_PORTNO + 2) { - //***callback parameters*** - startAcquisitionCallBack = nullptr; - pStartAcquisition = nullptr; - acquisitionFinishedCallBack = nullptr; - pAcquisitionFinished = nullptr; - rawDataReadyCallBack = nullptr; - rawDataModifyReadyCallBack = nullptr; - pRawDataReady = nullptr; - - // create socket - portNumber = (pn > 0 ? pn : DEFAULT_PORTNO + 2); - // MySocketTCP* m = new MySocketTCP(portNumber); - // mySock = m; - // interface = new ServerInterface(mySock, -1, "Receiver"); - - //initialize variables - // strcpy(mySock->lastClientIP,"none"); - // strcpy(mySock->thisClientIP,"none1"); - memset(mess,0,sizeof(mess)); - strcpy(mess,"dummy message"); - function_table(); } @@ -86,7 +53,6 @@ void slsReceiverTCPIPInterface::stop(){ if (tcpThreadCreated) { FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber; killTCPServerThread = 1; - // if(mySock) mySock->ShutDownSocket(); if(server) server->shutDownSocket(); FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber; @@ -134,30 +100,17 @@ void* slsReceiverTCPIPInterface::startTCPServerThread(void *this_pointer){ } void slsReceiverTCPIPInterface::startTCPServer() { - FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) - << "]"; - ; + FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " + << syscall(SYS_gettid) << "]"; FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << std::endl; int ret = OK; - server = sls::make_unique(portNumber); while (true) { - try { - std::cout << "<--------- hej\n"; auto socket = server->accept(); - std::cout << "<--------- hej2\n"; - socket.setTimeOut(1); - socket.setReceiveTimeout(1000); - std::cout << "<--------- hej3\n"; + socket.setReceiveTimeout(10000); ret = decode_function(socket); - std::cout << "<--------- hej4\n"; - socket.close(); - // if(mySock->Connect() >= 0){ - // ret = decode_function(); - // mySock->Disconnect(); - // } // if tcp command was to exit server if (ret == GOODBYE) { @@ -165,8 +118,6 @@ void slsReceiverTCPIPInterface::startTCPServer() { if (receiver) { receiver->shutDownUDPSockets(); } - - mySock->exitServer(); FILE_LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) << "]"; @@ -254,43 +205,38 @@ int slsReceiverTCPIPInterface::function_table(){ return OK; } - - - -int slsReceiverTCPIPInterface::decode_function(sls::ServerInterface2 &socket){ - ret = FAIL; - std::cout << "<------ decode 1\n"; - int n = socket.read(&fnum, sizeof(fnum)); - std::cout << "<------ decode 2\n"; - if (n <= 0) { - FILE_LOG(logDEBUG3) << "Could not read socket. " - "Received " << n << " bytes," << - "fnum:" << fnum << " " - "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; - return FAIL; - } - else - FILE_LOG(logDEBUG3) << "Received " << n << " bytes"; - - if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) { - FILE_LOG(logERROR) << "Unknown function enum " << fnum; - ret = (this->M_nofunc)(socket); - } else{ - FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " " - "(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") " - "located at " << flist[fnum]; - ret = (this->*flist[fnum])(socket); - - if (ret == FAIL) { - FILE_LOG(logDEBUG1) << "Failed to execute function = " << fnum << " (" - << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; - } else FILE_LOG(logDEBUG1) << "Function " << - getFunctionNameFromEnum((enum detFuncs)fnum) << " executed OK"; - } - return ret; +int slsReceiverTCPIPInterface::decode_function(sls::ServerInterface2 &socket) { + ret = FAIL; + int n = socket.read(&fnum, sizeof(fnum)); + if (n <= 0) { + FILE_LOG(logDEBUG3) + << "Could not read socket. Received " << n + << " bytes, fnum:" << fnum << " (" + << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; + return FAIL; + } else { + FILE_LOG(logDEBUG3) << "Received " << n << " bytes"; + } + if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) { + FILE_LOG(logERROR) << "Unknown function enum " << fnum; + ret = (this->M_nofunc)(socket); + } else { + FILE_LOG(logDEBUG1) << "calling function fnum: " << fnum << " (" + << getFunctionNameFromEnum((enum detFuncs)fnum) + << ") located at " << flist[fnum]; + ret = (this->*flist[fnum])(socket); + if (ret == FAIL) { + FILE_LOG(logDEBUG1) + << "Failed to execute function = " << fnum << " (" + << getFunctionNameFromEnum((enum detFuncs)fnum) << ")"; + } else + FILE_LOG(logDEBUG1) + << "Function " << getFunctionNameFromEnum((enum detFuncs)fnum) + << " executed OK"; + } + return ret; } - void slsReceiverTCPIPInterface::functionNotImplemented() { ret = FAIL; sprintf(mess, "Function (%s) is not implemented for this detector\n", @@ -322,9 +268,6 @@ int slsReceiverTCPIPInterface::M_nofunc(sls::ServerInterface2 &socket){ ret = FAIL; memset(mess, 0, sizeof(mess)); - // to receive any arguments - - socket.setReceiveTimeout(500); int n = 1; while (n > 0) n = socket.read(mess, MAX_STR_LENGTH); @@ -428,8 +371,9 @@ int slsReceiverTCPIPInterface::lock_receiver(sls::ServerInterface2 &socket) { int slsReceiverTCPIPInterface::get_last_client_ip(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); - auto ip = server->getLastClient().str(); - return socket.sendResult(true, ret, &ip.front(), ip.length()+1, nullptr); + char ip[INET_ADDRSTRLEN]{}; + sls::strcpy_safe(ip, server->getLastClient().str().c_str()); + return socket.sendResult(true, ret, &ip, sizeof(ip)); } @@ -438,30 +382,23 @@ int slsReceiverTCPIPInterface::set_port(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); int p_number = -1; - MySocketTCP* mySocket = nullptr; - char oldLastClientIP[INET_ADDRSTRLEN] = {0}; - - // get args, return if socket crashed if (socket.receiveArg(ret, mess, &p_number, sizeof(p_number)) == FAIL) return FAIL; - // verify if receiver is unlocked if (VerifyLock(ret, mess) == OK) { - // port number too low if (p_number < 1024) { ret = FAIL; sprintf(mess,"Port Number (%d) too low\n", p_number); FILE_LOG(logERROR) << mess; } else { FILE_LOG(logINFO) << "set port to " << p_number <lastClientIP); - // create new socket try { - mySocket = new MySocketTCP(p_number); - strcpy(mySock->lastClientIP,oldLastClientIP); + auto new_server = sls::make_unique(p_number); + new_server->setLockedBy(server->getLockedBy()); + new_server->setLastClient(server->getLastClient()); + server = std::move(new_server); } catch(SocketError &e) { ret = FAIL; - // same socket, could not bind port sprintf(mess, "%s", e.what()); FILE_LOG(logERROR) << mess; } catch (...) { @@ -473,13 +410,6 @@ int slsReceiverTCPIPInterface::set_port(sls::ServerInterface2 &socket) { } socket.sendResult(true, ret, &p_number,sizeof(p_number), mess); - // delete old socket - if(ret != FAIL){ - mySock->Disconnect(); - delete mySock; - mySock = mySocket; - interface->SetSocket(mySock); - } return ret; } @@ -505,10 +435,11 @@ int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) { int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) { int n = 0; int i32 = -1; - char cstring[MAX_STR_LENGTH] = {0}; + char cstring[MAX_STR_LENGTH]{}; - - n += socket.sendData(mySock->lastClientIP,sizeof(mySock->lastClientIP)); + char ip[INET_ADDRSTRLEN]{}; + sls::strcpy_safe(ip, server->getLastClient().str().c_str()); + n += socket.sendData(ip,sizeof(ip)); // filepath strcpy(cstring, receiver->getFilePath().c_str()); @@ -600,9 +531,6 @@ int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) { i32=receiver->getDbitOffset(); n += socket.sendData(&i32, sizeof(i32)); - // if (!lockStatus) - // strcpy(mySock->lastClientIP, mySock->thisClientIP); - return OK; } @@ -668,10 +596,6 @@ int slsReceiverTCPIPInterface::set_detector_type(sls::ServerInterface2 &socket){ receiver->registerCallBackRawDataReady(rawDataReadyCallBack,pRawDataReady); if(rawDataModifyReadyCallBack) receiver->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack,pRawDataReady); - - // // client has started updating receiver, update ip - // if (!lockStatus) - // strcpy(mySock->lastClientIP, mySock->thisClientIP); } } @@ -715,27 +639,30 @@ int slsReceiverTCPIPInterface::set_detector_hostname(sls::ServerInterface2 &sock return socket.sendResult(true, ret, retval, MAX_STR_LENGTH, mess); } +int slsReceiverTCPIPInterface::LogSocketCrash(){ + FILE_LOG(logERROR) << "Reading from socket failed. Possible socket crash"; + return FAIL; +} + +void slsReceiverTCPIPInterface::NullObjectError(int& ret, char* mess){ + ret=FAIL; + strcpy(mess,"Receiver not set up. Please use rx_hostname first.\n"); + FILE_LOG(logERROR) << mess; +} + int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); + static_assert(sizeof(ROI) == 4*sizeof(int), "ROI not packed"); int narg = -1; - std::vector arg; + socket.read(&narg,sizeof(narg)); - // receive arguments - if (mySock->ReceiveDataOnly(&narg,sizeof(narg)) < 0 ) - return interface->Server_SocketCrash(); + std::vector arg; for (int iloop = 0; iloop < narg; ++iloop) { - ROI temp; - if ( mySock->ReceiveDataOnly(&temp.xmin, sizeof(int)) < 0 ) - return interface->Server_SocketCrash(); - if ( mySock->ReceiveDataOnly(&temp.xmax, sizeof(int)) < 0 ) - return interface->Server_SocketCrash(); - if ( mySock->ReceiveDataOnly(&temp.ymin, sizeof(int)) < 0 ) - return interface->Server_SocketCrash(); - if ( mySock->ReceiveDataOnly(&temp.ymax, sizeof(int)) < 0 ) - return interface->Server_SocketCrash(); + ROI temp{}; + socket.read(&temp, sizeof(temp)); arg.push_back(temp); } FILE_LOG(logDEBUG1) << "Set ROI narg: " << narg; @@ -750,14 +677,11 @@ int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) { // base object not null else if (receiver == nullptr) - interface->Server_NullObjectError(ret, mess); + NullObjectError(ret, mess); else { - // only set - // verify if receiver is unlocked and idle if (VerifyLockAndIdle(ret, mess, fnum) == OK) ret = receiver->setROI(arg); } - arg.clear(); return socket.sendResult(true, ret, nullptr, 0, mess); } @@ -766,8 +690,8 @@ int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) { int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); - char args[6][MAX_STR_LENGTH] = {{""}, {""}, {""}, {""}, {""}, {""}}; - char retvals[2][MAX_STR_LENGTH] = {{""}, {""}}; + char args[6][MAX_STR_LENGTH]{}; + char retvals[2][MAX_STR_LENGTH]{}; // get args, return if socket crashed, ret is fail if receiver is not null if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL) @@ -2094,7 +2018,6 @@ int slsReceiverTCPIPInterface::set_deactivated_padding_enable(sls::ServerInterfa else if (ret == OK) { // set if (enable >= 0) { - // verify if receiver is unlocked and idle if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting deactivated padding enable: " << enable; receiver->setDeactivatedPadding(enable > 0 ? true : false); @@ -2154,14 +2077,10 @@ int slsReceiverTCPIPInterface::set_adc_mask(sls::ServerInterface2 &socket) { // base object not null else if (ret == OK) { - // set - // verify if receiver is unlocked and idle if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg; receiver->setADCEnableMask(arg); } - - // get retval = receiver->getADCEnableMask(); if (ret == OK && retval != arg) { ret = FAIL; @@ -2185,7 +2104,7 @@ int slsReceiverTCPIPInterface::set_dbit_list(sls::ServerInterface2 &socket) { FILE_LOG(logDEBUG1) << it << " "; } FILE_LOG(logDEBUG1) << "\n"; - if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) { + if (VerifyLockAndIdle(ret, mess, fnum) == OK) { if (args.size() > 64) { ret = FAIL; sprintf(mess, "Could not set dbit list as size is > 64\n"); @@ -2193,8 +2112,6 @@ int slsReceiverTCPIPInterface::set_dbit_list(sls::ServerInterface2 &socket) { } else receiver->setDbitList(args); } - - } return socket.sendResult(true, ret, nullptr, 0, mess); } @@ -2209,7 +2126,6 @@ int slsReceiverTCPIPInterface::get_dbit_list(sls::ServerInterface2 &socket) { // base object not null if (ret == OK) { - // get retval = receiver->getDbitList(); FILE_LOG(logDEBUG1) << "Dbit list size retval:" << retval.size(); } @@ -2229,15 +2145,12 @@ int slsReceiverTCPIPInterface::set_dbit_offset(sls::ServerInterface2 &socket) { // base object not null else if (ret == OK) { - // set if (arg >= 0) { - // verify if receiver is unlocked and idle if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting Dbit offset: " << arg; receiver->setDbitOffset(arg); } } - // get retval = receiver->getDbitOffset(); validate(arg, retval, std::string("set dbit offset"), DEC); FILE_LOG(logDEBUG1) << "Dbit offset retval: " << retval; diff --git a/slsSupportLib/include/DataSocket.h b/slsSupportLib/include/DataSocket.h index a9e7dcc6e..87de7d39d 100755 --- a/slsSupportLib/include/DataSocket.h +++ b/slsSupportLib/include/DataSocket.h @@ -20,7 +20,7 @@ class DataSocket { } size_t sendData(const void *buffer, size_t size); size_t receiveData(void *buffer, size_t size); - size_t read(void *buffer, size_t size); + ssize_t read(void *buffer, size_t size); int setTimeOut(int t_seconds); int setReceiveTimeout(int us); void close(); diff --git a/slsSupportLib/include/ServerSocket.h b/slsSupportLib/include/ServerSocket.h index 45abf942b..505eb3568 100755 --- a/slsSupportLib/include/ServerSocket.h +++ b/slsSupportLib/include/ServerSocket.h @@ -19,6 +19,7 @@ class ServerSocket : public DataSocket { constexpr IpAddr getThisClient() noexcept { return thisClient; } constexpr IpAddr getLockedBy() noexcept { return lockedBy; } void setLockedBy(IpAddr addr){ lockedBy = addr; } + void setLastClient(IpAddr addr){ lastClient = addr; } int getPort() const; void SendResult(int &ret, void *retval, int retvalSize, char *mess); @@ -27,7 +28,6 @@ class ServerSocket : public DataSocket { IpAddr lastClient; IpAddr lockedBy; int serverPort; - // char lastClient_[INET_ADDRSTRLEN]{}; }; }; // namespace sls \ No newline at end of file diff --git a/slsSupportLib/include/logger.h b/slsSupportLib/include/logger.h index 541da95b0..8de0c2f49 100755 --- a/slsSupportLib/include/logger.h +++ b/slsSupportLib/include/logger.h @@ -17,8 +17,8 @@ #endif #ifndef FILELOG_MAX_LEVEL -// #define FILELOG_MAX_LEVEL logINFO -#define FILELOG_MAX_LEVEL logDEBUG5 +#define FILELOG_MAX_LEVEL logINFO +// #define FILELOG_MAX_LEVEL logDEBUG5 #endif diff --git a/slsSupportLib/src/DataSocket.cpp b/slsSupportLib/src/DataSocket.cpp index 3da9cbf75..9a70c5c19 100755 --- a/slsSupportLib/src/DataSocket.cpp +++ b/slsSupportLib/src/DataSocket.cpp @@ -50,7 +50,7 @@ size_t DataSocket::receiveData(void *buffer, size_t size) { return dataRead; } -size_t DataSocket::read(void *buffer, size_t size){ +ssize_t DataSocket::read(void *buffer, size_t size){ return ::read(getSocketId(), reinterpret_cast(buffer), size); } From 9a8773d9a59abdc621a9f6d7a083b94f0d2a725a Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 11:25:18 +0200 Subject: [PATCH 06/21] ip test --- slsSupportLib/tests/test-network_utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slsSupportLib/tests/test-network_utils.cpp b/slsSupportLib/tests/test-network_utils.cpp index c9457da4f..54683807c 100755 --- a/slsSupportLib/tests/test-network_utils.cpp +++ b/slsSupportLib/tests/test-network_utils.cpp @@ -42,9 +42,9 @@ TEST_CASE("Hex representation of MAC", "[support]") { } TEST_CASE("Convert IP using classes ", "[support]") { - std::vector vec_addr{4073554305, 2747957633, 2697625985}; + std::vector vec_addr{4073554305, 2747957633, 2697625985, 16779786}; std::vector vec_ans{"129.129.205.242", "129.129.202.163", - "129.129.202.160"}; + "129.129.202.160", "10.10.0.1"}; for (size_t i = 0; i != vec_addr.size(); ++i) { auto ip0 = IpAddr(vec_addr[i]); From 54983c5fd0ea626e1a80c9f6bccdbc74795aecd6 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 11:36:25 +0200 Subject: [PATCH 07/21] removing constexpr --- slsSupportLib/include/ServerSocket.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/slsSupportLib/include/ServerSocket.h b/slsSupportLib/include/ServerSocket.h index 505eb3568..74831a46d 100755 --- a/slsSupportLib/include/ServerSocket.h +++ b/slsSupportLib/include/ServerSocket.h @@ -15,11 +15,11 @@ class ServerSocket : public DataSocket { public: ServerSocket(int port); ServerInterface2 accept(); - constexpr IpAddr getLastClient() noexcept { return lastClient; } - constexpr IpAddr getThisClient() noexcept { return thisClient; } - constexpr IpAddr getLockedBy() noexcept { return lockedBy; } - void setLockedBy(IpAddr addr){ lockedBy = addr; } - void setLastClient(IpAddr addr){ lastClient = addr; } + IpAddr getLastClient() noexcept { return lastClient; } + IpAddr getThisClient() noexcept { return thisClient; } + IpAddr getLockedBy() noexcept { return lockedBy; } + void setLockedBy(IpAddr addr) { lockedBy = addr; } + void setLastClient(IpAddr addr) { lastClient = addr; } int getPort() const; void SendResult(int &ret, void *retval, int retvalSize, char *mess); From 0d98bd0048fbe14a45358c0819f7af0b4dc3c5f9 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 11:43:12 +0200 Subject: [PATCH 08/21] init --- slsReceiverSoftware/include/slsReceiverTCPIPInterface.h | 2 +- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 37fdc7c75..d54e92cc5 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -312,7 +312,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); /** Message */ - char mess[MAX_STR_LENGTH]{"dummy message"}; + char mess[MAX_STR_LENGTH] = "dummy message"; /** success/failure */ int ret{OK}; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index bc55f67b3..1414f31a9 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -29,9 +29,10 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn): - myDetectorType(GOTTHARD), - portNumber(pn > 0 ? pn : DEFAULT_PORTNO + 2) + myDetectorType(GOTTHARD) + { + portNumber = pn > 0 ? pn : DEFAULT_PORTNO + 2; function_table(); } From 1db1b0307c909bbe0b43b2779d13a1e11463d3bd Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 11:50:35 +0200 Subject: [PATCH 09/21] init --- slsReceiverSoftware/include/slsReceiverTCPIPInterface.h | 2 +- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index d54e92cc5..4676ac532 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -312,7 +312,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); /** Message */ - char mess[MAX_STR_LENGTH] = "dummy message"; + char mess[MAX_STR_LENGTH]{}; /** success/failure */ int ret{OK}; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 1414f31a9..bc55f67b3 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -29,10 +29,9 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn): - myDetectorType(GOTTHARD) - + myDetectorType(GOTTHARD), + portNumber(pn > 0 ? pn : DEFAULT_PORTNO + 2) { - portNumber = pn > 0 ? pn : DEFAULT_PORTNO + 2; function_table(); } From 615d1b1f338b4aac805fbc6b747b0352dfbf01fb Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 14:27:16 +0200 Subject: [PATCH 10/21] refactor --- .../src/slsReceiverTCPIPInterface.cpp | 12 ++-- slsSupportLib/include/network_utils.h | 6 +- slsSupportLib/src/network_utils.cpp | 61 ++++++++++++++++++- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index bc55f67b3..87cfaaf53 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -6,13 +6,13 @@ #include "FixedCapacityContainer.h" #include "ServerSocket.h" -#include "ServerInterface.h" #include "slsReceiver.h" #include "slsReceiverImplementation.h" #include "slsReceiverTCPIPInterface.h" #include "slsReceiverUsers.h" #include "versionAPI.h" #include "string_utils.h" +#include "sls_detector_exceptions.h" #include #include @@ -24,6 +24,8 @@ #include #include +using sls::SocketError; + slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { stop(); } @@ -725,7 +727,7 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ } FILE_LOG(logINFO) << "Receiver UDP IP: " << ip1; // get eth - std::string temp = genericSocket::ipToName(ip1); + std::string temp = sls::IpToInterfaceName(ip1); if (temp == "none"){ ret = FAIL; strcpy(mess, "Failed to get ethernet interface or IP \n"); @@ -747,7 +749,7 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ } //get mac address if (ret != FAIL) { - temp = genericSocket::nameToMac(eth); + temp = sls::InterfaceNameToMac(eth).str(); if (temp=="00:00:00:00:00:00") { ret = FAIL; strcpy(mess,"failed to get mac adddress to listen to\n"); @@ -771,7 +773,7 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ receiver->setUDPPortNumber2(port2); FILE_LOG(logINFO) << "Receiver UDP IP 2: " << ip2; // get eth - temp = genericSocket::ipToName(ip2); + temp = sls::IpToInterfaceName(ip2); if (temp == "none"){ ret = FAIL; strcpy(mess, "Failed to get 2nd ethernet interface or IP \n"); @@ -791,7 +793,7 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ //get mac address if (ret != FAIL) { - temp = genericSocket::nameToMac(eth); + temp = sls::InterfaceNameToMac(eth).str(); if (temp=="00:00:00:00:00:00") { ret = FAIL; strcpy(mess,"failed to get 2nd mac adddress to listen to\n"); diff --git a/slsSupportLib/include/network_utils.h b/slsSupportLib/include/network_utils.h index 9a8410531..e4a963033 100755 --- a/slsSupportLib/include/network_utils.h +++ b/slsSupportLib/include/network_utils.h @@ -4,8 +4,6 @@ namespace sls { -uint32_t HostnameToIp(const char *hostname); - class IpAddr { private: uint32_t addr_{0}; @@ -58,6 +56,10 @@ class MacAddr { constexpr uint64_t uint64() const noexcept { return addr_; } }; +uint32_t HostnameToIp(const char *hostname); +std::string IpToInterfaceName(const std::string& ip); +MacAddr InterfaceNameToMac(std::string inf); + std::ostream &operator<<(std::ostream &out, const IpAddr &addr); std::ostream &operator<<(std::ostream &out, const MacAddr &addr); diff --git a/slsSupportLib/src/network_utils.cpp b/slsSupportLib/src/network_utils.cpp index 3b71af9f4..5153cf234 100755 --- a/slsSupportLib/src/network_utils.cpp +++ b/slsSupportLib/src/network_utils.cpp @@ -6,11 +6,14 @@ #include #include #include - +#include #include #include #include #include +#include +#include +#include #include "network_utils.h" @@ -93,4 +96,60 @@ uint32_t HostnameToIp(const char *hostname) { return ip; } +std::string IpToInterfaceName(const std::string &ip) { + //TODO! Copied from genericSocket needs to be refactored! + struct ifaddrs *addrs, *iap; + struct sockaddr_in *sa; + + char buf[32]; + const int buf_len = sizeof(buf); + memset(buf, 0, buf_len); + strcpy(buf, "none"); + + getifaddrs(&addrs); + for (iap = addrs; iap != NULL; iap = iap->ifa_next) { + if (iap->ifa_addr && (iap->ifa_flags & IFF_UP) && + iap->ifa_addr->sa_family == AF_INET) { + sa = (struct sockaddr_in *)(iap->ifa_addr); + inet_ntop(iap->ifa_addr->sa_family, (void *)&(sa->sin_addr), buf, + buf_len); + if (ip == std::string(buf)) { + strcpy(buf, iap->ifa_name); + break; + } + } + } + freeifaddrs(addrs); + return std::string(buf); +} + +MacAddr InterfaceNameToMac(std::string inf) { + //TODO! Copied from genericSocket needs to be refactored! + struct ifreq ifr; + char mac[32]; + const int mac_len = sizeof(mac); + memset(mac,0,mac_len); + + int sock=socket(PF_INET, SOCK_STREAM, 0); + strncpy(ifr.ifr_name,inf.c_str(),sizeof(ifr.ifr_name)-1); + ifr.ifr_name[sizeof(ifr.ifr_name)-1]='\0'; + + + if (-1==ioctl(sock, SIOCGIFHWADDR, &ifr)) { + perror("ioctl(SIOCGIFHWADDR) "); + return std::string("00:00:00:00:00:00"); + } + for (int j=0, k=0; j<6; j++) { + k+=snprintf(mac+k, mac_len-k-1, j ? ":%02X" : "%02X", + (int)(unsigned int)(unsigned char)ifr.ifr_hwaddr.sa_data[j]); + } + mac[mac_len-1]='\0'; + + if(sock!=1){ + close(sock); + } + return MacAddr(mac); + + } + } // namespace sls From c30c6bb88377e2aa3e6aacad5ea7e63cc6fa4615 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 15:00:15 +0200 Subject: [PATCH 11/21] fixed uninitialized pointer --- slsReceiverSoftware/include/slsReceiverTCPIPInterface.h | 2 +- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 4676ac532..77ea28485 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -306,7 +306,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { detectorType myDetectorType; /** slsReceiverBase object */ - slsReceiverImplementation *receiver; + slsReceiverImplementation *receiver{nullptr}; /** Function List */ int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 87cfaaf53..2e3344d2b 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1906,7 +1906,6 @@ int slsReceiverTCPIPInterface::check_version_compatibility(sls::ServerInterface2 ret = OK; memset(mess, 0, sizeof(mess)); int64_t arg = -1; - std::cout << "<----------------- HEY\n"; // get args, return if socket crashed if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) return FAIL; From e6ad80e187c56806a9f8555b527f587ff24d4828 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 15:10:24 +0200 Subject: [PATCH 12/21] removed cout --- slsSupportLib/src/ServerSocket.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/slsSupportLib/src/ServerSocket.cpp b/slsSupportLib/src/ServerSocket.cpp index a0d1f64e7..35048268b 100755 --- a/slsSupportLib/src/ServerSocket.cpp +++ b/slsSupportLib/src/ServerSocket.cpp @@ -49,9 +49,6 @@ ServerInterface2 ServerSocket::accept() { char tc[INET_ADDRSTRLEN]{}; inet_ntop(AF_INET, &(clientAddr.sin_addr), tc, INET_ADDRSTRLEN); thisClient = tc; - std::cout << "lastClient: " << lastClient << " thisClient: " << thisClient - << '\n'; - return ServerInterface2(newSocket); } From 415567006f17770e2838b990ffbec8a96d8df6c0 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 16 May 2019 15:16:11 +0200 Subject: [PATCH 13/21] non used header --- slsDetectorSoftware/src/slsDetector.cpp | 1 - slsSupportLib/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index b904dc26a..3209b85e1 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -1,6 +1,5 @@ #include "slsDetector.h" #include "ClientSocket.h" -#include "ServerInterface.h" #include "SharedMemory.h" #include "file_utils.h" #include "multiSlsDetector.h" diff --git a/slsSupportLib/CMakeLists.txt b/slsSupportLib/CMakeLists.txt index 1a675972f..ec5cbfb6a 100755 --- a/slsSupportLib/CMakeLists.txt +++ b/slsSupportLib/CMakeLists.txt @@ -28,7 +28,7 @@ set(PUBLICHEADERS include/ClientSocket.h include/DataSocket.h include/ServerSocket.h - include/ServerInterface.h + include/ServerInterface2.h include/network_utils.h include/FixedCapacityContainer.h ) From 8ebc0f2644e08a1930c32ee027ae005c1da387bb Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 27 May 2019 11:28:59 +0200 Subject: [PATCH 14/21] uniqe ptr for receiver --- slsReceiverSoftware/include/slsReceiverTCPIPInterface.h | 5 +++-- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 77ea28485..9a39e1578 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -10,7 +10,8 @@ class MySocketTCP; class ServerInterface; -class slsReceiverImplementation; +// class slsReceiverImplementation; +#include "slsReceiverImplementation.h" #include "ServerSocket.h" @@ -306,7 +307,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { detectorType myDetectorType; /** slsReceiverBase object */ - slsReceiverImplementation *receiver{nullptr}; + std::unique_ptr receiver{nullptr}; /** Function List */ int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 2e3344d2b..076f152b9 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -583,7 +583,7 @@ int slsReceiverTCPIPInterface::set_detector_type(sls::ServerInterface2 &socket){ } if(ret == OK) { if(receiver == nullptr){ - receiver = new slsReceiverImplementation(); + receiver = sls::make_unique(); } myDetectorType = arg; ret = receiver->setDetectorType(myDetectorType); From e4367c9ab10b3c215f76b6f8066b0fb6a40adbe4 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 27 May 2019 14:20:40 +0200 Subject: [PATCH 15/21] checking for nullptr --- .../src/slsReceiverTCPIPInterface.cpp | 219 ++++++++++++++---- 1 file changed, 177 insertions(+), 42 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 076f152b9..8041289f4 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -111,7 +111,7 @@ void slsReceiverTCPIPInterface::startTCPServer() { while (true) { try { auto socket = server->accept(); - socket.setReceiveTimeout(10000); + socket.setReceiveTimeout(static_cast(5E6)); ret = decode_function(socket); // if tcp command was to exit server @@ -423,6 +423,8 @@ int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) { // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(server == nullptr) + NullObjectError(ret, mess); socket.sendResult(false, ret, nullptr, 0, mess); if (ret == FAIL) @@ -617,9 +619,12 @@ int slsReceiverTCPIPInterface::set_detector_hostname(sls::ServerInterface2 &sock char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, hostname,MAX_STR_LENGTH) == FAIL) + socket.receiveArg(ret, mess, hostname, MAX_STR_LENGTH); + if(server == nullptr){ + NullObjectError(ret, mess); return FAIL; - + } + // base object not null if (ret == OK) { // set @@ -696,8 +701,11 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ char retvals[2][MAX_STR_LENGTH]{}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL) + socket.receiveArg(ret, mess, args, sizeof(args)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -826,8 +834,11 @@ int slsReceiverTCPIPInterface::set_timer(sls::ServerInterface2 &socket) { int64_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -931,8 +942,11 @@ int slsReceiverTCPIPInterface::set_dynamic_range(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &dr, sizeof(dr)) == FAIL) + socket.receiveArg(ret, mess, &dr, sizeof(dr)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -986,8 +1000,11 @@ int slsReceiverTCPIPInterface::set_streaming_frequency(sls::ServerInterface2 &so int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1019,6 +1036,9 @@ int slsReceiverTCPIPInterface::get_status(sls::ServerInterface2 &socket){ // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting Status"; @@ -1038,7 +1058,9 @@ int slsReceiverTCPIPInterface::start_receiver(sls::ServerInterface2 &socket){ // no arg, and check receiver is null socket.receiveArg(ret, mess, nullptr, 0); - + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // receiver is not null if (ret == OK) { // only set @@ -1070,7 +1092,9 @@ int slsReceiverTCPIPInterface::stop_receiver(sls::ServerInterface2 &socket){ // no arg, and check receiver is null socket.receiveArg(ret, mess, nullptr, 0); - + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // receiver is not null if (ret == OK) { // only set @@ -1102,8 +1126,11 @@ int slsReceiverTCPIPInterface::set_file_dir(sls::ServerInterface2 &socket) { char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, fPath, sizeof(fPath)) == FAIL) + socket.receiveArg(ret, mess, fPath, sizeof(fPath)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1134,8 +1161,11 @@ int slsReceiverTCPIPInterface::set_file_name(sls::ServerInterface2 &socket) { char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, fName, sizeof(fName)) == FAIL) + socket.receiveArg(ret, mess, fName, sizeof(fName)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1166,8 +1196,11 @@ int slsReceiverTCPIPInterface::set_file_index(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1196,6 +1229,9 @@ int slsReceiverTCPIPInterface::get_frame_index(sls::ServerInterface2 &socket){ // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting frame index"; @@ -1214,6 +1250,9 @@ int slsReceiverTCPIPInterface::get_frames_caught(sls::ServerInterface2 &socket){ // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting frames caught"; @@ -1231,6 +1270,9 @@ int slsReceiverTCPIPInterface::reset_frames_caught(sls::ServerInterface2 &socket // no arg, and check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // receiver is not null if (ret == OK) { @@ -1253,8 +1295,11 @@ int slsReceiverTCPIPInterface::enable_file_write(sls::ServerInterface2 &socket){ int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) + socket.receiveArg(ret, mess, &enable, sizeof(enable)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1283,8 +1328,11 @@ int slsReceiverTCPIPInterface::enable_master_file_write(sls::ServerInterface2 &s int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) + socket.receiveArg(ret, mess, &enable, sizeof(enable)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1312,8 +1360,11 @@ int slsReceiverTCPIPInterface::enable_overwrite(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1342,8 +1393,11 @@ int slsReceiverTCPIPInterface::enable_tengiga(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &val, sizeof(val)) == FAIL) + socket.receiveArg(ret, mess, &val, sizeof(val)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType != EIGER && myDetectorType != CHIPTESTBOARD && myDetectorType != MOENCH) functionNotImplemented(); @@ -1375,8 +1429,11 @@ int slsReceiverTCPIPInterface::set_fifo_depth(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &value, sizeof(value)) == FAIL) + socket.receiveArg(ret, mess, &value, sizeof(value)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1409,8 +1466,11 @@ int slsReceiverTCPIPInterface::set_activate(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) + socket.receiveArg(ret, mess, &enable, sizeof(enable)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType != EIGER) functionNotImplemented(); @@ -1442,9 +1502,11 @@ int slsReceiverTCPIPInterface::set_data_stream_enable(sls::ServerInterface2 &soc int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; - + } // base object not null if (ret == OK) { // set @@ -1472,8 +1534,11 @@ int slsReceiverTCPIPInterface::set_streaming_timer(sls::ServerInterface2 &socket int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1502,8 +1567,11 @@ int slsReceiverTCPIPInterface::set_flipped_data(sls::ServerInterface2 &socket){ int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL) + socket.receiveArg(ret, mess, args, sizeof(args)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType != EIGER) functionNotImplemented(); @@ -1535,8 +1603,11 @@ int slsReceiverTCPIPInterface::set_file_format(sls::ServerInterface2 &socket) { fileFormat f = GET_FILE_FORMAT; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &f, sizeof(f)) == FAIL) + socket.receiveArg(ret, mess, &f, sizeof(f)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1565,8 +1636,11 @@ int slsReceiverTCPIPInterface::set_detector_posid(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, &arg, sizeof(arg)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1595,8 +1669,11 @@ int slsReceiverTCPIPInterface::set_multi_detector_size(sls::ServerInterface2 &so int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, arg, sizeof(arg)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1630,8 +1707,11 @@ int slsReceiverTCPIPInterface::set_streaming_port(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &port, sizeof(port)) == FAIL) + socket.receiveArg(ret, mess, &port, sizeof(port)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1660,8 +1740,11 @@ int slsReceiverTCPIPInterface::set_streaming_source_ip(sls::ServerInterface2 &so char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, arg, MAX_STR_LENGTH) == FAIL) + socket.receiveArg(ret, mess, arg, MAX_STR_LENGTH); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1687,8 +1770,11 @@ int slsReceiverTCPIPInterface::set_silent_mode(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &value, sizeof(value)) == FAIL) + socket.receiveArg(ret, mess, &value, sizeof(value)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1717,8 +1803,11 @@ int slsReceiverTCPIPInterface::enable_gap_pixels(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) + socket.receiveArg(ret, mess, &enable, sizeof(enable)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType != EIGER) functionNotImplemented(); @@ -1749,6 +1838,9 @@ int slsReceiverTCPIPInterface::restream_stop(sls::ServerInterface2 &socket){ // no arg, and check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // receiver is not null if (ret == OK) { @@ -1781,8 +1873,11 @@ int slsReceiverTCPIPInterface::set_additional_json_header(sls::ServerInterface2 char retval[MAX_STR_LENGTH] = {0}; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, arg, sizeof(arg)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1808,6 +1903,9 @@ int slsReceiverTCPIPInterface::get_additional_json_header(sls::ServerInterface2 // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // base object not null if (ret == OK) { @@ -1827,8 +1925,11 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size(sls::ServerInterface2 int64_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1862,6 +1963,9 @@ int slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size(sls::ServerInterf // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ + NullObjectError(ret, mess); + } if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting actual UDP buffer size"; @@ -1879,8 +1983,11 @@ int slsReceiverTCPIPInterface::set_frames_per_file(sls::ServerInterface2 &socket int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1907,8 +2014,10 @@ int slsReceiverTCPIPInterface::check_version_compatibility(sls::ServerInterface2 memset(mess, 0, sizeof(mess)); int64_t arg = -1; // get args, return if socket crashed - if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, &arg, sizeof(arg)); + if (ret == FAIL) return FAIL; + FILE_LOG(logDEBUG1) << "Checking versioning compatibility with value " << arg; int64_t client_requiredVersion = arg; int64_t rx_apiVersion = APIRECEIVER; @@ -1948,8 +2057,11 @@ int slsReceiverTCPIPInterface::set_discard_policy(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -1978,8 +2090,11 @@ int slsReceiverTCPIPInterface::set_padding_enable(sls::ServerInterface2 &socket) int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &index, sizeof(index)) == FAIL) + socket.receiveArg(ret, mess, &index, sizeof(index)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null if (ret == OK) { @@ -2009,8 +2124,11 @@ int slsReceiverTCPIPInterface::set_deactivated_padding_enable(sls::ServerInterfa int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &enable, sizeof(enable)) == FAIL) + socket.receiveArg(ret, mess, &enable, sizeof(enable)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType != EIGER) functionNotImplemented(); @@ -2040,8 +2158,11 @@ int slsReceiverTCPIPInterface::set_readout_flags(sls::ServerInterface2 &socket) readOutFlags retval = GET_READOUT_FLAGS; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, &arg, sizeof(arg)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } if (myDetectorType == JUNGFRAU || myDetectorType == GOTTHARD || myDetectorType == MOENCH) functionNotImplemented(); @@ -2073,11 +2194,14 @@ int slsReceiverTCPIPInterface::set_adc_mask(sls::ServerInterface2 &socket) { uint32_t retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + socket.receiveArg(ret, mess, &arg, sizeof(arg)); + if(receiver == nullptr){ + NullObjectError(ret, mess); return FAIL; + } // base object not null - else if (ret == OK) { + if (ret == OK) { if (VerifyLockAndIdle(ret, mess, fnum) == OK) { FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg; receiver->setADCEnableMask(arg); @@ -2098,7 +2222,11 @@ int slsReceiverTCPIPInterface::set_dbit_list(sls::ServerInterface2 &socket) { memset(mess, 0, sizeof(mess)); sls::FixedCapacityContainer args; if (socket.receiveArg(ret, mess, &args, sizeof(args)) == FAIL) { - return FAIL; + if(receiver == nullptr){ + NullObjectError(ret, mess); + } + return FAIL; + } else if (ret == OK) { FILE_LOG(logDEBUG1) << "Setting DBIT list"; for (auto &it : args) { @@ -2124,7 +2252,9 @@ int slsReceiverTCPIPInterface::get_dbit_list(sls::ServerInterface2 &socket) { // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); - + if(receiver == nullptr){ + NullObjectError(ret, mess); + } // base object not null if (ret == OK) { retval = receiver->getDbitList(); @@ -2141,8 +2271,13 @@ int slsReceiverTCPIPInterface::set_dbit_offset(sls::ServerInterface2 &socket) { int retval = -1; // get args, return if socket crashed, ret is fail if receiver is not null - if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL) + if (socket.receiveArg(ret, mess, &arg, sizeof(arg)) == FAIL){ + if(receiver == nullptr){ + NullObjectError(ret, mess); + } return FAIL; + } + // base object not null else if (ret == OK) { From 6a81e779c1620ada10c28b8dc558dbc677f8527f Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 11:35:41 +0200 Subject: [PATCH 16/21] replaced server with receiver bug --- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 8041289f4..e43c6fe22 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -423,7 +423,7 @@ int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) { // no arg, check receiver is null socket.receiveArg(ret, mess, nullptr, 0); - if(server == nullptr) + if(receiver == nullptr) NullObjectError(ret, mess); socket.sendResult(false, ret, nullptr, 0, mess); From 57170b1c80f4e5c43210d4b604399fd3b6424561 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 12:12:05 +0200 Subject: [PATCH 17/21] pinned conda build --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0bbc8d6bf..81b60efea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,8 @@ install: - conda config --add channels slsdetectorgroup - conda update conda - conda update --all - - conda install conda-build anaconda-client + - conda install conda-build=3.17 + - conda install anaconda-client - conda install conda-verify # Useful for debugging any issues with conda From e64f57ecaca400a7e0713e2520666449a250fb2b Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 13:12:43 +0200 Subject: [PATCH 18/21] receiver --- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index e43c6fe22..b844bfdf5 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -620,7 +620,7 @@ int slsReceiverTCPIPInterface::set_detector_hostname(sls::ServerInterface2 &sock // get args, return if socket crashed, ret is fail if receiver is not null socket.receiveArg(ret, mess, hostname, MAX_STR_LENGTH); - if(server == nullptr){ + if(receiver == nullptr){ NullObjectError(ret, mess); return FAIL; } From 8f4009bfb668d9d1ce352a04e7d970e89a54b58a Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 13:27:43 +0200 Subject: [PATCH 19/21] WIP --- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 3 ++- slsSupportLib/include/DataSocket.h | 6 +++--- slsSupportLib/src/DataSocket.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index b844bfdf5..c408f0bef 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -111,7 +111,8 @@ void slsReceiverTCPIPInterface::startTCPServer() { while (true) { try { auto socket = server->accept(); - socket.setReceiveTimeout(static_cast(5E6)); + constexpr int time_us = 5000000; + socket.setReceiveTimeout(time_us); ret = decode_function(socket); // if tcp command was to exit server diff --git a/slsSupportLib/include/DataSocket.h b/slsSupportLib/include/DataSocket.h index 87de7d39d..05f008bba 100755 --- a/slsSupportLib/include/DataSocket.h +++ b/slsSupportLib/include/DataSocket.h @@ -18,9 +18,9 @@ class DataSocket { int getSocketId() const { return socketId_; } - size_t sendData(const void *buffer, size_t size); - size_t receiveData(void *buffer, size_t size); - ssize_t read(void *buffer, size_t size); + int sendData(const void *buffer, size_t size); + int receiveData(void *buffer, size_t size); + int read(void *buffer, size_t size); int setTimeOut(int t_seconds); int setReceiveTimeout(int us); void close(); diff --git a/slsSupportLib/src/DataSocket.cpp b/slsSupportLib/src/DataSocket.cpp index 9a70c5c19..a38d821d4 100755 --- a/slsSupportLib/src/DataSocket.cpp +++ b/slsSupportLib/src/DataSocket.cpp @@ -40,7 +40,7 @@ DataSocket &DataSocket::operator=(DataSocket &&move) noexcept { return *this; } -size_t DataSocket::receiveData(void *buffer, size_t size) { +int DataSocket::receiveData(void *buffer, size_t size) { size_t dataRead = 0; while (dataRead < size) { dataRead += @@ -50,7 +50,7 @@ size_t DataSocket::receiveData(void *buffer, size_t size) { return dataRead; } -ssize_t DataSocket::read(void *buffer, size_t size){ +int DataSocket::read(void *buffer, size_t size){ return ::read(getSocketId(), reinterpret_cast(buffer), size); } @@ -63,8 +63,8 @@ int DataSocket::setReceiveTimeout(int us) { } -size_t DataSocket::sendData(const void *buffer, size_t size) { - size_t dataSent = 0; +int DataSocket::sendData(const void *buffer, size_t size) { + int dataSent = 0; while (dataSent < size) { dataSent += write(getSocketId(), reinterpret_cast(buffer) + dataSent, From daa82b91a9641ae20e8daf878e6ba7107ac9bcf4 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 14:44:46 +0200 Subject: [PATCH 20/21] removed comment --- slsReceiverSoftware/include/slsReceiverTCPIPInterface.h | 1 - 1 file changed, 1 deletion(-) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 9a39e1578..19b13b3b4 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -10,7 +10,6 @@ class MySocketTCP; class ServerInterface; -// class slsReceiverImplementation; #include "slsReceiverImplementation.h" #include "ServerSocket.h" From aa2bcfa308a83509192462e1c93bd5e27fa932fb Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 28 May 2019 17:07:34 +0200 Subject: [PATCH 21/21] fixed setup udp --- .../src/slsReceiverTCPIPInterface.cpp | 59 ++++--------------- slsSupportLib/include/logger.h | 4 +- slsSupportLib/src/ServerInterface2.cpp | 12 +++- 3 files changed, 22 insertions(+), 53 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 0ed492b13..5cb082b2f 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -109,6 +109,7 @@ void slsReceiverTCPIPInterface::startTCPServer() { int ret = OK; server = sls::make_unique(portNumber); while (true) { + FILE_LOG(logDEBUG1) << "Start accept loop"; try { auto socket = server->accept(); constexpr int time_us = 5000000; @@ -422,8 +423,6 @@ int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr) NullObjectError(ret, mess); socket.sendResult(false, ret, nullptr, 0, mess); @@ -698,15 +697,16 @@ int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) { int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); - char args[6][MAX_STR_LENGTH]{}; + char args[5][MAX_STR_LENGTH]{}; char retvals[2][MAX_STR_LENGTH]{}; // get args, return if socket crashed, ret is fail if receiver is not null socket.receiveArg(ret, mess, args, sizeof(args)); - if(receiver == nullptr){ + if (receiver == nullptr){ NullObjectError(ret, mess); return FAIL; } + // base object not null if (ret == OK) { @@ -716,18 +716,10 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ //setup interfaces count int numInterfaces = atoi(args[0]) > 1 ? 2 : 1; - int selInterface = atoi(args[1]) > 1 ? 2 : 1; - - char* ip1 = args[2]; - char* ip2 = args[3]; - uint32_t port1 = atoi(args[4]); - uint32_t port2 = atoi(args[5]); - - // using the 2nd interface only - if (myDetectorType == JUNGFRAU && numInterfaces == 1 && selInterface == 2) { - ip1 = ip2; - port1 = port2; - } + char* ip1 = args[1]; + char* ip2 = args[2]; + uint32_t port1 = atoi(args[3]); + uint32_t port2 = atoi(args[4]); // 1st interface receiver->setUDPPortNumber(port1); @@ -764,15 +756,8 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ strcpy(mess,"failed to get mac adddress to listen to\n"); FILE_LOG(logERROR) << mess; } else { - // using the 2nd interface only - if (myDetectorType == JUNGFRAU && numInterfaces == 1 && selInterface == 2) { - strcpy(retvals[1],temp.c_str()); - FILE_LOG(logINFO) << "Receiver MAC Address: " << retvals[1]; - } - else { - strcpy(retvals[0],temp.c_str()); - FILE_LOG(logINFO) << "Receiver MAC Address: " << retvals[0]; - } + strcpy(retvals[0],temp.c_str()); + FILE_LOG(logINFO) << "Receiver MAC Address: " << retvals[0]; } } } @@ -829,7 +814,6 @@ int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){ - int slsReceiverTCPIPInterface::set_timer(sls::ServerInterface2 &socket) { ret = OK; memset(mess, 0, sizeof(mess)); @@ -1037,17 +1021,13 @@ int slsReceiverTCPIPInterface::get_status(sls::ServerInterface2 &socket){ memset(mess, 0, sizeof(mess)); enum runStatus retval = ERROR; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } if (ret == OK) { FILE_LOG(logDEBUG1) << "Getting Status"; - std::cout << "kalas\n"; retval = receiver->getStatus(); - std::cout << "puff\n"; FILE_LOG(logDEBUG1) << "Status:" << runStatusType(retval); } return socket.sendResult(true, ret, &retval, sizeof(retval), mess); @@ -1059,8 +1039,6 @@ int slsReceiverTCPIPInterface::start_receiver(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); - // no arg, and check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1093,8 +1071,7 @@ int slsReceiverTCPIPInterface::stop_receiver(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); - // no arg, and check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); + if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1230,8 +1207,6 @@ int slsReceiverTCPIPInterface::get_frame_index(sls::ServerInterface2 &socket){ memset(mess, 0, sizeof(mess)); int retval = -1; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1251,8 +1226,6 @@ int slsReceiverTCPIPInterface::get_frames_caught(sls::ServerInterface2 &socket){ memset(mess, 0, sizeof(mess)); int retval = -1; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1271,8 +1244,6 @@ int slsReceiverTCPIPInterface::reset_frames_caught(sls::ServerInterface2 &socket ret = OK; memset(mess, 0, sizeof(mess)); - // no arg, and check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1839,8 +1810,6 @@ int slsReceiverTCPIPInterface::restream_stop(sls::ServerInterface2 &socket){ ret = OK; memset(mess, 0, sizeof(mess)); - // no arg, and check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1904,8 +1873,6 @@ int slsReceiverTCPIPInterface::get_additional_json_header(sls::ServerInterface2 memset(mess, 0, sizeof(mess)); char retval[MAX_STR_LENGTH] = {0}; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -1964,8 +1931,6 @@ int slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size(sls::ServerInterf memset(mess, 0, sizeof(mess)); int64_t retval = -1; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } @@ -2253,8 +2218,6 @@ int slsReceiverTCPIPInterface::get_dbit_list(sls::ServerInterface2 &socket) { memset(mess, 0, sizeof(mess)); sls::FixedCapacityContainer retval; - // no arg, check receiver is null - socket.receiveArg(ret, mess, nullptr, 0); if(receiver == nullptr){ NullObjectError(ret, mess); } diff --git a/slsSupportLib/include/logger.h b/slsSupportLib/include/logger.h index 541da95b0..8de0c2f49 100755 --- a/slsSupportLib/include/logger.h +++ b/slsSupportLib/include/logger.h @@ -17,8 +17,8 @@ #endif #ifndef FILELOG_MAX_LEVEL -// #define FILELOG_MAX_LEVEL logINFO -#define FILELOG_MAX_LEVEL logDEBUG5 +#define FILELOG_MAX_LEVEL logINFO +// #define FILELOG_MAX_LEVEL logDEBUG5 #endif diff --git a/slsSupportLib/src/ServerInterface2.cpp b/slsSupportLib/src/ServerInterface2.cpp index 2eab250f5..44c53782b 100644 --- a/slsSupportLib/src/ServerInterface2.cpp +++ b/slsSupportLib/src/ServerInterface2.cpp @@ -1,5 +1,5 @@ #include "ServerInterface2.h" - +#include namespace sls { int ServerInterface2::sendResult(bool update, int ret, void *retval, @@ -24,9 +24,15 @@ int ServerInterface2::sendResult(bool update, int ret, void *retval, int ServerInterface2::receiveArg(int &ret, char *mess, void *arg, int sizeofArg) { - if (sizeofArg && receiveData(arg, sizeofArg) < 0) + assert(sizeofArg > 0); + int bytes_read = read(arg, sizeofArg); + if (bytes_read == sizeofArg) { + return defs::OK; + } else { + FILE_LOG(logERROR) << "Read: " << bytes_read << " instead of " + << sizeofArg; return defs::FAIL; - return defs::OK; + } } } // namespace sls