Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
4681-Honor-max_fragment_lenght-in-dtls.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 4681-Honor-max_fragment_lenght-in-dtls.patch of Package erlang
From 7ade7d0a7f610ba092d5ff2b612739a72f6ae107 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson <dgud@erlang.org> Date: Wed, 2 Feb 2022 10:55:09 +0100 Subject: [PATCH 1/4] Honor max_fragment_lenght in dtls 'max_fragment_lenght' was not considered when packets where packed. --- lib/ssl/src/dtls_gen_connection.erl | 16 ++++++++-------- lib/ssl/src/dtls_handshake.erl | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/ssl/src/dtls_gen_connection.erl b/lib/ssl/src/dtls_gen_connection.erl index dce727c7da..117c4c194b 100644 --- a/lib/ssl/src/dtls_gen_connection.erl +++ b/lib/ssl/src/dtls_gen_connection.erl @@ -256,7 +256,7 @@ send_handshake_flight(#state{static_env = #static_env{socket = Socket, MaxSize = min(MaxFragmentLength, ?PMTUEstimate), {Encoded, ConnectionStates} = encode_handshake_flight(lists:reverse(Flight), Version, MaxSize, Epoch, ConnectionStates0), - send_packets(Transport, Socket, Encoded), + send_packets(Transport, Socket, MaxSize, Encoded), ssl_logger:debug(LogLevel, outbound, 'record', Encoded), {State0#state{connection_states = ConnectionStates}, []}; @@ -274,7 +274,7 @@ send_handshake_flight(#state{static_env = #static_env{socket = Socket, {HsBefore, ConnectionStates1} = encode_handshake_flight(lists:reverse(Flight0), Version, MaxSize, Epoch, ConnectionStates0), {EncChangeCipher, ConnectionStates} = encode_change_cipher(ChangeCipher, Version, Epoch, ConnectionStates1), - send_packets(Transport, Socket, HsBefore ++ EncChangeCipher), + send_packets(Transport, Socket, MaxSize, HsBefore ++ EncChangeCipher), ssl_logger:debug(LogLevel, outbound, 'record', [HsBefore]), ssl_logger:debug(LogLevel, outbound, 'record', [EncChangeCipher]), {State0#state{connection_states = ConnectionStates}, []}; @@ -296,7 +296,7 @@ send_handshake_flight(#state{static_env = #static_env{socket = Socket, encode_change_cipher(ChangeCipher, Version, Epoch-1, ConnectionStates1), {HsAfter, ConnectionStates} = encode_handshake_flight(lists:reverse(Flight1), Version, MaxSize, Epoch, ConnectionStates2), - send_packets(Transport, Socket, HsBefore ++ EncChangeCipher ++ HsAfter), + send_packets(Transport, Socket, MaxSize, HsBefore ++ EncChangeCipher ++ HsAfter), ssl_logger:debug(LogLevel, outbound, 'record', [HsBefore]), ssl_logger:debug(LogLevel, outbound, 'record', [EncChangeCipher]), ssl_logger:debug(LogLevel, outbound, 'record', [HsAfter]), @@ -317,7 +317,7 @@ send_handshake_flight(#state{static_env = #static_env{socket = Socket, encode_change_cipher(ChangeCipher, Version, Epoch-1, ConnectionStates0), {HsAfter, ConnectionStates} = encode_handshake_flight(lists:reverse(Flight1), Version, MaxSize, Epoch, ConnectionStates1), - send_packets(Transport, Socket, EncChangeCipher ++ HsAfter), + send_packets(Transport, Socket, MaxSize, EncChangeCipher ++ HsAfter), ssl_logger:debug(LogLevel, outbound, 'record', [EncChangeCipher]), ssl_logger:debug(LogLevel, outbound, 'record', [HsAfter]), {State0#state{connection_states = ConnectionStates}, []}. @@ -482,12 +482,12 @@ send(Transport, {Listener, Socket}, Data) when is_pid(Listener) -> send(Transport, Socket, Data) -> % Client socket dtls_socket:send(Transport, Socket, Data). -send_packets(_Transport, _Socket, []) -> +send_packets(_Transport, _Socket, _Max, []) -> ok; -send_packets(Transport, Socket, Packets) -> - {Packet, Rest} = pack_packets(Packets, 0, ?PMTUEstimate+80, []), +send_packets(Transport, Socket, Max, Packets) -> + {Packet, Rest} = pack_packets(Packets, 0, Max, []), case send(Transport, Socket, Packet) of - ok -> send_packets(Transport, Socket, Rest); + ok -> send_packets(Transport, Socket, Max, Rest); Err -> Err end. diff --git a/lib/ssl/src/dtls_handshake.erl b/lib/ssl/src/dtls_handshake.erl index 46ee95db87..cd22c74f18 100644 --- a/lib/ssl/src/dtls_handshake.erl +++ b/lib/ssl/src/dtls_handshake.erl @@ -142,8 +142,9 @@ fragment_handshake(Bin, _) when is_binary(Bin)-> %% This is the change_cipher_spec not a "real handshake" but part of the flight Bin; fragment_handshake([MsgType, Len, Seq, _, Len, Bin], Size) -> - Bins = bin_fragments(Bin, Size), + Bins = bin_fragments(Bin, Size-26), %% Remove packet headers handshake_fragments(MsgType, Seq, Len, Bins, []). + encode_handshake(Handshake, Version, Seq) -> {MsgType, Bin} = enc_handshake(Handshake, Version), Len = byte_size(Bin), -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor