aboutsummaryrefslogtreecommitdiff
path: root/src/ptunnel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ptunnel.c')
-rw-r--r--src/ptunnel.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/ptunnel.c b/src/ptunnel.c
index 6f9fdc7..456a747 100644
--- a/src/ptunnel.c
+++ b/src/ptunnel.c
@@ -558,14 +558,22 @@ void* pt_proxy(void *args) {
if (cur->state == kProxy_start) {
pt_log(kLog_verbose, "Sending proxy request.\n");
cur->last_ack = time_as_double();
- uint16_t extended_options[3];
- extended_options[0] = htons(cur->window_size);
- extended_options[1] = htons(cur->ack_interval*1000);
- extended_options[2] = htons(cur->resend_interval*1000);
- queue_packet(fwd_sock, cur->pkt_type, (char *)extended_options, sizeof(extended_options), cur->id_no, cur->id_no,
+ uint16_t *extended_options = 0;
+ size_t extended_options_size = 0;
+ if (opts.window_size || opts.ack_interval || opts.resend_interval) {
+ extended_options = calloc(3, sizeof(uint16_t));
+ extended_options_size = 3*sizeof(uint16_t);
+ extended_options[0] = htons(opts.window_size);
+ extended_options[1] = htons(opts.ack_interval);
+ extended_options[2] = htons(opts.resend_interval);
+ }
+ queue_packet(fwd_sock, cur->pkt_type, (char *)extended_options, extended_options_size, cur->id_no, cur->id_no,
&cur->my_seq, cur->send_ring, &cur->send_idx, &cur->send_wait_ack,
cur->dst_ip, cur->dst_port, cur->state | cur->type_flag,
&cur->dest_addr, cur->next_remote_seq, &cur->send_first_ack, &cur->ping_seq, cur->window_size);
+ if (extended_options) {
+ free(extended_options);
+ }
cur->xfer.icmp_out++;
cur->state = kProto_data;
}