mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-03-28 10:56:51 +01:00
eap-tls-common: Handle response retransmission
This commit is contained in:
parent
9df7785fee
commit
bb98101bd4
@ -608,6 +608,51 @@ error:
|
|||||||
eap_method_error(eap);
|
eap_method_error(eap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void eap_tls_common_handle_retransmit(struct eap_state *eap,
|
||||||
|
const uint8_t *pkt, size_t len)
|
||||||
|
{
|
||||||
|
struct eap_tls_state *eap_tls = eap_get_data(eap);
|
||||||
|
uint8_t flags_version;
|
||||||
|
|
||||||
|
if (len < 1) {
|
||||||
|
l_error("%s: Request packet is too short.",
|
||||||
|
eap_get_method_name(eap));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
flags_version = pkt[0];
|
||||||
|
|
||||||
|
if (!eap_tls_validate_version(eap, flags_version)) {
|
||||||
|
l_error("%s: Version negotiation has failed.",
|
||||||
|
eap_get_method_name(eap));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags_version & EAP_TLS_FLAG_M) {
|
||||||
|
if (!eap_tls->rx_pdu_buf)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
eap_tls_send_fragmented_request_ack(eap);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!eap_tls->tx_pdu_buf || !eap_tls->tx_pdu_buf->data ||
|
||||||
|
!eap_tls->tx_pdu_buf->len)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (EAP_TLS_HEADER_LEN + eap_tls->tx_pdu_buf->len > eap_get_mtu(eap))
|
||||||
|
eap_tls_send_fragment(eap);
|
||||||
|
else
|
||||||
|
eap_tls_send_response(eap, eap_tls->tx_pdu_buf->data,
|
||||||
|
eap_tls->tx_pdu_buf->len);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
error:
|
||||||
|
eap_method_error(eap);
|
||||||
|
}
|
||||||
|
|
||||||
int eap_tls_common_settings_check(struct l_settings *settings,
|
int eap_tls_common_settings_check(struct l_settings *settings,
|
||||||
struct l_queue *secrets,
|
struct l_queue *secrets,
|
||||||
const char *prefix,
|
const char *prefix,
|
||||||
|
@ -56,6 +56,8 @@ void eap_tls_common_set_phase2_faild(struct eap_state *eap);
|
|||||||
|
|
||||||
void eap_tls_common_handle_request(struct eap_state *eap,
|
void eap_tls_common_handle_request(struct eap_state *eap,
|
||||||
const uint8_t *pkt, size_t len);
|
const uint8_t *pkt, size_t len);
|
||||||
|
void eap_tls_common_handle_retransmit(struct eap_state *eap,
|
||||||
|
const uint8_t *pkt, size_t len);
|
||||||
|
|
||||||
int eap_tls_common_settings_check(struct l_settings *settings,
|
int eap_tls_common_settings_check(struct l_settings *settings,
|
||||||
struct l_queue *secrets,
|
struct l_queue *secrets,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user