Last updated: February 8, 2002 *** 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.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!