GCC Code Coverage Report


Directory: src/gate/
File: src/gate/interfaces/socop_impl.hpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 0 163 0.0%
Functions: 0 49 0.0%
Branches: 0 0 -%

Line Branch Exec Source
1 #ifndef SOCOP_IMPL_HPP_INCLUDED
2 #define SOCOP_IMPL_HPP_INCLUDED
3
4 #include "socop.hpp"
5 #include <string.h>
6
7
8
9 Socop::Result Socop::translate_result(int result)
10 {
11 return Result(result);
12 }
13
14 int Socop::translate_result(Socop::Result result)
15 {
16 return static_cast<int>(result);
17 }
18
19
20
21 SocopDriver::SocopDriver(Bytereader reader_function, void* reader_param,
22 Bytewriter writer_function, void* writer_param)
23 {
24 this->read_byte = reader_function;
25 this->read_param = reader_param;
26 this->write_byte = writer_function;
27 this->write_param = writer_param;
28 }
29
30 SocopDriver::SocopDriver()
31 {
32 this->read_byte = &SocopDriver::do_read_dispatcher;
33 this->read_param = this;
34 this->write_byte = &SocopDriver::do_write_dispatcher;
35 this->write_param = this;
36 }
37
38 SocopDriver::~SocopDriver()
39 {
40 }
41
42 Socop::Result SocopDriver::do_read(unsigned char& received_byte, bool want_more)
43 {
44 // Method needs to be overwritten by derived implementation
45 return Socop::Error_NotImpl;
46 }
47 Socop::Result SocopDriver::do_write(unsigned char byte_to_send, bool send_more)
48 {
49 // Method needs to be overwritten by derived implementation
50 return Socop::Error_NotImpl;
51 }
52
53 int SocopDriver::do_read_dispatcher(unsigned char* num, unsigned want_more, void* user_param)
54 {
55 SocopDriver* self = static_cast<SocopDriver*>(user_param);
56 Socop::Result result = self->do_read(*num, want_more ? true : false);
57 return Socop::translate_result(result);
58 }
59 int SocopDriver::do_write_dispatcher(unsigned char num, unsigned send_more, void* user_param)
60 {
61 SocopDriver* self = static_cast<SocopDriver*>(user_param);
62 Socop::Result result = self->do_write(num, send_more ? true : false);
63 return Socop::translate_result(result);
64 }
65
66
67
68
69
70 SocopClient::SocopClient()
71 {
72 memset(&this->impl, 0, sizeof(this->impl));
73 }
74
75 void SocopClient::init(SocopDriver& driver)
76 {
77 socop_client_init(&this->impl, driver.read_byte, driver.read_param, driver.write_byte, driver.write_param);
78 }
79
80 SocopClient::SocopClient(SocopDriver& driver)
81 {
82 this->init(driver);
83 }
84
85 SocopClient::Result SocopClient::reset()
86 {
87 return translate_result(socop_client_reset(&this->impl));
88 }
89 SocopClient::Result SocopClient::net_status()
90 {
91 return translate_result(socop_client_netstatus(&this->impl, 0));
92
93 }
94 SocopClient::Result SocopClient::net_start(char const* parameters, unsigned parameters_length)
95 {
96 return translate_result(socop_client_netstart(&this->impl, parameters, parameters_length));
97 }
98 SocopClient::Result SocopClient::net_stop()
99 {
100 return translate_result(socop_client_netstop(&this->impl));
101 }
102
103 SocopClient::Result SocopClient::connect(Address const& addr, Socket& new_tcp_socket)
104 {
105 return translate_result(socop_client_connect(&this->impl, &addr, &new_tcp_socket));
106 }
107 SocopClient::Result SocopClient::bind(Address const& addr, Socket& new_udp_socket)
108 {
109 return translate_result(socop_client_bind(&this->impl, &addr, &new_udp_socket));
110 }
111 SocopClient::Result SocopClient::listen(Address const& addr, Socket& new_listen_socket)
112 {
113 return translate_result(socop_client_listen(&this->impl, &addr, &new_listen_socket));
114 }
115 SocopClient::Result SocopClient::accept(Socket listen_socket, Socket& new_connection_socket)
116 {
117 return translate_result(socop_client_accept(&this->impl, listen_socket, &new_connection_socket));
118 }
119 SocopClient::Result SocopClient::close(Socket sock)
120 {
121 return translate_result(socop_client_close(&this->impl, sock));
122 }
123
124 SocopClient::Result SocopClient::receive(Socket sock, void* buffer, unsigned buffer_length, unsigned& buffer_used)
125 {
126 return translate_result(socop_client_receive(&this->impl, sock, buffer, buffer_length, &buffer_used));
127 }
128 SocopClient::Result SocopClient::receive_from(Socket sock, void* buffer, unsigned buffer_length, unsigned& buffer_used, Address& addr)
129 {
130 return translate_result(socop_client_recv_from(&this->impl, sock, buffer, buffer_length, &buffer_used, &addr));
131 }
132 SocopClient::Result SocopClient::send(Socket sock, void const* buffer, unsigned buffer_length, unsigned& buffer_sent)
133 {
134 return translate_result(socop_client_send(&this->impl, sock, buffer, buffer_length, &buffer_sent));
135 }
136 SocopClient::Result SocopClient::send_to(Socket sock, void const* buffer, unsigned buffer_length, unsigned& buffer_sent, Address const& addr)
137 {
138 return translate_result(socop_client_sendto(&this->impl, sock, buffer, buffer_length, &buffer_sent, &addr));
139 }
140
141 SocopClient::Result SocopClient::shutdown(Socket sock, unsigned flags)
142 {
143 return translate_result(socop_client_shutdown(&this->impl, sock, flags));
144 }
145 SocopClient::Result SocopClient::select(Socket sock, unsigned& flags, unsigned timeout_ms)
146 {
147 return translate_result(socop_client_select(&this->impl, sock, &flags, timeout_ms));
148 }
149 SocopClient::Result SocopClient::peer(Socket sock, Address& addr)
150 {
151 return translate_result(socop_client_peer(&this->impl, sock, &addr));
152 }
153 SocopClient::Result SocopClient::iocontrol(Socket sock, unsigned option, void* buffer, unsigned buffer_len)
154 {
155 return translate_result(socop_client_ioctl(&this->impl, sock, option, buffer, buffer_len));
156 }
157
158
159
160 class SocopServerDispatcher : public Socop
161 {
162 public:
163 static int on_reset(socop_server_t* svr, void* param, unsigned param_len)
164 {
165 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
166 Socop::Result result = obj->on_reset();
167 return Socop::translate_result(result);
168 }
169
170 static int on_netstatus(socop_server_t* svr, void* param, unsigned param_len)
171 {
172 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
173 Socop::Result result = obj->on_net_status();
174 return Socop::translate_result(result);
175 }
176 static int on_netstart(socop_server_t* svr, void* param, unsigned param_len)
177 {
178 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
179 Socop::Result result = obj->on_net_start(static_cast<char const*>(param), param_len);
180 return Socop::translate_result(result);
181 }
182
183 static int on_netstop(socop_server_t* svr, void* param, unsigned param_len)
184 {
185 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
186 Socop::Result result = obj->on_net_stop();
187 return Socop::translate_result(result);
188 }
189
190
191 static int on_connect(socop_server_t* svr, socop_addr_t const* addr, socop_socket_t* new_sock)
192 {
193 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
194 Socop::Result result = obj->on_connect(*addr, *new_sock);
195 return Socop::translate_result(result);
196 }
197
198 static int on_bind(socop_server_t* svr, socop_addr_t const* addr, socop_socket_t* new_sock)
199 {
200 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
201 Socop::Result result = obj->on_bind(*addr, *new_sock);
202 return Socop::translate_result(result);
203 }
204
205 static int on_listen(socop_server_t* svr, socop_addr_t const* addr, socop_socket_t* new_sock)
206 {
207 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
208 Socop::Result result = obj->on_listen(*addr, *new_sock);
209 return Socop::translate_result(result);
210 }
211
212 static int on_accept(socop_server_t* svr, socop_socket_t listen_sock, socop_socket_t* new_sock)
213 {
214 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
215 Socop::Result result = obj->on_accept(listen_sock, *new_sock);
216 return Socop::translate_result(result);
217 }
218
219 static int on_close(socop_server_t* svr, socop_socket_t sock, unsigned param)
220 {
221 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
222 Socop::Result result = obj->on_close(sock);
223 return Socop::translate_result(result);
224 }
225
226
227 static int on_recv(socop_server_t* svr, socop_socket_t sock, void* buffer, unsigned buffer_capacity, unsigned* buffer_used)
228 {
229 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
230 Socop::Result result = obj->on_receive(sock, buffer, buffer_capacity, *buffer_used);
231 return Socop::translate_result(result);
232 }
233
234 static int on_recvfrom(socop_server_t* svr, socop_socket_t sock, void* buffer, unsigned buffer_capacity, unsigned* buffer_used, socop_addr_t* addr)
235 {
236 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
237 Socop::Result result = obj->on_receive_from(sock, buffer, buffer_capacity, *buffer_used, *addr);
238 return Socop::translate_result(result);
239 }
240
241 static int on_send(socop_server_t* svr, socop_socket_t sock, void* buffer, unsigned buffer_length, unsigned* buffer_sent)
242 {
243 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
244 Socop::Result result = obj->on_send(sock, buffer, buffer_length, *buffer_sent);
245 return Socop::translate_result(result);
246 }
247
248 static int on_sendto(socop_server_t* svr, socop_socket_t sock, void* buffer, unsigned buffer_length, unsigned* buffer_sent, socop_addr_t* addr)
249 {
250 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
251 Socop::Result result = obj->on_send_to(sock, buffer, buffer_length, *buffer_sent, *addr);
252 return Socop::translate_result(result);
253 }
254
255 static int on_shutdown(socop_server_t* svr, socop_socket_t sock, unsigned flags)
256 {
257 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
258 Socop::Result result = obj->on_shutdown(sock, flags);
259 return Socop::translate_result(result);
260 }
261
262 static int on_select(socop_server_t* svr, socop_socket_t sock, unsigned* in_out_flags)
263 {
264 SocopServer* obj = static_cast<SocopServer*>(svr->server_param);
265 Socop::Result result = obj->on_select(sock, *in_out_flags);
266 return Socop::translate_result(result);
267 }
268
269 };
270
271
272 SocopServer::SocopServer()
273 {
274 memset(&this->impl, 0, sizeof(this->impl));
275 }
276
277 SocopServer::SocopServer(SocopDriver const& driver)
278 {
279 this->init(driver);
280 }
281
282 void SocopServer::init(SocopDriver const& driver)
283 {
284 memset(&this->impl, 0, sizeof(this->impl));
285
286 int result = socop_server_init(&this->impl, this, driver.read_byte, driver.read_param, driver.write_byte, driver.write_param);
287
288 this->impl.on_reset = &SocopServerDispatcher::on_reset;
289 this->impl.on_netstatus = &SocopServerDispatcher::on_netstatus;
290 this->impl.on_netstart = &SocopServerDispatcher::on_netstart;
291 this->impl.on_netstop = &SocopServerDispatcher::on_netstop;
292
293 this->impl.on_connect = &SocopServerDispatcher::on_connect;
294 this->impl.on_bind = &SocopServerDispatcher::on_bind;
295 this->impl.on_listen = &SocopServerDispatcher::on_listen;
296 this->impl.on_accept = &SocopServerDispatcher::on_accept;
297 this->impl.on_close = &SocopServerDispatcher::on_close;
298
299 this->impl.on_recv = &SocopServerDispatcher::on_recv;
300 this->impl.on_recvfrom = &SocopServerDispatcher::on_recvfrom;
301 this->impl.on_send = &SocopServerDispatcher::on_send;
302 this->impl.on_sendto = &SocopServerDispatcher::on_sendto;
303 this->impl.on_shutdown = &SocopServerDispatcher::on_shutdown;
304 this->impl.on_select = &SocopServerDispatcher::on_select;
305 }
306
307
308 SocopServer::~SocopServer()
309 {
310 }
311
312
313 SocopServer::Result SocopServer::chat()
314 {
315 return translate_result(socop_server_chat_once(&this->impl));
316 }
317
318
319 #endif
320