Adding a flag to the packet decoder whatever we're on the server or client side
This commit is contained in:
parent
4367736c77
commit
2aed7708ee
@ -17,8 +17,8 @@ using namespace ts;
|
||||
using namespace ts::protocol;
|
||||
using namespace ts::connection;
|
||||
|
||||
PacketDecoder::PacketDecoder(ts::connection::CryptHandler *crypt_handler)
|
||||
: crypt_handler_{crypt_handler} {
|
||||
PacketDecoder::PacketDecoder(ts::connection::CryptHandler *crypt_handler, bool is_server)
|
||||
: is_server{is_server}, crypt_handler_{crypt_handler} {
|
||||
memtrack::allocated<PacketDecoder>(this);
|
||||
}
|
||||
|
||||
@ -163,7 +163,7 @@ PacketProcessResult PacketDecoder::decode_incoming_packet(std::string& error, Pa
|
||||
crypt_key = CryptHandler::kDefaultKey;
|
||||
crypt_nonce = CryptHandler::kDefaultNonce;
|
||||
} else {
|
||||
if(!this->crypt_handler_->generate_key_nonce(true, packet_parser.type(), packet_parser.packet_id(), packet_parser.estimated_generation(), crypt_key, crypt_nonce)) {
|
||||
if(!this->crypt_handler_->generate_key_nonce(this->is_server, packet_parser.type(), packet_parser.packet_id(), packet_parser.estimated_generation(), crypt_key, crypt_nonce)) {
|
||||
return PacketProcessResult::DECRYPT_KEY_GEN_FAILED;
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ namespace ts::protocol {
|
||||
SEQUENCE_LENGTH_TOO_LONG /* unrecoverable error */
|
||||
};
|
||||
|
||||
/* TODO: Implement for the client the command overflow recovery option! */
|
||||
class PacketDecoder {
|
||||
using CommandFragment = command::CommandFragment;
|
||||
using ReassembledCommand = command::ReassembledCommand;
|
||||
@ -60,7 +61,7 @@ namespace ts::protocol {
|
||||
typedef void(*callback_decoded_command_t)(void* /* cb argument */, ReassembledCommand*& /* command */); /* must move the command, else it gets freed*/
|
||||
typedef void(*callback_send_acknowledge_t)(void* /* cb argument */, uint16_t /* packet id */, bool /* is command low */);
|
||||
|
||||
explicit PacketDecoder(connection::CryptHandler* /* crypt handler */);
|
||||
explicit PacketDecoder(connection::CryptHandler* /* crypt handler */, bool /* is server */);
|
||||
~PacketDecoder();
|
||||
|
||||
void reset();
|
||||
@ -76,6 +77,7 @@ namespace ts::protocol {
|
||||
callback_decoded_command_t callback_decoded_command{[](auto, auto&){}}; /* needs to be valid all the time! */
|
||||
callback_send_acknowledge_t callback_send_acknowledge{[](auto, auto, auto){}}; /* needs to be valid all the time! */
|
||||
private:
|
||||
bool is_server;
|
||||
connection::CryptHandler* crypt_handler_{nullptr};
|
||||
|
||||
spin_mutex incoming_generation_estimator_lock{};
|
||||
|
@ -26,15 +26,20 @@ uint16_t GenerationEstimator::visit_packet(uint16_t packet_id) {
|
||||
return this->last_generation;
|
||||
}
|
||||
} else if(this->last_packet_id <= GenerationEstimator::overflow_area_end) {
|
||||
if(packet_id >= GenerationEstimator::overflow_area_begin) /* old packet */
|
||||
if(packet_id >= GenerationEstimator::overflow_area_begin) {/* old packet */
|
||||
return this->last_generation - 1;
|
||||
if(packet_id > this->last_packet_id)
|
||||
}
|
||||
|
||||
if(packet_id > this->last_packet_id) {
|
||||
this->last_packet_id = packet_id;
|
||||
}
|
||||
|
||||
return this->last_generation;
|
||||
} else {
|
||||
/* only update on newer packet id */
|
||||
if(packet_id > this->last_packet_id)
|
||||
if(packet_id > this->last_packet_id) {
|
||||
this->last_packet_id = packet_id;
|
||||
}
|
||||
return this->last_generation;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user