-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changes.txt
726 lines (642 loc) · 36.5 KB
/
Changes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
Version 4.9.6 - 4/17/2018
When a response proxy sends a PROXY_KEY message, send it on all public
multicast addresses, not just the first one
Version 4.9.5 - 12/16/2017
Upated encryption module to support OpenSSL 1.1.x and 1.0.x.
Removed support for OpenSSL 0.9.8
Changed install directory of uftpd uftpproxyd to /usr/bin
Added CPPFLAGS to makefile for build hardening as requested by Debian
Version 4.9.4 - 10/7/2017
When initializing TFMCC loss history, use datapacketsize if no recent packets
found or if counter wraps. This fixes a divide-by-zero bug.
Only run postreceive script when the incoming file has not yet been closed.
This prevents the script from running twice if a duplicate DONE is received.
Clarified documentation regarding incompatibility of temp dir and sync mode.
Version 4.9.3 - 1/21/2017
Fixed a race condition in the server between the sending and receiving
threads when building CONG_CTRL messages. The receiving thread was
not locking when placing messages on a queue. Added proper locking.
Minor updates to includes and typedefs to support 64-bit Windows builds.
Now requires Visual Studio 2015 or higher.
Changed manpage formatting and makefile options as suggested by Debian team.
Added missing include for sys/time.h
Version 4.9.2 - 4/3/2016
Under TFMCC when a client first experiences loss, it calculates the average
packet size of the packets received either in the last GRTT or the last
64K packets, whichever is less. In the event the sequence number of the
first lost packet is the same as the first packet received (which can
happen due to wraparound), this wasn't being captures properly resulting
in a divide by zero bug. Made a fix to properly account for sequence
number wraparound.
When calculating the average packet size above, a cast was used that could
result in a negative number being returned for this value. Removed the
offending cast.
Fixed off-by-one bug when counting the number of DONE messages sent by the
server before declaring clients as lost.
Version 4.9.1 - 3/15/2016
A bug was introduced in 4.8.1 when a fix was made for received files having
extra bytes appended when packets were received out of order. When a
file's size is an exact multiple of the block size, the last block was
getting truncated. Made a fix to account for this case.
Version 4.9 - 2/28/2016
Added the -a option to the server, which specifies the maximum number of
passes through transmitting a file before aborting any clients that have
not yet received the entire file.
When specifying TFMCC mode, the initial, minimum, and maximum rates were
being read as bytes per second instead of the documented Kbps. These
fields are now being properly read as Kbps.
In TFMCC mode, when the CLR received a CONG_CTRL message, it was responding
with a CC_ACK before updating its RTT value, resulting in the CLR reporting
an outdated RTT. Made a fix to first update the RTT, then send the CC_ACK.
Version 4.8.1 - 2/4/2016
When the last data block in the file arrived at the receiver out-of-order,
additional null bytes were being appended to the end of the file. This
was due to a bug in calculating the current cache size. Bug fixed.
Clients normally check for sufficient free space before attempting to receive
a file. This was not working correctly when -t was specified. Bug fixed.
Version 4.8 - 1/5/2016
Added support for initial and minimum rates for TFMCC as well as a max rate.
These may be specified as follows:
-C tfmcc:min=min_rate:init=init_rate:max=max_rate
See the man page for more details.
Changed logging level for "invalid message" messages from level 1 to level 4.
This should cut down on unnecessary log messages at lower levels.
Fixed man page typos.
Version 4.7 - 5/16/2015
Added group instance ID (i.e. restart number) to all log messages.
Make sure that the client flushes the disk cache when a session is aborted.
This wasn't being done previously, resulting in unnecessary retransmissions
on the subsequent restart session.
Previously, when a client registers via a proxy, the server added that client
to the list of clients serviced by that proxy. There was a bug that
allowed a client sending back multiple registers to be added to this list
multiple times, resulting in a buffer overrun if there are a large number
of clients registering via a given proxy. Fixed the bug by removing the
list altogether, since the server doesn't really care which proxy a
client registers via.
Version 4.6.1 - 3/15/2015
At the start of the transfer phase with congestion control enabled, the
server would sometimes select a client that had dropped out earlier in
the session as the initial CLR, slowing down the file transfer. Fixed.
In restart mode for a partially sent file, the server sends a DONE right
away before sending data to get NAKs from the clients. The clients
normally have a short delay before responding to a DONE to ensure that
out of order data packets arrive. In this case, since no data has been
sent yet, the clients will now respond right away to avoid the unneeded
delay.
When the clients joins or leaves a multicast group, it checks to see if any
other active sessions are using that group before doing so. Fixed a bug
that prevented the client from searching the whole list.
Version 4.6 - 12/30/2014
Added the -F option to the client to print status info to a file. Like
the server's -s option, passing in @LOG mixes this info with the regular
logging output.
The client now prints the hostname/IP address where an ANNOUNCE originates
from, which may be either the server itself or a proxy. The -q option
was added to prevent DNS lookups in the event it causes delays.
Several spelling fixes in documentation and code comments.
Fixed a memory leak in the fingerprint parsing routine.
Version 4.5.1 - 9/14/2014
On the rare occasion a seek call made by the client errors or returns a
file offset that was unexpected, a second call to seek is made to set the
destination file offset to the proper place. However, this second seek
was jumping to the wrong place in the file. This has been fixed, and
a similar fix was made on the server as well.
Allow the -s (status file) option on the server to take a special value of
@LOG, which allows status info to be mixed with the regular logging output.
This behavior is consistent with older versions that did this when sync
mode was enabled.
Version 4.5 - 8/26/2014
Added disk caching on the client, greatly improving high speed throughput.
The cache size is controlled via the -c option.
Changed logging levels on several log statements so that effectively
level 0 is "error" and level 1 is "warning". The default log level of 2
will continue to contain semi-detailed logging.
Increased client timeout for REG_CONF and DONE_CONF to 4*robust*grtt.
This helps to prevent client from timing out too early.
When the server receives a REGISTER or FILEINFO_ACK from a client and
calculates its round trip time, enforce a lower limit of 0.01 seconds.
This prevent client from timing out too quickly.
Occurrences of SIGPIPE while writing to a log could result in an infinite
loop. SIGPIPE is now ignored, relying on normal error handling instead.
Version 4.4 - 7/22/2014
Added max rate option to TFMCC implementation
Added -U option to server to specify the server's UID
Removed stale UFTP3 congestion control code
Version 4.3.1 - 7/3/2014
Have clients send an ABORT for all active sessions on shutdown
Fixed #ifs that enable dual mode sockets
Removed -O0 from BSD section of makefile
Version 4.3 - 5/27/2014
Added support for ECN (Explicit Congestion Notification) in the TFMCC
implementation in the server and client. Proxy support is forthcoming.
See the man pages for known supported systems.
Fixed warning in encrypt_openssl.c when compiling under FreeBSD x64.
Explicitly enable dual mode IPv4/IPv6 sockets when IPv6 is used on systems
that support it.
Version 4.2 - 5/12/2014
Added distinct exit codes for various error conditions
In client and proxy, check if private address is already in use before joining
Fixed log rolling under Windows
Version 4.1.5 - 3/1/2014
Fixed casting bug in server TFMCC operations when calculating client rate.
Fixed server proxy bug where group round trip time was being read from
client messages when it should only be read from server messages.
Version 4.1.4 - 12/5/2013
During a restart session, a bug caused the full file to be resent on the
first pass, and client wouldn't send back NAKs for the first session.
This has been fixed.
Fixed incorrect reading of client ID lists in DONE, DONE_CONF, and CONG_CTRL
messages.
Added group ID and file ID to server logging when timestamps are enabled.
Added more warning checks for Linux and corrected warnings.
Cleaned up error checking code for malloc and calloc calls.
Version 4.1.3 - 10/13/2013
Since 4.0, compilation failed on MacOSX. This has been fixed.
Version 4.1.2 - 8/20/2013
Fixed client pathname checking that disallows ".." path elements.
Server wasn't writing clients to the restart file that didn't send a
COMPLETE message for the session. Bug fixed.
Version 4.1.1 - 8/8/2013
Fixed byte ordering issue in EXT_FREESPACE_INFO extension.
Version 4.1 - 7/30/2013
Changed the way the server handles NAKs from the clients. Instead of
rewinding its current position as soon as NAKs are received, the server
will wait until the end of the pass, then start a new pass. This more
closely resembles version 3.x behavior.
Added special metafiles @DELETE:{filename}, which deletes filename on the
client, and @FREESPACE, which reports the available free disk space on
the client's primary destination directory.
Upon receiving a FILEINFO, a client will abort if it doesn't have enough
free disk space to receive the file.
Added -S option to server to write parsable status information to a separate
log file. This information was previously available only with the -z
option, and -z will no longer print this info without -S.
Added -N option which specifies the maximum NAK percentage a client may
report before potentially getting dropped. Also added related -m option,
which specifies the number of times a client can exceed the maximum NAK
percentage before it is dropped.
Reinstated the -W option, which specifies the maximum file transfer time as
a percentage of the optimal time.
Added -i option to client to allow moving files one at a time from the temp
directory to the dest directory. This option is necessary to prevent
previously received files in dest from being deleted when full directories
are received.
Added -u option to server to specify outgoing UDP port number.
Added log rolling to the server, client, and proxy. The -g option specifies
the max log file size in MB before rolling, and the -n option specifies
the number of rolled log files to save.
The server may now specify clients by their IPv4 name/address as well as
their ID, assuming the clients in question use their IPv4 address as their
ID, making for cleaner backward compatibility with version 3.x.
Fixed several bugs in the TFMCC implementation:
Fixed counter wraparound issue.
Fixed crash when more than a few hundred clients are active.
Fixed bug which caused rate to be set to 0.
Fixed crash when sending an empty file.
Added signal handlers in server so that it will save restart info if the
user interrupts it.
Fixed issue with printing of client IDs in server.
Dependency fixes in makefile
Version 4.0 - 4/27/2013
Added support for IPv6. On systems that support dual stack IPv4/IPv6
sockets, clients and proxies may listen on multicast groups for both
IP versions.
Dynamically determine round trip time to clients and base control message
retransmissions and timeouts on that. Old server timing options
-A, -S, -a, -s, -r, -d, -W, and -m are no longer used, with -r and -s
options repurposed to put constraints on round trip time calculations and
control message retransmission counts.
The server no longer waits for client responses in the middle of sending a
file. Multiple threads are used to send data packets while reading client
responses, resulting in shorter overall transmission times. Also, clients
won't send back STATUS messages unless they require retranmissions of data
packets, reducing to amount of back traffic the server must handle.
Replaced simple congestion control scheme with TCP Friendly Multicast
Congestion Control (TFMCC) as specified in RFC 4654.
Upgraded available security protocols, including support for Elliptic Curve
Diffe-Hellman key exchange, Elliptic Curve DSA signatures, AES in GCM
and CCM authenticated modes, and SHA-384 and SHA-512 hashing. As a result
of this, the key fingerprinting algorithm has changed, so existing RSA
keys will have different signatures.
Clients and proxies are now always identified by a 32-bit ID instead of their
local IPv4 address. This ID will be derived from either the local IPv4 or
IPv6 address if not explicitly specified.
The format of the server list file on the client and the client/proxy list
files on the server have changed as a result of the new method of
identifying clients. See the man pages for more details.
Modified protocol to support the above new features and to be more
extendable in the face of future upgrades. While these changes break
backward compatibility with 3.x versions, the added support for header
extensions should prevent future instances of this.
Version 3.7.2 - 3/17/2013
When a client aborts and isn't using a temp directory, delete the current file
Version 3.7.1 - 10/21/2012
Fixed bug where clients would occasionally fail to register in open
group mode if the client doesn't have a UID assigned. First appeared
in version 3.4.3.
With a congestion control file in use, the speed wouldn't increase if
the max_rate parameter was not specified in the congestion control
config file. First appeared in version 3.6. Fixed.
Under Windows, a postreceive script with a .bat extension wouldn't
execute. Bug fixed.
Version 3.7 - 6/28/2012
Added the much-requested option to the client to run an external command
upon receiving a file. See the -s option.
Increased the maximum number of recognized network interfaces to 100.
Fixed data corruption bug caused by a file write error on the client.
Version 3.6.1 - 12/12/2011
Reverted the change in 3.6 that allowed the client and proxy to bind
only to one interface. Doing so breaks multicast on UNIX-like systems.
Version 3.6 - 12/3/2011
Added option (-N) to client and proxy to specify process priority.
Default behavior change: prior to this release on UNIX-like systems,
the client and proxy had a default nice() value of -20. The new
default is 0.
Added max_rate parameter to congestion control config file. Previously,
with congestion control enabled, the initial rate would be the max rate.
This parameter allows a max rate to be set separate from the initial rate.
On client and proxy, if only interface is specified to -I (or if -I is not
specified and only one non-loopback interface is detected), the
client/proxy will bind only to that interface. If more than one is
specified or detected, it will bind to all interfaces. Prior to this
release, it would always bind to all interfaces.
Explicitly disable MTU discovery on systems that support it. Since the
server specifies the MTU, it doesn't make sense to allow this.
When using a congestion control file, it is reread at each DONE interval.
This allows an external process to adjust the parameters on the fly based
on network conditions or business rules.
Fixed bug where a proxy wouldn't properly handle an ABORT from a client.
Fixed bug that would cause all clients to abort on when max file transfer
timeout was exceeded.
Fixed server bug where -j wouldn't work if specified before -H.
Version 3.5.1 - 7/10/2011
Send COMPLETE(rejected) instead of ABORT for file/path issues.
Allow server to send broadcast packets.
Improved memory management in server.
Proxy wasn't propagating COMPLETE status upsteam. Fixed.
Filenames passed to server are no longer checked on startup. They are
instead checked as they are handled.
Fixed proxy bug in open group mode where a client's address isn't detected.
Fixed a few proxy bounds checking issues.
Version 3.5 - 6/17/2011
Added sync mode - Incoming files won't overwrite existing files
unless the existing file is older. In this mode the server's output
displays whether a file is copied, overwritten, or skipped, and also
displays a count of each at the end of the session. See -z on the server.
Added sync preview mode - like sync mode, except no files are actually
transferred. The server displays the status of each file (copy,
overwrite, or skip) had it actually been copied. See -Z on the server.
When using -D on the server to specify the destination file name, an
absolute pathname may be specified. Clients must be configured to
allow incoming absolute pathnames.
Allow clients to specify multiple destination directories. The client will
allow an incoming file with an absolute pathname if it matches at least
one destination directory.
Added a simple congestion control method controlled by a config file.
See the -C option to the server.
Added backup directory option to client. If an incoming file would overwrite
an existing file, the existing file is backed up. See -A on the client.
Added option to client to use an individual temp file for each incoming
file as opposed to a temp directory for all files. See -t on the client.
Added configurable logging levels to server, client, and proxy. See -x.
Added ability to send proxy heartbeat messages from clients. See -H and -h.
Fixed bug where clients assigned a UID don't register properly.
Fixed crash when reading from config files with blank lines.
Version 3.4.3 - 4/23/2011
Under Windows, allow use of the system key container for private keys.
See -y on the server, and -m on the client and proxy for more details.
Previously, when a client registered with a server in open group membership
mode, it responded using the IP of the first network interface, which is
not necessarily the interface the ANNOUNCE was received on. The client
now responds with a blank IP, telling the server/proxy to use the source
IP of the incoming packet as the client's IP.
Enabled NO_ENCRYPTION compile flag on Windows.
Version 3.4.2 - 3/29/2011
Fixed error when passing "-Y none" to the server
The pidfile option (-P) for the client and proxy didn't work under
Windows. It does now.
Improved internal error checking.
Version 3.4.1 - 2/21/2011
Fixed crash in Windows when receiving an empty file
Extended the late register and late done timers to 1.5 times the old values.
This gives clients a little extra time to send responses.
Clients now send a COMPLETE in response to a FILEINFO for a directory or
a symbolic link, eliminating an extra DONE/COMPLETE cycle.
Clients may now accept a FILEINFO in lieu of a REG_CONF. This eliminates
a timing issue when a REG_CONF gets lost.
Version 3.4 - 12/18/2010
Added new proxy mode: response proxy
Used when servers have direct multicast accessibility to clients, but
response aggregation is still desired.
Fixed overflow bug when calculating packet rate with jumbo frames.
Fixed server bug when checking maximum size of file exclusion list.
Fixed bug in BSD systems where setting of DSCP/TOS value failed.
Updated documentation regarding Windows support for DSCP/TOS.
Version 3.3.3 - 11/26/2010
Added -Q option to server, client, and proxy to specify the DSCP
(formerly TOS) in the IP header for all outgoing packets.
Increased max announce time and status time from 10000 to 20000 ms.
Version 3.3.2 - 10/13/2010
Added DESTDIR option to makefile to allow installs in fake root directories.
Fixed overflow bug with session longer than 30 minutes.
Added examples to man pages
Version 3.3.1 - 7/18/2010
Added -i option to server to take list of file to send.
Added -T option to server to always print timestamps.
Fixed bug introduced in 3.3 where a single dropped REG_CONF
results in a client not being able to register.
Added makefile support for Darwin/OSX.
Improved error handling.
Version 3.3 - 7/8/2010
Added ability to restart failed file transfers (see server -f and -F).
Removed timeout option from proxy (-o) and client (-t)
The server specified status_time is used instead.
Allow proxies to keep track of multiple pending messages at once.
Added makefile flags to compile without encryption support.
Fixed handling of snprintf return codes under Windows.
Have proxies foward ABORTs after local handling.
Version 3.2.1 - 6/16/2010
Under Windows, setting the root directory of a drive (c:\, d:\, etc.) as
the destination directory caused errors. Fixed.
When trying to send unicast to a client behind a NAT, the client would
reject the transfer because the IP specified by the server doesn't
match the client's IP. Clients will now always accept in unicast mode.
Version 3.2 - 5/30/2010
Fixed compile bug on OSX (cleaned up signal setup)
Added detection of non-multicast interfaces
Added unique ID to clients and proxies. This allows for distinguishing
clients between different NATs that might have the same IP address.
Version 3.1 - 4/6/2010
Added ability to send empty directories and symbolic links
Added -l option to server to follow / not follow links
Added -D option to server to specify destination file name
Fixed client bug when receiving a file with the same name as an
existing directory and vice versa
Version 3.0 - 3/11/2010
Added SSL derived encryption.
Uses RSA for host authentication and key exchange.
Uses DES, Triple DES, AES-128, and AES-256 for data encryption.
Ability to send multiple files or full directories at once.
Clients may be listed in a file instead of the server command line.
Added proxy daemon which allows:
NAT traversal
Aggregation of client responses
Multicast tunneling
Support for variable packet sizes.
Removed latency levels in favor of more fine grained control.
Support for source specific multicast.
Protocol heavily altered to support new features.
Code completely restructured and reformatted for ease of updates and support.
Version 2.10.3 - 1/21/2010
Fixed ttl bug under Solaris where no value was valid
Cleaned up handling of server timeout so an extra DONE request isn't sent
Changed Windows sockets error messages to use proper system message strings
Version 2.10.2 - 11/3/2009
The change in 2.10.1 that fixed the NAK issue caused a crash when sending
or receiving empty files. This has been fixed.
When specifying the list of interfaces for the client to listen on, if the
interfaces are listed by name only the first was used. Bug fixed.
Cleaned up more warnings on Windows
Version 2.10.1 - 8/20/2009
Fix for last packet wait bug, introduced in 2.3
Fix for NAKs with block counts a multiple of the section size
Fixed ttl bug - now uses actual number instead of ascii value of the
number. This also results in the default ttl changing from 49 to
the intended value of 1, so this may have an effect on existing apps.
Thanks to Luc Tanguay for finding these bugs
Cleaned up some warnings on Windows
Version 2.10 - 7/16/2009
Added -B option to client and server to set UDP receive buffer size.
Defaults to the old hardcoded value of 256K.
Added -z option to server, which tells clients to make responses as
small as possible. This minimizes backtraffic when you have a
large number of receivers.
Adjusted timeouts to work together better.
Server now exits if invalid hosts are specified.
Fixed some minor logging bugs.
Version 2.9.2 - 6/20/2009
Getting the list of network interfaces is no longer mandatory. If
there's a problem getting the list, and you don't pass -I to the
client, it just uses the clients hostname interface as before
Fixed bounds checking on the server's -R and -c options, and
increased the maximum valid value for -c to 60000 (60 seconds).
Fixes to run properly under FreeBSD, including:
Use signal(2) instead of sigset(2) for signal processing
Use getifaddrs to get list of network interfaces
Try a smaller value for the receive buffer if the first fails
Version 2.9.1 - 6/13/2009
Allow the full 10000 receivers for closed group membership as well as
open. Multiple ANNOUNCE message are now sent to accommodate the
longer lists.
Minor modifications to compile under OpenVMS.
Fallback to listening on the client's hostname interface if interface
list contains no active non-loopback interfaces.
Got rid of debug message on startup on Windows boxes.
Version 2.9 - 6/8/2009
After numerous complaints from Linux users, the uftpd client now listens
for multicast traffic on all non-loopback interfaces by default. You
can still restrict the interfaces using the -I option.
The -I option for both the client and server will take interface names
(ex. eth0, bge1, etc.) as well as hostnames or IPs.
Broke out implementations in header files into separate source files
Commoned up all UNIX-like makefiles
Version 2.8.1 - 5/18/2009
Pidfile option to uftpd wasn't optional as documented. It is now.
Fixed bug in reporting of total time. Was previously looking for newest
end timestamp among all receivers, now only checking completed ones.
Version 2.8 - 4/26/2009
Functionality change: Instead of the server sending a REG_CONF separately
to each client, it sends one listing up to 300 clients, and more if
required. These are sent out before each subsequent ANNOUNCE and, in
closed group mode, after receiving REGISTERS from all clients. The
handling of DONE_CONF messages also changed to work in a similar manner.
As a result, the client side timeouts were increased to handle this.
Added -c option to uftp to explicitly set client timeouts in milliseconds
for both REG_CONF and DONE_CONF. Useful for when the server expects
to hear from a large number (>100) of receivers over a low speed link,
meaning it could take the server several seconds to process them all.
If this value is less than the time for the specified latency level,
it is ignored.
Version 2.7.1 - 3/31/2009
Added -P option to uftpd to write the daemon's pid to a pidfile.
Added latency level 4 with values 2x that of level 3.
Fixed bug when sending DONE to over 300 clients.
Brought man pages up to date.
Changed license to GPLv3.
Version 2.7 - 2/26/2009
Added -n option to uftp to prevent name lookups of clients (a similar
option exists in uftpd). This happens for both open group membership,
when clients register, and for closed group membership, when names are
specified on the command line via -H. For the latter to take effect, -n
must appear before -H on the command line.
Changed name of wait variable in uftp to get around conflict on OSX/BSD,
and added OSX/BSD makefile. Thanks to Jusin Venus for supplying these.
Version 2.6.6 - 1/16/2009
Fixed logging output to display correctly on 64 bit systems
Version 2.6.5 - 12/18/2008
Cleaned up a few more warnings
Version 2.6.4 - 12/16/2008
Cleaned up some warnings, added -Wall to linux makefile
Version 2.6.3 - 7/29/2008
Fixed the basename function for Windows, and made a proper makefile
for Windows. Thanks to Amol Deshpande for providing these.
Removed the call to basename from uftpd, since it has no effect.
Version 2.6.2 - 7/28/2008
Cleaned up the code a bit so file names/paths have a consistent size,
fixed bounds checking on several buffers
In-code max of 10000 receivers for open group membership, 100 for closed
Version 2.6.1 - 6/11/2007
Fixed wait bug in uftp
Version 2.6 - 2/25/2007
Changed all "short", "long", and "long long" types to the
appropriate fixed size types (16, 32, and 64, respectively) for
better compatibility between 32 bit and 64 bit environments.
Man pages added for Unix/Linux systems.
The -I option to uftpd is now optional. It defaults to the
interface associated with the client's hostname.
Version 2.5.3 - 10/27/2006
In version 2.5.1, a fix was applied to uftpd to only close a file
if it was still open. But apparently, the old line of code
that closes it outright wasn't removed (doh!). It's gone now.
Version 2.5.2 - 10/26/2006
Bug fixes in uftpd - the -n option was actually causing the opposite
of the intended effect, and forgot to check for a null value from
gethostbyaddr when looking up the sender's name.
Version 2.5.1 - 9/25/2006
Fix in uftpd - don't close file if already closed. On most OS's,
this isn't an issue, but under MS Visual Studio it caused a crash.
Thanks to Mark Leavy for catching this one.
Made a similar fix in uftp. Actually, the file was never formally
closed. It is now.
Version 2.5 - 9/20/2006
Allowed the -I option to uftpd to take multiple parameters separated
by commas. This allows you to listen for multicast traffic on
multiple interfaces, and also allows you to receive data on one
interface and send responses back on another.
Version 2.4 - 9/16/2006
Added -L option to uftp to allow output to go to a log file. The
default is to write to stderr.
Modified all error routines in uftp to use logfunc. This is how
error logging is currently done in uftpd.
Version 2.3.1 - 7/25/2006
Fixed to allow zero length files to be transferred.
Version 2.3 - 7/16/2006
Fixed handling of large files in Windows
Added descriptive error messages for Windows socket errors
Functionality change: uftpd now runs in a single thread. This not
only resulted in a speed increase on most systems, but also gets
back the functionality of receiving multiple files at once in unicast
mode, which was lost in version 1.3. It is also no longer necessary
to have multiple sockets open on the same port, which caused an
issue where multiple instances could be running on the same port.
The code for uftpd was also restructured as a result, becoming
more modular.
Removed -s option from uftpd, since the conditions necessitating this
option no longer exist.
Version 2.2 - 7/7/2006
Added -n flag to uftpd prevent name lookups of transmitter. This can
eliminate issues with slow name lookups delaying registration.
Version 2.1.1 - 7/5/2006
Fixed handling of -H option to uftp
Version 2.1 - 6/22/2006
Made a few fixes specific to Linux machines:
When calling select(3c) with a timeout, save off a copy of the timeout
variable and reset it just before calling select. This gets around
Linux-specific behavior which modifies the timeout parameter after
the call to indicate the amount of time left to wait.
Added a -s option to uftpd. Apparently, when multiple UDP sockets are
open on the same port in Linux, any packet arriving on this port gets
passed to ALL open sockets, regardless of whether or not the multicast
destination of the packet matches one of the multicast addresses the
socket is bound to. This causes a slew of "invalid txID" or "invalid
function: ANNOUNCE" messages that otherwise shouldn't show up. The -s
option will suppress these messages. NOTE: This option should ONLY be
used on Linux boxes (or other UNIX-like OS's that exhibit this behavior),
as it could hide a real problem. Windows and Solaris uses should NOT
use this option.
Version 2.0 - 5/4/2006
UFTP now runs under Windows! It will compile under both Visual C++ 6.0
and Visual Studio .NET, and run on Windows 2000/XP. No MFC or .NET
functionality was employed, only straight WIN32 calls. A few major
changes under the hood made it possible to have one version of the
code that compiles in both environments:
The receiver, uftpd, now uses multiple threads instead of multiple
processes. This was made necessary because Windows doesn't support
the UNIX fork function, which makes an exact copy of the calling process.
The logging functions in uftpd had to be modified to allow for a common
interface for UNIX and Windows boxes.
Changed timing routines in uftp. Previously, the gettimeofday function was
used to get microsecond resolution timestamps. Since Windows doesn't have
this function, calls to this function in addition to calculations of
timestamp differences were hidden away behind #defines, so that UNIX boxes
still call gettimeofday, and Windows boxes use QueryPerformanceCounter.
Several other functions, including perror, usleep, link, were abstracted
behind #defines to allow for a common interface for UNIX and Windows.
The Windows Sleep function only has millisecond timing, however it still
allows for proper wait times between packet transmissions.
Wrote my own versions of getopt and basename, since they don't exist in
Windows. When compiled for UNIX, the built in OS functions are used.
Currently, the Windows version of uftpd does not put itself in the
background. A Command Prompt window will remain open, even without the
-d option. This was a consequence of using main instead of WinMain for
the entry point to keep it consistent with UNIX. This can be worked
around by calling uftpd with hidedos.exe, which is a utility program
created by LanDesk. This utility can be found freely on several LanDesk
related forums.
Version 1.4.2 - 1/24/2006
Bug fix - missing htons() call when assigning port in uftpd. Not a big deal
for big-endian machines, BAD for little-endian machines.
Version 1.4.1 - 1/15/2006
Added a few missing header files
Version 1.4 - 11/16/2005
Added support for large (>2GB) files
On second and subsequent passes, status requests are not sent for a
particular section if there were no NAKs for that section. A status
request is always sent for the last section, however.
Version 1.3 - 9/25/2005
Add -l flag to uftp to set a predefined latency level 1-3
(1=low, 2=medium, 3=high (default))
In prior versions, during the initial handshaking and when requesting
NAK counts, the transmitter would wait 2 and 4 seconds respectively
before resending a request. This is fine for a high latency link
(satellite, WAN) but not a low latency link (local LAN). This setting
allows for shorter waits to handle a variety of network latencies.
This flag should be omitted for backward compatibility
Functionality change: The parent uftpd process no longer forwards data
to its children. The children now receive the data directly from the
transmitter. This greatly improves high end throughput. However, doing
so relies on a multicast feature (allowing multiple UDP sockets to listen
on the same port) that doesn't work in unicast. Therefore, in order
to retain the ability to receive files via unicast, uftpd cannot receive
files via unicast and multicast at the same time. When a request
for a unicast transfer is received, it is accepted only if no other
files are being received. The parent uftpd then handles the file
directly and will not accept any other files until it is done.
Version 1.2 - 9/14/2005
Improved error handling
Improved cross-platform compatibility
Version 1.1 - 8/15/2005
All integers in UFTP header converted to network byte order before
sending, and converted back upon receiving, allowing machines with
different hardware architectures to communicate
Minor performance enhancements
Version 1.0.1 - 6/19/2005
Added missing extern declarations for optarg and optind
Removed extra name lookup on server when reading -H
Version 1.0 - 12/17/2002
Removed packet wait interval option (-W) to server
Repurposed server -W option for transmssion weight option
Dictates maximum file transfer time as a percentage of optimal time
Added -m option to server to specify minimum transfer time
Added -t option to client to specify session timeout time
Replaced hardcoded timeouts
Version 0.9 - 4/4/2002
Added -T option to client to receive files into a temp directory
Changed permissions on created files
Minor logging changes in server
Fixed RND seeding
Version 0.8.1 - 11/19/2001
Fixed endianness issues
Version 0.8 - 7/6/2001
Initial public release