From 68d23225a38a35f1325eb39fa4ed5a005d5de473 Mon Sep 17 00:00:00 2001
From: fujuntang <fujuntang@aiot.com>
Date: 星期三, 11 八月 2021 09:50:20 +0800
Subject: [PATCH] fix from 3.1 first commit

---
 src/socket/shm_mod_socket.cpp |   47 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/src/socket/shm_mod_socket.cpp b/src/socket/shm_mod_socket.cpp
index aa02ef3..abd9477 100644
--- a/src/socket/shm_mod_socket.cpp
+++ b/src/socket/shm_mod_socket.cpp
@@ -3,18 +3,13 @@
 static Logger *logger = LoggerFactory::getLogger();
 
 
-size_t ShmModSocket::remove_keys(int keys[], size_t length) {
-	BusServerSocket::remove_subscripters(keys, length);
-	return shm_socket_remove_keys(keys, length);
-}
 
 ShmModSocket::ShmModSocket() {
-	shm_socket = shm_open_socket(SHM_SOCKET_DGRAM);
+	shm_socket = shm_socket_open(SHM_SOCKET_DGRAM);
 	bus_set = new std::set<int>;
 }
 
 ShmModSocket::~ShmModSocket() {
-  // logger->debug("Close ShmModSocket...\n");
 	struct timespec timeout = {1, 0};
 	if(bus_set != NULL) {
 		for(auto bus_iter = bus_set->begin(); bus_iter != bus_set->end(); bus_iter++) {
@@ -23,8 +18,13 @@
 		delete bus_set;
 	}
 
-	shm_close_socket(shm_socket);
+	shm_socket_close(shm_socket);
 }
+
+int ShmModSocket::stop() {
+	return shm_socket_stop(shm_socket);
+}
+
 
 int ShmModSocket::bind(int key) {
 	return  shm_socket_bind(shm_socket, key);
@@ -79,7 +79,21 @@
 */
 int ShmModSocket::sendandrecv(const void *send_buf, const int send_size, const int send_key, 
 	void **recv_buf, int *recv_size, const struct timespec *timeout, int flag){
-	return shm_sendandrecv(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, timeout, flag);
+	int rv = shm_sendandrecv(shm_socket, send_buf, send_size, send_key, recv_buf, recv_size, timeout, flag);
+
+	if(rv == 0) {
+	  logger->debug("ShmModSocket::sendandrecv:  sendandrecv to %d success.\n", send_key);
+	  return 0;
+  }
+
+  logger->debug("ShmModSocket::sendandrecv : sendandrecv to %d failed %s",  send_key, bus_strerror(rv));
+	return rv;
+}
+
+
+int ShmModSocket::recvandsend( recvandsend_callback_fn callback,
+                    const struct timespec *timeout , int flag, void * user_data ) {
+  return shm_recvandsend(shm_socket, callback, timeout, flag, user_data);
 }
  
 // // 瓒呮椂杩斿洖銆� @sec 绉� 锛� @nsec 绾崇
@@ -94,7 +108,7 @@
  * @size 涓婚闀垮害
  * @key 鎬荤嚎绔彛
  */
-int  ShmModSocket::sub(char *topic, int topic_size, int key,  
+int  ShmModSocket::sub(const char *topic, int topic_size, int key,  
 	const struct timespec *timeout, int flags) {
 	int ret;
 	bus_head_t head = {};
@@ -125,7 +139,7 @@
  * @size 涓婚闀垮害
  * @key 鎬荤嚎绔彛
  */
-int  ShmModSocket::desub(char *topic, int topic_size, int key, const struct timespec *timeout, int flags) {
+int  ShmModSocket::desub(const char *topic, int topic_size, int key, const struct timespec *timeout, int flags) {
 	// char buf[8192];
 	int ret;
 	if(topic == NULL) {
@@ -163,7 +177,7 @@
  * @content 涓婚鍐呭
  * @key 鎬荤嚎绔彛
  */
-int  ShmModSocket::pub(char *topic, int topic_size, void *content, int content_size, int key, const struct timespec *timeout, int flags) {
+int  ShmModSocket::pub(const char *topic, int topic_size, const void *content, int content_size, int key, const struct timespec *timeout, int flags) {
 	int ret;
 	bus_head_t head = {};
 	memcpy(head.action, "pub", sizeof(head.action));
@@ -196,11 +210,12 @@
 // =============================================================================
 
 int ShmModSocket::get_bus_sendbuf(bus_head_t &request_head, 
-  void *topic_buf, int topic_size, void *content_buf, int content_size, void **retbuf) {
+ const void *topic_buf, int topic_size, const void *content_buf, int content_size, void **retbuf) {
  
   int buf_size;
   char *buf;
   int  max_buf_size;
+  void *buf_ptr;
   if((buf = (char *) malloc(MAXBUF)) == NULL) {
     LoggerFactory::getLogger()->error(errno, "ShmModSocket::get_bus_sendbuf malloc");
     exit(1);
@@ -219,13 +234,15 @@
     }
   }
 
-  memcpy(buf, ShmModSocket::encode_bus_head(request_head), BUS_HEAD_SIZE);
+  buf_ptr = ShmModSocket::encode_bus_head(request_head);
+  memcpy(buf, buf_ptr, BUS_HEAD_SIZE);
   if(topic_size != 0 ) 
     memcpy(buf + BUS_HEAD_SIZE, topic_buf, topic_size);
   if(content_size != 0)
  	 memcpy(buf + BUS_HEAD_SIZE + topic_size, content_buf, content_size);
  
   *retbuf = buf;
+  free(buf_ptr);
   return buf_size;
 }
 
@@ -244,7 +261,7 @@
   tmp_ptr += sizeof(head.action);
   PUT(tmp_ptr, htonl(head.topic_size));
 
-  tmp_ptr += 4;
+  tmp_ptr += sizeof(head.topic_size);
   PUT(tmp_ptr, htonl(head.content_size));
   
   return headbs;
@@ -259,7 +276,7 @@
   tmp_ptr += sizeof(head.action);
   head.topic_size = ntohl(GET(tmp_ptr));
 
-  tmp_ptr += 4;
+  tmp_ptr += sizeof(head.topic_size);
   head.content_size = ntohl(GET(tmp_ptr));
  
   return head;

--
Gitblit v1.8.0