summaryrefslogtreecommitdiff
path: root/src/3rd_party-static
diff options
context:
space:
mode:
authorAlexandr Galiuzov <agaliuzov@luxoft.com>2015-06-13 00:39:00 +0300
committerAlexandr Galiuzov <agaliuzov@luxoft.com>2015-06-13 00:39:00 +0300
commit41e5c421e89a7cbd80131dceccdcd8c69df91de7 (patch)
tree9c91e389de200b16ec80a84ff203b9c673fded67 /src/3rd_party-static
parent63018931319ba6297c714070852ba415ed045c28 (diff)
parent84d847262b0dbc732d2d38d6654ad2056ee142c1 (diff)
downloadsdl_core-41e5c421e89a7cbd80131dceccdcd8c69df91de7.tar.gz
Merge branch 'hotfix/HMIReconnectionSupport' into release/4.0.0
Diffstat (limited to 'src/3rd_party-static')
-rw-r--r--src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp5
-rw-r--r--src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp6
-rw-r--r--src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp12
-rw-r--r--src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp13
-rw-r--r--src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp21
5 files changed, 48 insertions, 9 deletions
diff --git a/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp b/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp
index 4de9022ae1..952b250aee 100644
--- a/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp
+++ b/src/3rd_party-static/MessageBroker/include/CMessageBroker.hpp
@@ -69,6 +69,11 @@ namespace NsMessageBroker
*/
void Test();
+ /**
+ * @brief OnSocketClosed should be called if socked is closed by HMI
+ * @param fd socket descriptor
+ */
+ void OnSocketClosed(const int fd);
/**
* \brief Starts MessageBroker.
diff --git a/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp b/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp
index 81d7f79c78..55550eab3a 100644
--- a/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp
+++ b/src/3rd_party-static/MessageBroker/include/CMessageBrokerRegistry.hpp
@@ -46,6 +46,12 @@ namespace NsMessageBroker
void deleteController(std::string name);
/**
+ * \brief Remove all controllers by descriptor
+ * \param fd descriptor
+ */
+ void removeControllersByDescriptor(const int fd);
+
+ /**
* \brief adds notification subscriber to the registry.
* \param fd file descriptor of controller.
* \param name name of property which should be observed.
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp b/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp
index 127d568ffc..07f01ea128 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp
+++ b/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBroker.cpp
@@ -301,7 +301,8 @@ void CMessageBroker::onMessageReceived(int fd, std::string& aJSONData) {
return;
}
std::string wmes = p->m_recieverWriter.write(root);
- DBG_MSG(("Parsed JSON string:%s; length: %d\n", wmes.c_str(), wmes.length()));
+ DBG_MSG(("Parsed JSON string %d : %s\n", wmes.length(),
+ wmes.c_str()));
DBG_MSG(("Buffer is:%s\n", aJSONData.c_str()));
if (aJSONData.length() > wmes.length()) {
// wmes string length can differ from buffer substr length
@@ -344,6 +345,13 @@ void CMessageBroker::Test() {
}
}
+void CMessageBroker::OnSocketClosed(const int fd) {
+ DBG_MSG(("CMessageBroker::OnSocketClosed(%d)\n", fd));
+ if (p->mpRegistry) {
+ p->mpRegistry->removeControllersByDescriptor(fd);
+ }
+}
+
void CMessageBroker::startMessageBroker(CSender* pSender) {
DBG_MSG(("CMessageBroker::startMessageBroker()\n"));
p->mpSender = pSender;
@@ -663,7 +671,7 @@ void CMessageBroker_Private::processError(CMessage* pMessage) {
}
void CMessageBroker_Private::sendJsonMessage(int fd, Json::Value message) {
- DBG_MSG(("CMessageBroker::sendJsonMessage()\n"));
+ DBG_MSG(("CMessageBroker::sendJsonMessage(%d)\n", fd));
if (mpSender) {
std::string mes = m_writer.write(message);
int retVal = mpSender->Send(fd, mes);
diff --git a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp b/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
index 169a3a7a4a..2d55cecd67 100644
--- a/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
+++ b/src/3rd_party-static/MessageBroker/src/lib_messagebroker/CMessageBrokerRegistry.cpp
@@ -69,6 +69,19 @@ namespace NsMessageBroker
DBG_MSG(("Count of controllers: %d\n", mControllersList.size()));
}
+ void CMessageBrokerRegistry::removeControllersByDescriptor(const int fd) {
+ DBG_MSG(("CMessageBrokerRegistry::removeControllersByDescriptor(%d)\n",
+ fd));
+ std::map <std::string, int>::iterator it = mControllersList.begin();
+ while(it != mControllersList.end()) {
+ if (it->second == fd) {
+ deleteController((it++)->first);
+ } else {
+ ++it;
+ }
+ }
+ }
+
bool CMessageBrokerRegistry::addSubscriber(int fd, std::string name)
{
DBG_MSG(("CMessageBrokerRegistry::addSubscriber()\n"));
diff --git a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp b/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp
index 9756445ac0..ca27502b9c 100644
--- a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp
+++ b/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp
@@ -43,8 +43,11 @@ ssize_t TcpServer::Send(int fd, const std::string& data) {
int bytesToSend = rep.length();
const char* ptrBuffer = rep.c_str();
do {
- int retVal = send(fd, ptrBuffer, bytesToSend, 0);
+ int retVal = send(fd, ptrBuffer, bytesToSend, MSG_NOSIGNAL);
if (retVal == -1) {
+ if (EPIPE == errno) {
+ m_purge.push_back(fd);
+ }
return -1;
}
bytesToSend -= retVal;
@@ -54,23 +57,24 @@ ssize_t TcpServer::Send(int fd, const std::string& data) {
}
bool TcpServer::Recv(int fd) {
- DBG_MSG(("TcpServer::Recv(int fd)\n"));
+ DBG_MSG(("TcpServer::Recv(%d)\n", fd));
ssize_t nb = -1;
std::string* pReceivingBuffer = getBufferFor(fd);
std::vector<char> buf;
buf.reserve(RECV_BUFFER_LENGTH + pReceivingBuffer->size());
- DBG_MSG(("Left in pReceivingBuffer: %d : %s\n",
- pReceivingBuffer->size(), pReceivingBuffer->c_str()));
+ DBG_MSG(("Left in pReceivingBuffer: %d \n",
+ pReceivingBuffer->size()));
buf.assign(pReceivingBuffer->c_str(),
pReceivingBuffer->c_str() + pReceivingBuffer->size());
buf.resize(RECV_BUFFER_LENGTH + pReceivingBuffer->size());
- nb = recv(fd, &buf[pReceivingBuffer->size()], MAX_RECV_DATA, 0);
+ ssize_t received_bytes = recv(fd, &buf[pReceivingBuffer->size()], MAX_RECV_DATA, 0);
+ nb = received_bytes;
DBG_MSG(("Recieved %d from %d\n", nb, fd));
nb += pReceivingBuffer->size();
DBG_MSG(("Recieved with buffer %d from %d\n", nb, fd));
- if (nb > 0) {
+ if (received_bytes > 0) {
unsigned int recieved_data = nb;
if (isWebSocket(fd)) {
const unsigned int data_length =
@@ -126,6 +130,8 @@ bool TcpServer::Recv(int fd) {
return true;
}
else {
+ DBG_MSG(("Received %d bytes from %d; error = %d\n",
+ received_bytes, fd, errno));
m_purge.push_back(fd);
return false;
}
@@ -222,8 +228,9 @@ void TcpServer::WaitMessage(uint32_t ms) {
itr = m_receivingBuffers.find((*it));
if (itr != m_receivingBuffers.end())
{ // delete receiving buffer of disconnected client
- delete(*itr).second;
+ delete itr->second;
m_receivingBuffers.erase(itr);
+ mpMessageBroker->OnSocketClosed(itr->first);
}
}