summaryrefslogtreecommitdiff
path: root/src/ptunnel.c
diff options
context:
space:
mode:
authorMasaq- <tilt@techie.com>2019-01-30 22:42:00 +0000
committerMasaq- <tilt@techie.com>2019-01-30 22:42:00 +0000
commit020634e1e84ab6063b0b403432002073bdaffe09 (patch)
treeef496ad9e4f2eb49bed999c469df5812c90ecf56 /src/ptunnel.c
parente5d53acbe1c11d9437648071f550d14e19439f01 (diff)
short command line options -w -a -t
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;
}