
Last updated: February 15, 2003

*** WARNING - WARNING - WARNING - WARNING - WARNING - WARNING - WARNING ***
This software was written as an educational project and is worth exactly
what you paid for it (NOTHING)! Who knows what it might do to your computer,
so use at your own risk!
*** WARNING - WARNING - WARNING - WARNING - WARNING - WARNING - WARNING ***

VERSION 0.6rc1 -  released as beta!
             Mans added the ability to do end-to-end encryption. His 
	     notes include:
	     1) Crypted sessions need to be setup over UDP as of yet.
	     2) Regardless, it does crypt TCP traffic, too, after a session
                has been set up.
	     3) Two new variables in vb.ini, REQUEST_CRYPT and ENABLE_CRYPT,
                to control the crypt feature.

             Please use usbvb-2.4.20.c in the linux_drv/ directory if you
	     are compiling for kernel 2.4.20 or higher.

VERSION 0.57
             Mans Huldan (pachuco) added the ability to minimize the fobbit
             program to the system tray in Windows. Additionally, the
             '-q' argument to the vb.exe program will start fobbit minimized to
	     the system tray -- useful for those with fobbit in their statup
	     folders.

	     No other significant changes were made to the code. Linux users can
	     ignore this change, as it does not affect them. All backwards
	     compatibility is retained. This release is not very fully tested,
	     so please, report back to us with your results.

	     Of course, as usual, you can simply replace your vb.exe with the
	     one supplied.

VERSION 0.56
             UDP comm now notices the source port of the remote and adjusts
             to use that port instead of what passed in id message, this helps
             when using NAT if don't have port redirect setup, if router does
             automatic mapping and changes source port, so now in some cases
             UDP voice will work even if one end not configered in NAT box. To
             really work correctly must still configure the router, but this
             lets UDP voice work in more cases.

             Added TCP keepalive since if using UDP for voice and TCP idle for
             too long, some NAT boxes will drop the TCP connection and vb will
             drop the call

VERSION 0.55
             fixed bug in headset code that would cause headset to ring
             after call ended if headset vblaster was called

             fixed problem where call whould shutdown if network had enough
             errors where TCP can't keep up and write-buffers whould fill up.

             enhanced some of the logging and error reporting

             added 'TOUNIX' script to convert the windows formated files
             to unix formated files (convert CRLF to LF)

VERSION 0.53
             fixed bug in talk loop that should reduce latency and keep
             latency from building over time, or sometime latency would
             start high, perhaps in only one direction, this fix should
             stop that.

             added CPC emulation (CPC_DURATION in vb.ini) this signal is
             used by devices like answering machines to tell that the
             other end of the call has hung up.

             added ability to use '#' to force dial so don't have to wait
             for timeout.  (use FORCE_DIAL 0 to disable in vb.ini)

             added ability to control volume using '+' and '-' keys while
             running.

             added support for headset (should enable FILE_DIALTONE_HEADSET
             since built in dialtone doesn't seem to work with this.
             O=OFF-HOOK, H=ON-HOOK, dial using keyboard. can use '#' as above
             to start the call without waiting for the timeout

             added ability to control mute via the keyboard
             M=MUTE-ON, U=MUTE-OFF

             windows gui enhanced to support the headset, added keypad and
             various buttons to match keyboard commands

             can use 'nokey' on command line to disable keyboard controls

             added support for multiple phonebook servers, the entries
             SERVER_PRIMARY and SERVER_SECONDARY work, but can use multiple
             PHONEBOOK_SERVER entries instead.

             If restart application without un-plugging and re-plugging the
             USB cable, may not detect the headset, if application says
             headset not plugged in when it is, just unplug the headset and
             then plug it back in. Can't have both headset and phone plugged
             in at the same time, will confuse the device.

             newer linux driver, application no longer has to create two
             child processes to read from the device, can now use 'select'.

             relaxed check on vblaster firmware version, no longer reguires
             that the firmware be updated with the included CD, since seems
             to work ok without it, also allows the firmware for the
             OEM version of the device.

             added check in windows driver to insure only one process can
             open a device

VERSION 0.51 Most inportant change was to fix long standing bug in tcp packet
             reception, was always there but the udp probing seems to have
             made it occur more often, where at the start of the call the
             program will exit with a 'bogus' control message, was checking
             the packet termination marker with the wrong value.

             Added better compatibility with verison 0.42 when using udp,
             if enabled on both sides, 0.50 would not tranmit udp since
             the udp probe would always fail, so 0.42 would send udp
             and 0.50 would receive it ok. Now has a check if peer is 0.42,
             use the 0.42 rules instead of the probes.

             Fix the 'os_version' function so can tell WINME from WIN98.

             Changed the format of the packet counters in the windows version
             to be a little bit clearer on what they are.

             Changed the Linux version to use a loadable driver module so
             don't have to patch the kernel. Tested with Redhat 7.2, both
             with the standard 2.4.7-10 kernel that comes with it, and a
             newer 2.4.16 kernel, see the 'makefile' in the 'linux_drv'
             directory for more info. Should work with most linux
             distributions with a 2.4 kernel but only tested with the above.

VERSION 0.50 Now supports Linux (or at least Redhat 7.2 with a 2.4.16 kernel)
             I suspect it will work with a 2.4.6, or perhaps even earlier
             kernel but haven't tested with them. In any case must make
             a small change to the kernel file 'drivers/usb/usb.c', this
             change should not break anything and will actually allow passing
             a timeout of 0, which is documented as ok, but didn't work. Also
             showed a problem in the original code that if pass a long
             timeout, and the process is killed, will hang until the
             timeout expires.

             Under windows, 'setup' function removed from 'vb.exe' program,
             is now a separate program 'setup.exe', that will install a
             new version of the 'vb.exe' file as required.

             In general all operating systems now support the DEVICE_INDEX
             setting in the 'ini' file, this allows running multiple
             instance of vb, each controlling a separate device, will need
             to use different LISTEN ports for each device.
             Thanks to Peter J. Zandvoort [pzand@planetcable.net]
             for the code to support multiple devices in 'usb_win.c'

             Except in windows, the 'vb.id' file now is 'vb0.id', where
             '0' stands for the instance of the device, really reflects the
             DEVICE_INDEX value given in the 'vb.ini' file. Still using
             'vb.id' under windows since must run the different instances
             from different directories.

             For non-window systems, can now spec the 'ini' file to use on
             the command line by:
                 vb inifile vb1.ini
             If not given then defaults to 'vb.ini'

             For non-window systems, can now spec a 'log' file to use on
             the command line by:
                 vb logfile vb1.log
             If not given then no log is created and all output goes to
             stdout.

             Can give either or both 'logfile' and 'inifile' args. Won't
             work under windows since I am not sure how to pass arguments
             in a GUI program, so if want separte 'ini' files under windows
             must start each instance from a separate directory, with a
             separate copy of 'vb.ini' in each directory.  Can adjust the
             'vb.ini' files to share a common copy of the 'sounds' directory
             if desired.  Winodows 'vb.exe' always creates a 'vb.log' file
             in the startup directory.

             Can now directly dial an ip:port combination from the touch-tone
             pad of the phone. Just dial the 'ip' value as 'a*b*c*d*p'. Use
             the '*' key in place of the '.' in the ip address. The last '*p'
             is optional, and is used to give the desired port, if not given
             will use the PORT_OUTGOING value from the 'ini' file.

             Should always enable 'UDP' for voice unless you network
             connection won't allow it, then when a call is made the program
             will try UDP but fall back to TCP if it doesn't work.

             If using the phonebook-server, call-completion status now sent
             to it for better system diagnostics

VERSION 0.43 Phonebook server can now work thru port 80, using HTTP protocol,
             see the 'vb.ini' files for more details

VERSION 0.42 Now supports UDP voice channel as well as TCP, TCP is default,
             UDP can be enabled, volume setting in 'ini' file added,
             'voip.ini' renamed to 'vb.ini', 'voip.id' renamed to 'vb.id'.
             Changed source back to separate objects since finally had some
             time to figure out how to do it in windows. Windows version
             should be largely self-installing, just put 'vb.exe' in a
             folder/directory and run it, for upgrades just copy it over old.
             Only need 'vb.exe', everything is in there.
             'vb.exe' now catches attempts to run it twice which tends to
             render it unusable. No drivers changed.

VERSION 0.41 Major update for Windows, first attempt at a Windows GUI.
             NetBSD is still command-line based, but some general fixes.
             Also added code to the Windows version that bumps up the
             program's priority and this seems to help. For the Windows
             version only need to download and update 'vb.exe', the
             driver is still the same since the first release (0.2x)

VERSION 0.32 Fixed small compile nit for windows, shouldn't change anything,
             driver is still the same since the first release (0.2x)

VERSION 0.31 First release with phonebook server, driver still the same
             since the first release (0.2x)

IMPORTANT NOTE: I am running a test directory-server but I make no promises
about its reliability, consider it a test system and use at your own risk.
Same note applies to test answering machine (see vb.ini)

WARNING: versions 0.4x and 0.3x are not compatible with versions 0.2x, please
update both ends of the conversation!!!

0> If the voip-blaster is plugged into a machine which is sitting behind
   a NAT firewall or Microsoft Internet Connection Sharing, it won't magically
   'just work', it will require configuration of the connection-sharing device
   and/or firewall to enable inbound calls, outbound should work fine.

1> code added to use a directory server by default, this allows you to use
   the 9 digit serial number of the destination device as its phone number,
   the 'voip.ini' file now has a new entry 'SPEED' that lets you map a
   dialed number to destination serial-number, see the new 'voip.ini'
   example file for more detail. The 'vb' program displays the device
   serial-number when it first starts up.

2> one of the best reasons for the directory server is that it can map the
   serial-number to the current ip of the destination, since this may
   be variable if the destination is using dynamic ip addresses.

3> you can disable the directory server if you want, see 'vb.ini' for
   more info.

4> the code now creates a file 'vb.id' the first time it runs which contains
   the serial number and other id info reported by the device. This is needed
   since the device only reports this info when first powered up. The file
   is in hex, so not very human-readable.

5> The software should run on WIN98, WIN2K, and WINXP. The windows version
   was built and tested with win-me, but since it is a wdm driver it
   "should" work in Win2k. Main issue is that the install requires more
   work for WIN2K and WINXP. See the 'win2k.txt' file for more info.

6> Under windows if haven't ever installed the original software, but
   have updated the device firmware using another machine, then can
   probably copy the two files 'vb_usb.inf' and 'vb_usb.sys' to a
   temporary directory, then plug in the device, then when asked where
   the software is, point it at the temp directory.

7> After runing 'vb' (or 'vb.exe' under windows) and leaving it running,
   you should be able to make a call to another system running the same
   software. You will need to configure 'vb.ini' on each system with
   the ip of the other systems you want to call or use the directory server.
   If you change 'vb.ini' you must restart 'vb(.exe)', this is because
   it only reads the file when it first starts.

8> Once everything is correctly configured, then just pick up the phone
   and dial the desired destination number. This can either be an entry
   in the DIALED table which maps directly to a destination ip:port, or if
   using a directory-server, you can dial a number in the SPEED table, or
   the destination device serial-number directlry. The default is to actually
   initiate the call 5 seconds after the last digit is entered, see 'vb.ini'
   for more info.

9> If your system is behind a 'NAT' gateway, either a separate router or
   windows internet-connection-sharing, you will probably need to configure
   a redirect line for the tcp port on it (default is 8008). The exact method
   used to do this is very specific to each gateway device, look for
   information on how to run a web sever thru the device, the configuration
   will be very similar, still TCP, but a different port.

10>I can't guarantee that it will alway be up but for now I have an
   answering machine hooked up to a voip-blaster that you are free to test
   with, see if you can call it and hear the message.

   A line like one of the following in 'voip.ini' should allow you to get
   to it, actual dialed-digits can be whatever you want.
 
        DIALED 111 fobbit.com:8058
   or
        SPEED  111 104747227

11>The six numbers displayed by the application when talking are:

   tx-tcp/tx-udp rx-tcp/rx-udp dropped rx-max-queue

   If you are dropping too may packets on receive you can bump up the
   values NET_HIGH_WATER and NET_HIGH_COUNT in 'vb.ini', probably only
   need to change NET_HIGH_COUNT, try values like 8, 16, or 32, default
   is 4. As you increase it, less should be dropped but the sound may be
   significantly delayed.

12>The windows version sometimes seem to run too slow, it doesn't keep up,
   and it adds excessive delay to the voice, this seems to happen when
   doing too much on the pc, such as running 'VNC' at the same time, haven't
   seen this under unix, still looking at it. When this happens will see
   the 'rx-max-queue' climb, it should normally stay in the single digits,
   usually 4 or less.

VERSION 0.2x First release

1> Code updated to dial more like a regular phone, after start dialing,
   waits for a few seconds of inactivity, then initiates the call.

2> Before using either the netbsd or windows driver you must first plug the
   device into a windows machine and install the windows software. This wil
   update the firmware in the device. The firmware is burried in the windows
   driver and not sure how if could extract it and update the deivce in this
   software without violating some legal stuff.

3> This software and the windows drivers can't coexist, the windows stuff
   must be removed, the 'install.bat' script will remove the windows driver
   and install mine.

4> Both the netbsd and windows software are started from the command line,
   just enter 'vb' followed by a return.

5> Not currently posting the sources to the windows driver, only posting
   a compiled windows driver 'vb_usb.sys'. The driver is built using the
   microsoft 'ddk' and since it is a fairly straight-forward modification
   of the 'bulk' example driver, which has lots of copyrights all over it,
   not quite sure what can redistribute. This isn't all that restrictive
   since very little work is done in the driver, all the protocol stuff
   is done in the application.

6> The NetBSD and Windows code are now the same.

7> Updated to use a dialtone file instead of builtin dialtone

8> May be a problem with using a file for dialtone instead of builtin tone,
   may just need to lower volume of file, have seen on one box where DTMF
   detection of a '1' while dialtone playing suffers.

9> Added couple of include files needed to compile the windows application
   (vb_usb.h and vb_guid.h)

The End!
