diff --git a/Fltk/onelab2Group.cpp b/Fltk/onelab2Group.cpp index a53162053728da4de30e2192f66d162346d397de..6517dba0730da3847079a2d67b9ffba4431becf4 100644 --- a/Fltk/onelab2Group.cpp +++ b/Fltk/onelab2Group.cpp @@ -262,7 +262,7 @@ onelabGroup::onelabGroup(int x, int y, int w, int h, const char *l) rebuildSolverList(); - OnelabDatabase::instance()->useAsClient()->setCallback(this); + if(!OnelabDatabase::instance()->isNetworkClient()) OnelabDatabase::instance()->useAsClient()->setCallback(this); } onelabGroup::~onelabGroup() { diff --git a/contrib/onelab2/OnelabAttributes.h b/contrib/onelab2/OnelabAttributes.h index 433a501960c209ae8e9ffd839066455913ed922e..f06a0e91371b196f93270ba89f239058531154aa 100644 --- a/contrib/onelab2/OnelabAttributes.h +++ b/contrib/onelab2/OnelabAttributes.h @@ -94,7 +94,7 @@ public: class OnelabAttrMessage : public OnelabAttr { private: - UInt8 *_message = NULL; + UInt8 *_message; UInt16 _messageLength; UInt8 _level; diff --git a/contrib/onelab2/OnelabLocalNetworkClient.cpp b/contrib/onelab2/OnelabLocalNetworkClient.cpp index 32cb4a5b9b11e420ed0e19922bc6926b5fba6ae5..17635b3ead351be011f08604d5701a4aa472b3f6 100644 --- a/contrib/onelab2/OnelabLocalNetworkClient.cpp +++ b/contrib/onelab2/OnelabLocalNetworkClient.cpp @@ -4,37 +4,39 @@ #ifdef HAVE_UDT OnelabLocalNetworkClient::OnelabLocalNetworkClient(std::string name, UDTSOCKET fd, unsigned int ip, unsigned short port, bool UDT) { - _name = name; + _mutex_wait = PTHREAD_MUTEX_INITIALIZER; + _name = name; _fds = 0; - _fdu = fd; - _ip.address = ip; - _ip.port = port; + _fdu = fd; + _ip.address = ip; + _ip.port = port; } #endif OnelabLocalNetworkClient::OnelabLocalNetworkClient(std::string name, Socket fd, unsigned int ip, unsigned short port) { - _name = name; - _fds = fd; - _ip.address = ip; - _ip.port = port; + _mutex_wait = PTHREAD_MUTEX_INITIALIZER; + _name = name; + _fds = fd; + _ip.address = ip; + _ip.port = port; } void OnelabLocalNetworkClient::sendto(UInt8 *buff, unsigned int len) { #ifdef HAVE_UDT - if(_fds) ip4_socket_send(_fds, buff, len); + if(_fds) ip4_socket_send(_fds, buff, len); else udt_socket_send(_fdu, buff, len); #else - ip4_socket_send(_fds, buff, len); + ip4_socket_send(_fds, buff, len); #endif } int OnelabLocalNetworkClient::recvfrom(UInt8 *buff, unsigned int maxlen) { IPv4 unused; #ifdef HAVE_UDT - if(_fds) return ip4_socket_recv(_fds, buff, maxlen, unused); - return udt_socket_recv(_fdu, buff, maxlen); + if(_fds) return ip4_socket_recv(_fds, buff, maxlen, unused); + return udt_socket_recv(_fdu, buff, maxlen); #else - return ip4_socket_recv(_fds, buff, maxlen); + return ip4_socket_recv(_fds, buff, maxlen); #endif } int OnelabLocalNetworkClient::recvmsg(OnelabProtocol &msg) diff --git a/contrib/onelab2/OnelabLocalNetworkClient.h b/contrib/onelab2/OnelabLocalNetworkClient.h index 68d499a5b8d6acbd19d103ac91c53997ba964ecb..cdc54a12fe9ec38546938ca4ebdff34c7f912783 100644 --- a/contrib/onelab2/OnelabLocalNetworkClient.h +++ b/contrib/onelab2/OnelabLocalNetworkClient.h @@ -14,26 +14,26 @@ class OnelabLocalNetworkClient private: Socket _fds; #ifdef HAVE_UDT - UDTSOCKET _fdu; + UDTSOCKET _fdu; #endif - IPv4 _ip; - std::string _name; - pthread_mutex_t _mutex_wait = PTHREAD_MUTEX_INITIALIZER; + IPv4 _ip; + std::string _name; + pthread_mutex_t _mutex_wait; public: #ifdef HAVE_UDT - OnelabLocalNetworkClient(std::string name, UDTSOCKET fd, unsigned int ip, unsigned short port, bool UDT); - UDTSOCKET getUSocket() {return _fdu;} + OnelabLocalNetworkClient(std::string name, UDTSOCKET fd, unsigned int ip, unsigned short port, bool UDT); + UDTSOCKET getUSocket() {return _fdu;} #endif - OnelabLocalNetworkClient(std::string name, Socket fd, unsigned int ip, unsigned short port); - virtual ~OnelabLocalNetworkClient(){} - void sendto(UInt8 *buff, unsigned int len); - int recvfrom(UInt8 *buff, unsigned int maxlen); + OnelabLocalNetworkClient(std::string name, Socket fd, unsigned int ip, unsigned short port); + virtual ~OnelabLocalNetworkClient(){} + void sendto(UInt8 *buff, unsigned int len); + int recvfrom(UInt8 *buff, unsigned int maxlen); int recvmsg(OnelabProtocol &msg); - Socket getSSocket() {return _fds;} - std::string getName() {return _name;} + Socket getSSocket() {return _fds;} + std::string getName() {return _name;} void updateParameter(onelab::parameter *); - unsigned int getIp() {return _ip.address;} - unsigned short getPort() {return _ip.port;} + unsigned int getIp() {return _ip.address;} + unsigned short getPort() {return _ip.port;} void run(std::string action); }; diff --git a/contrib/onelab2/OnelabNetworkClient.cpp b/contrib/onelab2/OnelabNetworkClient.cpp index 5c2fd2fe702e19ff6788f8c0323c2eb729534c75..30aaed9717cb618d67c8303b10431e575268da93 100644 --- a/contrib/onelab2/OnelabNetworkClient.cpp +++ b/contrib/onelab2/OnelabNetworkClient.cpp @@ -147,7 +147,7 @@ bool OnelabNetworkClient::connect() if(_sockname.size()) unix_socket_connect(_fds, _sockname.c_str()); else - ip4_socket_connect(_fds, _ip); + _connected = ip4_socket_connect(_fds, _ip) != -1; } else udt_socket_connect(_fdu, _ip); @@ -155,8 +155,11 @@ bool OnelabNetworkClient::connect() if(_sockname.size()) unix_socket_connect(_fds, _sockname.c_str()); else - ip4_socket_connect(_fds, _ip); + _connected = ip4_socket_connect(_fds, _ip) != -1; #endif + + if(!_connected) return false; + msg.attrs.push_back(new OnelabAttrStart(_name)); recvlen = msg.encodeMsg(buff, bufflen); sendto(buff, recvlen); diff --git a/contrib/onelab2/OnelabServer.cpp b/contrib/onelab2/OnelabServer.cpp index 40b72c48d484a19856826342a3c7b83766f533d1..8f3b950971be09d567fb3e8e4573b015ad717acd 100644 --- a/contrib/onelab2/OnelabServer.cpp +++ b/contrib/onelab2/OnelabServer.cpp @@ -836,6 +836,7 @@ void *listenOnClients(void *param) { if(msg.attrs.size()==1 && msg.attrs[0]->getAttributeType() == OnelabAttrAction::attributeType()) { std::clog << "\033[0;31m" << "Client " << cli->getName() << " ask " << ((OnelabAttrAction *)msg.attrs[0])->getClient() << " to " << ((OnelabAttrAction *)msg.attrs[0])->getAction() << "\033[0m" << std::endl; + //FIXME you may want to run the solver (see OnelabDatabase) OnelabServer::instance()->performAction(((OnelabAttrAction *)msg.attrs[0])->getAction(), ((OnelabAttrAction *)msg.attrs[0])->getClient()); } }