@@ -4653,22 +4653,22 @@ const uint8_t* picoquic_decode_path_challenge_frame(picoquic_cnx_t* cnx, const u
4653
4653
/* If multipath is not enabled, we must verify that the addresses
4654
4654
* source (addr_from) matches the peer address if known. */
4655
4655
if (addr_from == NULL ||
4656
- picoquic_compare_addr (addr_from , (struct sockaddr * )& path_x -> peer_addr ) == 0 ) {
4656
+ picoquic_compare_addr (addr_from , (struct sockaddr * )& path_x -> first_tuple -> peer_addr ) == 0 ) {
4657
4657
/* If the source address matches, we must verify that the destination
4658
4658
* address also matches. Given how the socket code works there will be cases
4659
4659
* when the local port is now yet known. In that case, we only compare
4660
4660
* the IP address component . Otherwise, we compare the whole address.
4661
4661
*/
4662
4662
if (addr_to == NULL ||
4663
- (picoquic_get_addr_port ((struct sockaddr * )& path_x -> local_addr ) == 0 &&
4664
- picoquic_compare_ip_addr (addr_to , (struct sockaddr * )& path_x -> local_addr ) == 0 ) ||
4665
- picoquic_compare_addr (addr_to , (struct sockaddr * )& path_x -> local_addr ) == 0 ) {
4663
+ (picoquic_get_addr_port ((struct sockaddr * )& path_x -> first_tuple -> local_addr ) == 0 &&
4664
+ picoquic_compare_ip_addr (addr_to , (struct sockaddr * )& path_x -> first_tuple -> local_addr ) == 0 ) ||
4665
+ picoquic_compare_addr (addr_to , (struct sockaddr * )& path_x -> first_tuple -> local_addr ) == 0 ) {
4666
4666
is_valid = 1 ;
4667
4667
}
4668
4668
}
4669
4669
}
4670
4670
if (is_valid ) {
4671
- path_x -> challenge_response = challenge_response ;
4671
+ path_x -> first_tuple -> challenge_response = challenge_response ;
4672
4672
path_x -> response_required = 1 ;
4673
4673
}
4674
4674
else {
@@ -4678,8 +4678,8 @@ const uint8_t* picoquic_decode_path_challenge_frame(picoquic_cnx_t* cnx, const u
4678
4678
path_x -> unique_path_id ,
4679
4679
picoquic_addr_text (addr_from , buf1 , sizeof (buf1 )),
4680
4680
picoquic_addr_text (addr_to , buf2 , sizeof (buf2 )),
4681
- picoquic_addr_text ((struct sockaddr * )& path_x -> peer_addr , buf3 , sizeof (buf3 )),
4682
- picoquic_addr_text ((struct sockaddr * )& path_x -> local_addr , buf4 , sizeof (buf4 ))
4681
+ picoquic_addr_text ((struct sockaddr * )& path_x -> first_tuple -> peer_addr , buf3 , sizeof (buf3 )),
4682
+ picoquic_addr_text ((struct sockaddr * )& path_x -> first_tuple -> local_addr , buf4 , sizeof (buf4 ))
4683
4683
);
4684
4684
}
4685
4685
}
@@ -4717,7 +4717,7 @@ const uint8_t* picoquic_decode_path_response_frame(picoquic_cnx_t* cnx, const ui
4717
4717
int found_nat_challenge = 0 ;
4718
4718
4719
4719
for (int ichal = 0 ; ichal < PICOQUIC_CHALLENGE_REPEAT_MAX ; ichal ++ ) {
4720
- if (response == path_x -> challenge [ichal ]) {
4720
+ if (response == path_x -> first_tuple -> challenge [ichal ]) {
4721
4721
found_challenge = 1 ;
4722
4722
break ;
4723
4723
}
@@ -4733,9 +4733,9 @@ const uint8_t* picoquic_decode_path_response_frame(picoquic_cnx_t* cnx, const ui
4733
4733
if (found_nat_challenge && !path_x -> challenge_verified ) {
4734
4734
/* while probing NAT, the NAT response arrived before the normal path response */
4735
4735
/* Update the addresses */
4736
- picoquic_store_addr (& path_x -> local_addr , (struct sockaddr * )& path_x -> nat_local_addr );
4736
+ picoquic_store_addr (& path_x -> first_tuple -> local_addr , (struct sockaddr * )& path_x -> nat_local_addr );
4737
4737
picoquic_update_peer_addr (path_x , (struct sockaddr * )& path_x -> nat_peer_addr );
4738
- path_x -> if_index_dest = path_x -> if_index_nat_dest ;
4738
+ path_x -> first_tuple -> if_index_dest = path_x -> if_index_nat_dest ;
4739
4739
/* if useful, update the CID */
4740
4740
if (path_x -> p_remote_nat_cnxid != NULL ) {
4741
4741
picoquic_dereference_stashed_cnxid (cnx , path_x , 0 );
@@ -4751,7 +4751,7 @@ const uint8_t* picoquic_decode_path_response_frame(picoquic_cnx_t* cnx, const ui
4751
4751
path_x -> challenge_verified = 1 ;
4752
4752
4753
4753
/* Provide a qualified time estimate from challenge time */
4754
- picoquic_update_path_rtt (cnx , path_x , path_x , -1 , path_x -> challenge_time_first , current_time , 0 , 0 );
4754
+ picoquic_update_path_rtt (cnx , path_x , path_x , -1 , path_x -> first_tuple -> challenge_time_first , current_time , 0 , 0 );
4755
4755
4756
4756
if (cnx -> are_path_callbacks_enabled &&
4757
4757
cnx -> callback_fn (cnx , path_x -> unique_path_id , NULL , 0 , picoquic_callback_path_available ,
@@ -4788,7 +4788,7 @@ int picoquic_should_repeat_path_response_frame(picoquic_cnx_t* cnx, const uint8_
4788
4788
int path_index = -1 ;
4789
4789
4790
4790
for (int i = 0 ; i < cnx -> nb_paths ; i ++ ) {
4791
- if (cnx -> path [i ]-> challenge_response == response ) {
4791
+ if (cnx -> path [i ]-> first_tuple -> challenge_response == response ) {
4792
4792
path_index = i ;
4793
4793
break ;
4794
4794
}
@@ -6077,7 +6077,7 @@ uint8_t* picoquic_prepare_observed_address_frame(uint8_t* bytes, const uint8_t*
6077
6077
{
6078
6078
if (!path_x -> observed_addr_acked &&
6079
6079
path_x -> nb_observed_repeat < 4 &&
6080
- path_x -> peer_addr .ss_family != AF_UNSPEC ) {
6080
+ path_x -> first_tuple -> peer_addr .ss_family != AF_UNSPEC ) {
6081
6081
int is_needed = 0 ;
6082
6082
6083
6083
if (path_x -> nb_observed_repeat == 0 ) {
@@ -6100,14 +6100,14 @@ uint8_t* picoquic_prepare_observed_address_frame(uint8_t* bytes, const uint8_t*
6100
6100
uint8_t * ip_addr = NULL ;
6101
6101
uint16_t port = 0 ;
6102
6102
6103
- if (path_x -> peer_addr .ss_family == AF_INET6 ) {
6104
- struct sockaddr_in6 * addr = (struct sockaddr_in6 * )& path_x -> peer_addr ;
6103
+ if (path_x -> first_tuple -> peer_addr .ss_family == AF_INET6 ) {
6104
+ struct sockaddr_in6 * addr = (struct sockaddr_in6 * )& path_x -> first_tuple -> peer_addr ;
6105
6105
ftype = picoquic_frame_type_observed_address_v6 ;
6106
6106
ip_addr = (uint8_t * )& addr -> sin6_addr ;
6107
6107
port = ntohs (addr -> sin6_port );
6108
6108
}
6109
6109
else {
6110
- struct sockaddr_in * addr = (struct sockaddr_in * )& path_x -> peer_addr ;
6110
+ struct sockaddr_in * addr = (struct sockaddr_in * )& path_x -> first_tuple -> peer_addr ;
6111
6111
ftype = picoquic_frame_type_observed_address_v4 ;
6112
6112
ip_addr = (uint8_t * )& addr -> sin_addr ;
6113
6113
port = ntohs (addr -> sin_port );
@@ -6174,18 +6174,18 @@ const uint8_t* picoquic_decode_observed_address_frame(picoquic_cnx_t* cnx, const
6174
6174
picoquic_connection_error_ex (cnx , PICOQUIC_TRANSPORT_FRAME_FORMAT_ERROR ,
6175
6175
ftype , "bad observed address frame" );
6176
6176
}
6177
- else if (sequence > path_x -> observed_address_received || (path_x -> observed_address_received == 0 && path_x -> observed_addr .ss_family == AF_UNSPEC )) {
6177
+ else if (sequence > path_x -> observed_address_received || (path_x -> observed_address_received == 0 && path_x -> first_tuple -> observed_addr .ss_family == AF_UNSPEC )) {
6178
6178
/* We only update the observed address if this is a new value*/
6179
6179
path_x -> observed_address_received = sequence ;
6180
6180
if ((ftype & 1 ) == 0 ) {
6181
- struct sockaddr_in * o_addr = (struct sockaddr_in * )& path_x -> observed_addr ;
6181
+ struct sockaddr_in * o_addr = (struct sockaddr_in * )& path_x -> first_tuple -> observed_addr ;
6182
6182
memset (o_addr , 0 , sizeof (struct sockaddr_in ));
6183
6183
o_addr -> sin_family = AF_INET ;
6184
6184
memcpy (& o_addr -> sin_addr , addr , 4 );
6185
6185
o_addr -> sin_port = htons (port );
6186
6186
}
6187
6187
else {
6188
- struct sockaddr_in6 * o_addr = (struct sockaddr_in6 * )& path_x -> observed_addr ;
6188
+ struct sockaddr_in6 * o_addr = (struct sockaddr_in6 * )& path_x -> first_tuple -> observed_addr ;
6189
6189
memset (o_addr , 0 , sizeof (struct sockaddr_in6 ));
6190
6190
o_addr -> sin6_family = AF_INET6 ;
6191
6191
memcpy (& o_addr -> sin6_addr , addr , 16 );
@@ -6278,7 +6278,7 @@ const uint8_t* picoquic_decode_bdp_frame(picoquic_cnx_t* cnx, const uint8_t* byt
6278
6278
else if (lifetime > current_time ) {
6279
6279
uint8_t * client_ip ;
6280
6280
uint8_t client_ip_length ;
6281
- picoquic_get_ip_addr ((struct sockaddr * ) & path_x -> peer_addr , & client_ip , & client_ip_length );
6281
+ picoquic_get_ip_addr ((struct sockaddr * ) & path_x -> first_tuple -> peer_addr , & client_ip , & client_ip_length );
6282
6282
/* Store received BDP, but only if the IP address of the client matches the
6283
6283
* value found in the ticket */
6284
6284
if (saved_ip_length > 0 && client_ip_length == saved_ip_length &&
0 commit comments