mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 11:20:04 +02:00
remove mySock
This commit is contained in:
parent
e252b8e0e9
commit
c6651df1b2
@ -3220,10 +3220,10 @@ int slsDetector::setReceiverOnline(int value) {
|
|||||||
} else {
|
} else {
|
||||||
shm()->rxOnlineFlag = OFFLINE_FLAG;
|
shm()->rxOnlineFlag = OFFLINE_FLAG;
|
||||||
if (value == ONLINE_FLAG) {
|
if (value == ONLINE_FLAG) {
|
||||||
// connect and set offline flag
|
// Connect and ask for receiver id to verify that
|
||||||
auto receiver =
|
// it's online and working
|
||||||
ReceiverSocket(shm()->rxHostname, shm()->rxTCPPort);
|
int64_t retval{0};
|
||||||
receiver.close();
|
sendToReceiver(F_GET_RECEIVER_ID, nullptr, retval);
|
||||||
shm()->rxOnlineFlag = ONLINE_FLAG;
|
shm()->rxOnlineFlag = ONLINE_FLAG;
|
||||||
if (shm()->receiverAPIVersion == 0) {
|
if (shm()->receiverAPIVersion == 0) {
|
||||||
checkReceiverVersionCompatibility();
|
checkReceiverVersionCompatibility();
|
||||||
|
@ -299,6 +299,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
int set_dbit_offset(sls::ServerInterface2 &socket);
|
int set_dbit_offset(sls::ServerInterface2 &socket);
|
||||||
|
|
||||||
|
|
||||||
|
int LogSocketCrash();
|
||||||
|
void NullObjectError(int& ret, char* mess);
|
||||||
|
|
||||||
/** detector type */
|
/** detector type */
|
||||||
detectorType myDetectorType;
|
detectorType myDetectorType;
|
||||||
|
|
||||||
@ -309,25 +312,25 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket);
|
int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket);
|
||||||
|
|
||||||
/** Message */
|
/** Message */
|
||||||
char mess[MAX_STR_LENGTH];
|
char mess[MAX_STR_LENGTH]{"dummy message"};
|
||||||
|
|
||||||
/** success/failure */
|
/** success/failure */
|
||||||
int ret;
|
int ret{OK};
|
||||||
|
|
||||||
/** function index */
|
/** function index */
|
||||||
int fnum;
|
int fnum{-1};
|
||||||
|
|
||||||
/** Lock Status if server locked to a client */
|
/** Lock Status if server locked to a client */
|
||||||
int lockStatus;
|
int lockStatus{0};
|
||||||
|
|
||||||
/** kill tcp server thread */
|
/** kill tcp server thread */
|
||||||
int killTCPServerThread;
|
int killTCPServerThread{0};
|
||||||
|
|
||||||
/** thread for TCP server */
|
/** thread for TCP server */
|
||||||
pthread_t TCPServer_thread;
|
pthread_t TCPServer_thread;
|
||||||
|
|
||||||
/** tcp thread created flag*/
|
/** tcp thread created flag*/
|
||||||
bool tcpThreadCreated;
|
bool tcpThreadCreated{false};
|
||||||
|
|
||||||
/** port number */
|
/** port number */
|
||||||
int portNumber;
|
int portNumber;
|
||||||
@ -345,16 +348,16 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
* we write depending on file write enable
|
* we write depending on file write enable
|
||||||
* users get data to write depending on call backs registered
|
* users get data to write depending on call backs registered
|
||||||
*/
|
*/
|
||||||
int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*);
|
int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*) = nullptr;
|
||||||
void *pStartAcquisition;
|
void *pStartAcquisition{nullptr};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call back for acquisition finished
|
* Call back for acquisition finished
|
||||||
* callback argument is
|
* callback argument is
|
||||||
* total frames caught
|
* total frames caught
|
||||||
*/
|
*/
|
||||||
void (*acquisitionFinishedCallBack)(uint64_t, void*);
|
void (*acquisitionFinishedCallBack)(uint64_t, void*) = nullptr;
|
||||||
void *pAcquisitionFinished;
|
void *pAcquisitionFinished{nullptr};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -365,7 +368,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
* dataSize in bytes is the size of the data in bytes.
|
* dataSize in bytes is the size of the data in bytes.
|
||||||
*/
|
*/
|
||||||
void (*rawDataReadyCallBack)(char* ,
|
void (*rawDataReadyCallBack)(char* ,
|
||||||
char*, uint32_t, void*);
|
char*, uint32_t, void*) = nullptr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call back for raw data (modified)
|
* 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).
|
* 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* ,
|
void (*rawDataModifyReadyCallBack)(char* ,
|
||||||
char*, uint32_t &, void*);
|
char*, uint32_t &, void*) = nullptr;
|
||||||
|
|
||||||
void *pRawDataReady;
|
void *pRawDataReady{nullptr};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/** Socket */
|
|
||||||
MySocketTCP* mySock;
|
|
||||||
|
|
||||||
std::unique_ptr<sls::ServerSocket> server{nullptr};
|
std::unique_ptr<sls::ServerSocket> server{nullptr};
|
||||||
|
|
||||||
/** client interface */
|
|
||||||
ServerInterface* interface;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int VerifyLock(int &ret, char *mess);
|
int VerifyLock(int &ret, char *mess);
|
||||||
int VerifyLockAndIdle(int &ret, char *mess, int fnum);
|
int VerifyLockAndIdle(int &ret, char *mess, int fnum);
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "FixedCapacityContainer.h"
|
#include "FixedCapacityContainer.h"
|
||||||
#include "MySocketTCP.h"
|
|
||||||
#include "ServerSocket.h"
|
#include "ServerSocket.h"
|
||||||
#include "ServerInterface.h"
|
#include "ServerInterface.h"
|
||||||
#include "slsReceiver.h"
|
#include "slsReceiver.h"
|
||||||
@ -13,6 +12,7 @@
|
|||||||
#include "slsReceiverTCPIPInterface.h"
|
#include "slsReceiverTCPIPInterface.h"
|
||||||
#include "slsReceiverUsers.h"
|
#include "slsReceiverUsers.h"
|
||||||
#include "versionAPI.h"
|
#include "versionAPI.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@ -26,45 +26,12 @@
|
|||||||
|
|
||||||
slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() {
|
slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() {
|
||||||
stop();
|
stop();
|
||||||
delete mySock;
|
|
||||||
mySock=nullptr;
|
|
||||||
delete interface;
|
|
||||||
delete receiver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn):
|
slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn):
|
||||||
myDetectorType(GOTTHARD),
|
myDetectorType(GOTTHARD),
|
||||||
receiver(nullptr),
|
portNumber(pn > 0 ? pn : DEFAULT_PORTNO + 2)
|
||||||
ret(OK),
|
|
||||||
fnum(-1),
|
|
||||||
lockStatus(0),
|
|
||||||
killTCPServerThread(0),
|
|
||||||
tcpThreadCreated(false),
|
|
||||||
portNumber(DEFAULT_PORTNO+2),
|
|
||||||
mySock(nullptr),
|
|
||||||
interface(nullptr)
|
|
||||||
{
|
{
|
||||||
//***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();
|
function_table();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +53,6 @@ void slsReceiverTCPIPInterface::stop(){
|
|||||||
if (tcpThreadCreated) {
|
if (tcpThreadCreated) {
|
||||||
FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber;
|
FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber;
|
||||||
killTCPServerThread = 1;
|
killTCPServerThread = 1;
|
||||||
// if(mySock) mySock->ShutDownSocket();
|
|
||||||
if(server)
|
if(server)
|
||||||
server->shutDownSocket();
|
server->shutDownSocket();
|
||||||
FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
|
FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
|
||||||
@ -134,30 +100,17 @@ void* slsReceiverTCPIPInterface::startTCPServerThread(void *this_pointer){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void slsReceiverTCPIPInterface::startTCPServer() {
|
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 "
|
FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port "
|
||||||
<< portNumber << std::endl;
|
<< portNumber << std::endl;
|
||||||
int ret = OK;
|
int ret = OK;
|
||||||
|
|
||||||
server = sls::make_unique<sls::ServerSocket>(portNumber);
|
server = sls::make_unique<sls::ServerSocket>(portNumber);
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
std::cout << "<--------- hej\n";
|
|
||||||
auto socket = server->accept();
|
auto socket = server->accept();
|
||||||
std::cout << "<--------- hej2\n";
|
socket.setReceiveTimeout(10000);
|
||||||
socket.setTimeOut(1);
|
|
||||||
socket.setReceiveTimeout(1000);
|
|
||||||
std::cout << "<--------- hej3\n";
|
|
||||||
ret = decode_function(socket);
|
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 tcp command was to exit server
|
||||||
if (ret == GOODBYE) {
|
if (ret == GOODBYE) {
|
||||||
@ -165,8 +118,6 @@ void slsReceiverTCPIPInterface::startTCPServer() {
|
|||||||
if (receiver) {
|
if (receiver) {
|
||||||
receiver->shutDownUDPSockets();
|
receiver->shutDownUDPSockets();
|
||||||
}
|
}
|
||||||
|
|
||||||
mySock->exitServer();
|
|
||||||
FILE_LOG(logINFOBLUE)
|
FILE_LOG(logINFOBLUE)
|
||||||
<< "Exiting [ TCP server Tid: " << syscall(SYS_gettid)
|
<< "Exiting [ TCP server Tid: " << syscall(SYS_gettid)
|
||||||
<< "]";
|
<< "]";
|
||||||
@ -254,43 +205,38 @@ int slsReceiverTCPIPInterface::function_table(){
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsReceiverTCPIPInterface::decode_function(sls::ServerInterface2 &socket) {
|
int slsReceiverTCPIPInterface::decode_function(sls::ServerInterface2 &socket) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
std::cout << "<------ decode 1\n";
|
|
||||||
int n = socket.read(&fnum, sizeof(fnum));
|
int n = socket.read(&fnum, sizeof(fnum));
|
||||||
std::cout << "<------ decode 2\n";
|
|
||||||
if (n <= 0) {
|
if (n <= 0) {
|
||||||
FILE_LOG(logDEBUG3) << "Could not read socket. "
|
FILE_LOG(logDEBUG3)
|
||||||
"Received " << n << " bytes," <<
|
<< "Could not read socket. Received " << n
|
||||||
"fnum:" << fnum << " "
|
<< " bytes, fnum:" << fnum << " ("
|
||||||
"(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ")";
|
<< getFunctionNameFromEnum((enum detFuncs)fnum) << ")";
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
FILE_LOG(logDEBUG3) << "Received " << n << " bytes";
|
FILE_LOG(logDEBUG3) << "Received " << n << " bytes";
|
||||||
|
}
|
||||||
if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) {
|
if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) {
|
||||||
FILE_LOG(logERROR) << "Unknown function enum " << fnum;
|
FILE_LOG(logERROR) << "Unknown function enum " << fnum;
|
||||||
ret = (this->M_nofunc)(socket);
|
ret = (this->M_nofunc)(socket);
|
||||||
} else {
|
} else {
|
||||||
FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " "
|
FILE_LOG(logDEBUG1) << "calling function fnum: " << fnum << " ("
|
||||||
"(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") "
|
<< getFunctionNameFromEnum((enum detFuncs)fnum)
|
||||||
"located at " << flist[fnum];
|
<< ") located at " << flist[fnum];
|
||||||
ret = (this->*flist[fnum])(socket);
|
ret = (this->*flist[fnum])(socket);
|
||||||
|
|
||||||
if (ret == FAIL) {
|
if (ret == FAIL) {
|
||||||
FILE_LOG(logDEBUG1) << "Failed to execute function = " << fnum << " ("
|
FILE_LOG(logDEBUG1)
|
||||||
|
<< "Failed to execute function = " << fnum << " ("
|
||||||
<< getFunctionNameFromEnum((enum detFuncs)fnum) << ")";
|
<< getFunctionNameFromEnum((enum detFuncs)fnum) << ")";
|
||||||
} else FILE_LOG(logDEBUG1) << "Function " <<
|
} else
|
||||||
getFunctionNameFromEnum((enum detFuncs)fnum) << " executed OK";
|
FILE_LOG(logDEBUG1)
|
||||||
|
<< "Function " << getFunctionNameFromEnum((enum detFuncs)fnum)
|
||||||
|
<< " executed OK";
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void slsReceiverTCPIPInterface::functionNotImplemented() {
|
void slsReceiverTCPIPInterface::functionNotImplemented() {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Function (%s) is not implemented for this detector\n",
|
sprintf(mess, "Function (%s) is not implemented for this detector\n",
|
||||||
@ -322,9 +268,6 @@ int slsReceiverTCPIPInterface::M_nofunc(sls::ServerInterface2 &socket){
|
|||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
|
|
||||||
// to receive any arguments
|
|
||||||
|
|
||||||
socket.setReceiveTimeout(500);
|
|
||||||
int n = 1;
|
int n = 1;
|
||||||
while (n > 0)
|
while (n > 0)
|
||||||
n = socket.read(mess, MAX_STR_LENGTH);
|
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) {
|
int slsReceiverTCPIPInterface::get_last_client_ip(sls::ServerInterface2 &socket) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
auto ip = server->getLastClient().str();
|
char ip[INET_ADDRSTRLEN]{};
|
||||||
return socket.sendResult(true, ret, &ip.front(), ip.length()+1, nullptr);
|
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;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int p_number = -1;
|
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)
|
if (socket.receiveArg(ret, mess, &p_number, sizeof(p_number)) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
// verify if receiver is unlocked
|
|
||||||
if (VerifyLock(ret, mess) == OK) {
|
if (VerifyLock(ret, mess) == OK) {
|
||||||
// port number too low
|
|
||||||
if (p_number < 1024) {
|
if (p_number < 1024) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,"Port Number (%d) too low\n", p_number);
|
sprintf(mess,"Port Number (%d) too low\n", p_number);
|
||||||
FILE_LOG(logERROR) << mess;
|
FILE_LOG(logERROR) << mess;
|
||||||
} else {
|
} else {
|
||||||
FILE_LOG(logINFO) << "set port to " << p_number <<std::endl;
|
FILE_LOG(logINFO) << "set port to " << p_number <<std::endl;
|
||||||
strcpy(oldLastClientIP, mySock->lastClientIP);
|
|
||||||
// create new socket
|
|
||||||
try {
|
try {
|
||||||
mySocket = new MySocketTCP(p_number);
|
auto new_server = sls::make_unique<sls::ServerSocket>(p_number);
|
||||||
strcpy(mySock->lastClientIP,oldLastClientIP);
|
new_server->setLockedBy(server->getLockedBy());
|
||||||
|
new_server->setLastClient(server->getLastClient());
|
||||||
|
server = std::move(new_server);
|
||||||
} catch(SocketError &e) {
|
} catch(SocketError &e) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
// same socket, could not bind port
|
|
||||||
sprintf(mess, "%s", e.what());
|
sprintf(mess, "%s", e.what());
|
||||||
FILE_LOG(logERROR) << mess;
|
FILE_LOG(logERROR) << mess;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
@ -473,13 +410,6 @@ int slsReceiverTCPIPInterface::set_port(sls::ServerInterface2 &socket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
socket.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();
|
|
||||||
delete mySock;
|
|
||||||
mySock = mySocket;
|
|
||||||
interface->SetSocket(mySock);
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,10 +435,11 @@ int slsReceiverTCPIPInterface::update_client(sls::ServerInterface2 &socket) {
|
|||||||
int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) {
|
int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
int i32 = -1;
|
int i32 = -1;
|
||||||
char cstring[MAX_STR_LENGTH] = {0};
|
char cstring[MAX_STR_LENGTH]{};
|
||||||
|
|
||||||
|
char ip[INET_ADDRSTRLEN]{};
|
||||||
n += socket.sendData(mySock->lastClientIP,sizeof(mySock->lastClientIP));
|
sls::strcpy_safe(ip, server->getLastClient().str().c_str());
|
||||||
|
n += socket.sendData(ip,sizeof(ip));
|
||||||
|
|
||||||
// filepath
|
// filepath
|
||||||
strcpy(cstring, receiver->getFilePath().c_str());
|
strcpy(cstring, receiver->getFilePath().c_str());
|
||||||
@ -600,9 +531,6 @@ int slsReceiverTCPIPInterface::send_update(sls::ServerInterface2 &socket) {
|
|||||||
i32=receiver->getDbitOffset();
|
i32=receiver->getDbitOffset();
|
||||||
n += socket.sendData(&i32, sizeof(i32));
|
n += socket.sendData(&i32, sizeof(i32));
|
||||||
|
|
||||||
// if (!lockStatus)
|
|
||||||
// strcpy(mySock->lastClientIP, mySock->thisClientIP);
|
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,10 +596,6 @@ int slsReceiverTCPIPInterface::set_detector_type(sls::ServerInterface2 &socket){
|
|||||||
receiver->registerCallBackRawDataReady(rawDataReadyCallBack,pRawDataReady);
|
receiver->registerCallBackRawDataReady(rawDataReadyCallBack,pRawDataReady);
|
||||||
if(rawDataModifyReadyCallBack)
|
if(rawDataModifyReadyCallBack)
|
||||||
receiver->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack,pRawDataReady);
|
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);
|
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) {
|
int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
|
static_assert(sizeof(ROI) == 4*sizeof(int), "ROI not packed");
|
||||||
int narg = -1;
|
int narg = -1;
|
||||||
std::vector <ROI> arg;
|
socket.read(&narg,sizeof(narg));
|
||||||
|
|
||||||
// receive arguments
|
std::vector <ROI> arg;
|
||||||
if (mySock->ReceiveDataOnly(&narg,sizeof(narg)) < 0 )
|
|
||||||
return interface->Server_SocketCrash();
|
|
||||||
for (int iloop = 0; iloop < narg; ++iloop) {
|
for (int iloop = 0; iloop < narg; ++iloop) {
|
||||||
ROI temp;
|
ROI temp{};
|
||||||
if ( mySock->ReceiveDataOnly(&temp.xmin, sizeof(int)) < 0 )
|
socket.read(&temp, sizeof(temp));
|
||||||
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();
|
|
||||||
arg.push_back(temp);
|
arg.push_back(temp);
|
||||||
}
|
}
|
||||||
FILE_LOG(logDEBUG1) << "Set ROI narg: " << narg;
|
FILE_LOG(logDEBUG1) << "Set ROI narg: " << narg;
|
||||||
@ -750,14 +677,11 @@ int slsReceiverTCPIPInterface::set_roi(sls::ServerInterface2 &socket) {
|
|||||||
|
|
||||||
// base object not null
|
// base object not null
|
||||||
else if (receiver == nullptr)
|
else if (receiver == nullptr)
|
||||||
interface->Server_NullObjectError(ret, mess);
|
NullObjectError(ret, mess);
|
||||||
else {
|
else {
|
||||||
// only set
|
|
||||||
// verify if receiver is unlocked and idle
|
|
||||||
if (VerifyLockAndIdle(ret, mess, fnum) == OK)
|
if (VerifyLockAndIdle(ret, mess, fnum) == OK)
|
||||||
ret = receiver->setROI(arg);
|
ret = receiver->setROI(arg);
|
||||||
}
|
}
|
||||||
arg.clear();
|
|
||||||
return socket.sendResult(true, ret, nullptr, 0, mess);
|
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){
|
int slsReceiverTCPIPInterface::setup_udp(sls::ServerInterface2 &socket){
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
char args[6][MAX_STR_LENGTH] = {{""}, {""}, {""}, {""}, {""}, {""}};
|
char args[6][MAX_STR_LENGTH]{};
|
||||||
char retvals[2][MAX_STR_LENGTH] = {{""}, {""}};
|
char retvals[2][MAX_STR_LENGTH]{};
|
||||||
|
|
||||||
// get args, return if socket crashed, ret is fail if receiver is not null
|
// get args, return if socket crashed, ret is fail if receiver is not null
|
||||||
if (socket.receiveArg(ret, mess, args, sizeof(args)) == FAIL)
|
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) {
|
else if (ret == OK) {
|
||||||
// set
|
// set
|
||||||
if (enable >= 0) {
|
if (enable >= 0) {
|
||||||
// verify if receiver is unlocked and idle
|
|
||||||
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
||||||
FILE_LOG(logDEBUG1) << "Setting deactivated padding enable: " << enable;
|
FILE_LOG(logDEBUG1) << "Setting deactivated padding enable: " << enable;
|
||||||
receiver->setDeactivatedPadding(enable > 0 ? true : false);
|
receiver->setDeactivatedPadding(enable > 0 ? true : false);
|
||||||
@ -2154,14 +2077,10 @@ int slsReceiverTCPIPInterface::set_adc_mask(sls::ServerInterface2 &socket) {
|
|||||||
|
|
||||||
// base object not null
|
// base object not null
|
||||||
else if (ret == OK) {
|
else if (ret == OK) {
|
||||||
// set
|
|
||||||
// verify if receiver is unlocked and idle
|
|
||||||
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
||||||
FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg;
|
FILE_LOG(logDEBUG1) << "Setting ADC enable mask: " << arg;
|
||||||
receiver->setADCEnableMask(arg);
|
receiver->setADCEnableMask(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get
|
|
||||||
retval = receiver->getADCEnableMask();
|
retval = receiver->getADCEnableMask();
|
||||||
if (ret == OK && retval != arg) {
|
if (ret == OK && retval != arg) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
@ -2185,7 +2104,7 @@ int slsReceiverTCPIPInterface::set_dbit_list(sls::ServerInterface2 &socket) {
|
|||||||
FILE_LOG(logDEBUG1) << it << " ";
|
FILE_LOG(logDEBUG1) << it << " ";
|
||||||
}
|
}
|
||||||
FILE_LOG(logDEBUG1) << "\n";
|
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) {
|
if (args.size() > 64) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not set dbit list as size is > 64\n");
|
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
|
} else
|
||||||
receiver->setDbitList(args);
|
receiver->setDbitList(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return socket.sendResult(true, ret, nullptr, 0, mess);
|
return socket.sendResult(true, ret, nullptr, 0, mess);
|
||||||
}
|
}
|
||||||
@ -2209,7 +2126,6 @@ int slsReceiverTCPIPInterface::get_dbit_list(sls::ServerInterface2 &socket) {
|
|||||||
|
|
||||||
// base object not null
|
// base object not null
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
// get
|
|
||||||
retval = receiver->getDbitList();
|
retval = receiver->getDbitList();
|
||||||
FILE_LOG(logDEBUG1) << "Dbit list size retval:" << retval.size();
|
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
|
// base object not null
|
||||||
else if (ret == OK) {
|
else if (ret == OK) {
|
||||||
// set
|
|
||||||
if (arg >= 0) {
|
if (arg >= 0) {
|
||||||
// verify if receiver is unlocked and idle
|
|
||||||
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
if (VerifyLockAndIdle(ret, mess, fnum) == OK) {
|
||||||
FILE_LOG(logDEBUG1) << "Setting Dbit offset: " << arg;
|
FILE_LOG(logDEBUG1) << "Setting Dbit offset: " << arg;
|
||||||
receiver->setDbitOffset(arg);
|
receiver->setDbitOffset(arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// get
|
|
||||||
retval = receiver->getDbitOffset();
|
retval = receiver->getDbitOffset();
|
||||||
validate(arg, retval, std::string("set dbit offset"), DEC);
|
validate(arg, retval, std::string("set dbit offset"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Dbit offset retval: " << retval;
|
FILE_LOG(logDEBUG1) << "Dbit offset retval: " << retval;
|
||||||
|
@ -20,7 +20,7 @@ class DataSocket {
|
|||||||
}
|
}
|
||||||
size_t sendData(const void *buffer, size_t size);
|
size_t sendData(const void *buffer, size_t size);
|
||||||
size_t receiveData(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 setTimeOut(int t_seconds);
|
||||||
int setReceiveTimeout(int us);
|
int setReceiveTimeout(int us);
|
||||||
void close();
|
void close();
|
||||||
|
@ -19,6 +19,7 @@ class ServerSocket : public DataSocket {
|
|||||||
constexpr IpAddr getThisClient() noexcept { return thisClient; }
|
constexpr IpAddr getThisClient() noexcept { return thisClient; }
|
||||||
constexpr IpAddr getLockedBy() noexcept { return lockedBy; }
|
constexpr IpAddr getLockedBy() noexcept { return lockedBy; }
|
||||||
void setLockedBy(IpAddr addr){ lockedBy = addr; }
|
void setLockedBy(IpAddr addr){ lockedBy = addr; }
|
||||||
|
void setLastClient(IpAddr addr){ lastClient = addr; }
|
||||||
int getPort() const;
|
int getPort() const;
|
||||||
void SendResult(int &ret, void *retval, int retvalSize, char *mess);
|
void SendResult(int &ret, void *retval, int retvalSize, char *mess);
|
||||||
|
|
||||||
@ -27,7 +28,6 @@ class ServerSocket : public DataSocket {
|
|||||||
IpAddr lastClient;
|
IpAddr lastClient;
|
||||||
IpAddr lockedBy;
|
IpAddr lockedBy;
|
||||||
int serverPort;
|
int serverPort;
|
||||||
// char lastClient_[INET_ADDRSTRLEN]{};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}; // namespace sls
|
}; // namespace sls
|
@ -17,8 +17,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FILELOG_MAX_LEVEL
|
#ifndef FILELOG_MAX_LEVEL
|
||||||
// #define FILELOG_MAX_LEVEL logINFO
|
#define FILELOG_MAX_LEVEL logINFO
|
||||||
#define FILELOG_MAX_LEVEL logDEBUG5
|
// #define FILELOG_MAX_LEVEL logDEBUG5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ size_t DataSocket::receiveData(void *buffer, size_t size) {
|
|||||||
return dataRead;
|
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<char *>(buffer), size);
|
return ::read(getSocketId(), reinterpret_cast<char *>(buffer), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user