Skip to content

Commit b761416

Browse files
committed
Implemented proceed of TcpSession
1 parent b391ea1 commit b761416

File tree

8 files changed

+86
-39
lines changed

8 files changed

+86
-39
lines changed

server/Server.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,13 +342,17 @@ namespace simpleApp
342342
case session_status::proceed_send_fail:
343343
msg = std::string("SEND failed");
344344
break;
345-
case session_status::proceed_udp_wrong_header:
345+
case session_status::proceed_wrong_header:
346346
msg = std::string("Received message with wrong header");
347347
break;
348348
case session_status::proceed_unknown_fd:
349349
msg = std::string("Unknown fd connected");
350350
break;
351351

352+
case session_status::proceed_tcp_wrong_size:
353+
msg = std::string("Receive message has wrong size");
354+
break;
355+
352356
case session_status::proceed_udp_false_timeout:
353357
case session_status::proceed_udp_socket_was_closed:
354358
break;

server/TcpSession.cpp

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414

1515
#include <simple_lib/common.h>
1616

17+
#include "message.h"
18+
1719
namespace simpleApp
1820
{
1921
TcpSession::TcpSession(int& epollfd) : ClientSession(epollfd, "TCP")
2022
{
21-
//TODO
23+
2224
}
2325

2426
session_result TcpSession::init(socket_t masterSocket, uint16_t port)
@@ -68,7 +70,36 @@ namespace simpleApp
6870

6971
session_result TcpSession::proceed(struct epoll_event& epoll_event)
7072
{
71-
// TODO
72-
return session_result {session_status::proceed_msg_send, 0};
73+
uint8_t buffer[MESSAGE_MAX_BUFFER];
74+
auto len = recv(this->_socket, buffer, MESSAGE_MAX_BUFFER, 0);
75+
if (len == -1)
76+
return session_result {session_status::proceed_recv_fail, errno};
77+
else if (len == 0)
78+
{
79+
this->sessionClose();
80+
return session_result {session_status::proceed_disconnect};
81+
}
82+
else if (len <= sizeof(msg_headers))
83+
{
84+
const msg_headers buff = msg_headers::incorrect_msg;
85+
send(this->_socket, &buff, sizeof(buff), 0);
86+
return session_result {session_status::proceed_tcp_wrong_size};
87+
}
88+
89+
if(*reinterpret_cast<msg_headers*>(buffer) != msg_headers::client_msg)
90+
{
91+
const msg_headers buff = msg_headers::incorrect_msg;
92+
send(this->_socket, &buff, sizeof(buff), 0);
93+
return session_result {session_status::proceed_wrong_header};
94+
}
95+
96+
uint8_t buff[MESSAGE_MAX_BUFFER];
97+
98+
auto sendLen = proceedMsg(buffer, len, buff);
99+
100+
if (send(this->_socket, buff, sendLen, 0) == -1)
101+
return session_result {session_status::proceed_send_fail, errno};
102+
103+
return session_result {session_status::proceed_msg_send};
73104
}
74105
}

server/UdpSession.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
#include <unistd.h>
1818

19-
#include <simple_lib/message.h>
2019
#include <simple_lib/common.h>
2120

21+
#include "message.h"
22+
2223
namespace simpleApp
2324
{
2425
UdpSession::UdpSession(int& epollfd) : ClientSession(epollfd, "UDP")
2526
{
26-
// TODO
27+
2728
}
2829

2930
UdpSession::~UdpSession()
@@ -215,7 +216,7 @@ namespace simpleApp
215216

216217
auto sendMsgError = [this]()
217218
{
218-
const msg_headers header = msg_headers::err_server_msg;
219+
const msg_headers header = msg_headers::incorrect_msg;
219220
send(this->_socket, &header, sizeof(msg_headers), 0);
220221
};
221222

@@ -234,7 +235,7 @@ namespace simpleApp
234235
if (!(static_cast<header_base_type>(header) & static_cast<header_base_type>(msg_headers::sender_client)))
235236
{
236237
sendMsgError();
237-
return session_result {session_status::proceed_udp_wrong_header};
238+
return session_result {session_status::proceed_wrong_header};
238239
}
239240

240241
if (len == sizeof(msg_headers))
@@ -259,30 +260,23 @@ namespace simpleApp
259260

260261
default:
261262
sendMsgError();
262-
return session_result {session_status::proceed_udp_wrong_header};
263+
return session_result {session_status::proceed_wrong_header};
263264
};
264265
}
265266
else if (header == msg_headers::client_msg)
266267
{
267-
// TODO replace this with required logic
268268
uint8_t buff[MESSAGE_MAX_BUFFER];
269269

270-
const char* buff = "DELIVERED";
271-
const msg_headers buffHeader = msg_headers::server_msg;
270+
auto sendLen = proceedMsg(msgBuff, len, buff);
272271

273-
this->timerReset();
274-
275-
std::memcpy(buff, &buffHeader, sizeof(buffHeader));
276-
std::memcpy(buff + static_cast<ptrdiff_t>(sizeof(buffHeader)), buff, sizeof("DELIVERED"));
277-
278-
if (send(this->_socket, buff, sizeof(buffHeader) + sizeof("DELIVERED"), 0) == -1)
272+
if (send(this->_socket, buff, sendLen, 0) == -1)
279273
return session_result {session_status::proceed_send_fail, errno};
280274
return session_result {session_status::proceed_msg_send};
281275
}
282276
else
283277
{
284278
sendMsgError();
285-
return session_result {session_status::proceed_udp_wrong_header};
279+
return session_result {session_status::proceed_wrong_header};
286280
}
287281
}
288282
}

server/message.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "message.h"
2+
3+
#include <string>
4+
#include <cstring>
5+
6+
#include <simple_lib/common.h>
7+
8+
namespace simpleApp
9+
{
10+
ssize_t proceedMsg(uint8_t* in, ssize_t len, uint8_t* out)
11+
{
12+
// TODO replace this with required logic
13+
const msg_headers buffHeader = msg_headers::server_msg;
14+
const char* msg = "DELIVERED";
15+
const ssize_t size = sizeof("DELIVERED");
16+
17+
std::memcpy(out, &buffHeader, sizeof(buffHeader));
18+
std::memcpy(out + static_cast<ptrdiff_t>(sizeof(buffHeader)), msg, size);
19+
20+
return sizeof(buffHeader) + size;
21+
}
22+
}

server/message.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#pragma once
2+
3+
#include <stddef.h>
4+
#include <stdint.h>
5+
6+
namespace simpleApp
7+
{
8+
ssize_t proceedMsg(uint8_t* in, ssize_t len, uint8_t* out);
9+
}

server/session_result.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ namespace simpleApp
2020
proceed_recv_fail,
2121
proceed_send_fail,
2222
proceed_unknown_fd,
23+
proceed_wrong_header,
24+
25+
proceed_tcp_wrong_size,
2326

2427
proceed_udp_timer_fail,
25-
proceed_udp_wrong_header,
2628
proceed_udp_timeout,
2729
proceed_udp_false_timeout,
2830
proceed_udp_client_timeout,

simple_lib/include/simple_lib/common.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
namespace simpleApp
66
{
77
const unsigned int WAIT_TIMEOUT_SEC = 15;
8-
9-
/// Message headers.
10-
/// TCP-sessions use only "Data proceeding" group.
8+
const size_t MESSAGE_MAX_BUFFER = 1000;
119

1210
typedef uint8_t header_base_type;
1311

12+
/// Message headers.
13+
/// TCP-sessions use only "Data proceeding" group.
1414
enum class msg_headers : header_base_type
1515
{
1616
// Header flags
@@ -46,7 +46,7 @@ namespace simpleApp
4646
// Data proceeding (TCP possible)
4747
client_msg = sender_client | message,
4848
server_msg = sender_server | message,
49-
err_server_msg = sender_server | message | error // Error in client message
49+
incorrect_msg = sender_server | message | error // Error in client message
5050
};
5151

5252
typedef int socket_t;

simple_lib/include/simple_lib/message.h

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)