Skip to content

Commit 9763d3a

Browse files
partial update, as vm at risk
1 parent 7fbdcf1 commit 9763d3a

File tree

3 files changed

+79
-24
lines changed

3 files changed

+79
-24
lines changed

common/events_common.h

+9
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,12 @@ void map_to_zmsg(const map_str_str_t & data, zmq_msg_t &msg);
5757

5858
void zmsg_to_map(zmq_msg_t &msg, map_str_str_t & data);
5959

60+
#define u32_to_s(u32) std::to_string(u32)
61+
62+
#define s_to_u32(s, u32) { stringstream _ss(s); s >> u32;}
63+
64+
int int_to_msg(uint32_t u, zmq_msg_t &msg);
65+
void msg_to_int(zmq_msg_t &msg, uint32_t &u);
66+
67+
int vec_to_msg(vector<string> &data, zmq_msg_t &msg);
68+
void msg_to_vec(zmq_msg_t &msg, vector<string> &data);

common/events_service.cpp

+61-17
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,6 @@ event_service:init_server()
4242
int
4343
event_service:echo_send(const string s)
4444
{
45-
zmq_msg_t msg_req, msg_data;
46-
int rc = zmq_msg_init_size(&snd_msg, s.size()+1);
47-
RET_ON_ERR(rc == 0, "Failed to init zmq msg for %d bytes", s.size()+1);
48-
memcpy((void *)zmq_msg_data(&snd_msg), s.str(), s.size()+1);
49-
rc = zmq_msg_send(&snd_msg, m_socket, 0);
50-
RET_ON_ERR (rc != -1, "Failed to send to %s", get_config(REQ_REP_END_KEY));
51-
out:
52-
if (rc != 0) {
53-
close();
54-
}
55-
return rc;
5645
}
5746

5847

@@ -101,18 +90,73 @@ event_service::cache_read(vector<zmq_msg_t> &lst)
10190

10291

10392
int
104-
event_service::server_read(event_req_type_t &req_code, event_service_data_t &data)
93+
event_service::channel_read(int &code, vector<string> &data)
10594
{
106-
// TODO
107-
reurn 0;
95+
int more = 0, rc;
96+
size_t more_size = sizeof (more);
97+
98+
{
99+
zmq_msg_t rcv_code;
100+
101+
zmq_msg_init(&rcv_code);
102+
rc = zmq_msg_recv(&rcv_code, m_req_socket, 0);
103+
104+
RET_ON_ERR(rc != -1, "Failed to receive code");
105+
106+
msg_to_int(rcv_code, code);
107+
zmq_msg_close(&rcv_code);
108+
}
109+
110+
rc = zmq_getsockopt (m_socket, ZMQ_RCVMORE, &more, &more_size);
111+
RET_ON_ERR(rc == 0, "Failed to get sockopt for read channel");
112+
113+
114+
if (more) {
115+
zmq_msg_t rcv_data;
116+
117+
zmq_msg_init(&rcv_data);
118+
rc = zmq_msg_recv(&rcv_data, m_req_socket, 0);
119+
RET_ON_ERR(rc != -1, "Failed to receive data");
120+
121+
rc = zmq_getsockopt (m_socket, ZMQ_RCVMORE, &more, &more_size);
122+
RET_ON_ERR(rc == 0, "Failed to get sockopt for read channel");
123+
RET_ON_ERR(!more, "Expecting more than 2 parts");
124+
125+
msg_to_vec(rcv_data, data);
126+
zmq_msg_close(&rcv_data);
127+
}
128+
out:
129+
reurn rc;
108130
}
109131

110132

111133
int
112-
event_service::server_write(int resp_code, event_service_data_t &data)
134+
event_service::channel_write(int code, vector<string> &data)
113135
{
114-
// TODO
115-
reurn 0;
136+
zmq_msg_t msg_req, msg_data;
137+
int flag = 0;
138+
139+
int rc = int_to_msg(code,msg_req);
140+
RET_ON_ERR(rc == 0, "Failed int (%d) to msg", code);
141+
142+
if (!data.empty()) {
143+
rc = vec_to_msg(code, msg_data);
144+
RET_ON_ERR(rc == 0, "Failed vec (%d) to msg", data.size());
145+
flag = ZMQ_SNDMORE;
146+
}
147+
148+
rc = zmq_msg_send (&msg_req, m_socket, flag);
149+
RET_ON_ERR(rc == 0, "Failed to send code");
150+
151+
if (flag != 0) {
152+
rc = zmq_msg_send (&msg_data, m_socket, 0);
153+
RET_ON_ERR(rc == 0, "Failed to send data");
154+
}
155+
156+
out:
157+
zmq_msg_close(&msg_req);
158+
zmq_msg_close(&msg_data);
159+
return rc;
116160
}
117161

118162
int

common/events_service.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ typedef enum {
3636
* An internal service is provided for cache handling & miscellaneous.
3737
*
3838
* Clients initialize for init_client and uses the provided services
39-
* server code init for server and use server_read & server_write
39+
* server code init for server and use read & write APIs
4040
*/
4141
class event_service {
4242
public:
@@ -154,25 +154,27 @@ class event_service {
154154
int echo_receive(string &s);
155155

156156
/*
157-
* Server instance reading request from client
157+
* The underlying read for req/resp from client/server
158158
*
159159
* Input: None
160160
*
161161
* Output:
162-
* req_code - incoming req code
162+
* code - It is event_req_type_t for request or return code
163+
* for response
163164
* data - Data read, if any
164165
*
165166
* return:
166167
* 0 - On success
167168
* -1 - On failure
168169
*/
169-
int channel_read(event_req_type_t &req_code, vector<string> &data);
170+
int channel_read(int &code, vector<string> &data);
170171

171172
/*
172-
* Server instance writing respondse to client
173+
* The under lying write for req/resp from client/server
173174
*
174175
* Input:
175-
* resp_code - Return code for the request
176+
* code - It is event_req_type_t for request or return code
177+
* for response
176178
* data - If any data to be sent along.
177179
*
178180
* Output: None
@@ -181,7 +183,7 @@ class event_service {
181183
* 0 - On success
182184
* -1 - On failure
183185
*/
184-
int channel_write(int resp_code, vector<string> &data);
186+
int channel_write(int code, vector<string> &data);
185187

186188

187189
/*

0 commit comments

Comments
 (0)