@@ -192,7 +192,7 @@ hash_key(const int af, const struct sockaddr_storage *addr)
192
192
return key ;
193
193
}
194
194
195
- #if defined(MODULE_REDIR ) || defined( MODULE_REMOTE )
195
+ #if defined(MODULE_REDIR )
196
196
static int
197
197
construct_udprelay_header (const struct sockaddr_storage * in_addr ,
198
198
char * addr_header )
@@ -497,6 +497,7 @@ new_remote(int fd, server_ctx_t *server_ctx)
497
497
498
498
ctx -> fd = fd ;
499
499
ctx -> server_ctx = server_ctx ;
500
+ ctx -> af = AF_UNSPEC ;
500
501
501
502
ev_io_init (& ctx -> io , remote_recv_cb , fd , EV_READ );
502
503
ev_timer_init (& ctx -> watcher , remote_timeout_cb , server_ctx -> timeout ,
@@ -755,15 +756,9 @@ remote_recv_cb(EV_P_ ev_io *w, int revents)
755
756
756
757
rx += buf -> len ;
757
758
758
- char addr_header_buf [512 ];
759
759
char * addr_header = remote_ctx -> addr_header ;
760
760
int addr_header_len = remote_ctx -> addr_header_len ;
761
761
762
- if (remote_ctx -> af == AF_INET || remote_ctx -> af == AF_INET6 ) {
763
- addr_header_len = construct_udprelay_header (& src_addr , addr_header_buf );
764
- addr_header = addr_header_buf ;
765
- }
766
-
767
762
// Construct packet
768
763
brealloc (buf , buf -> len + addr_header_len , buf_size );
769
764
memmove (buf -> data + addr_header_len , buf -> data , buf -> len );
@@ -1215,6 +1210,8 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
1215
1210
// detect destination mismatch
1216
1211
if (remote_ctx -> addr_header_len != addr_header_len
1217
1212
|| memcmp (addr_header , remote_ctx -> addr_header , addr_header_len ) != 0 ) {
1213
+ remote_ctx -> addr_header_len = addr_header_len ;
1214
+ memcpy (remote_ctx -> addr_header , addr_header , addr_header_len );
1218
1215
if (dst_addr .ss_family != AF_INET && dst_addr .ss_family != AF_INET6 ) {
1219
1216
need_query = 1 ;
1220
1217
}
0 commit comments