Fixed very old bug - no get thread id code in InitialiseProcessThread
[pwlib.git] / ReadMe.txt
blobb22ef0788e6423ff3acb8017e29793ab9e751152
1                         Portable Windows Libary
2                         =======================
5 Contents
6 --------
8         1.      Introduction
9         2.      Apologies
10         3.      CVS Access
11         4.      Building PWLib
12         5.      Using PWLib
13         6.      IPv6 issues
14         7.      Platform Specific Issues
15         8.      Conclusion
16         9.      Licensing
20 ================================================================================
22 1. Introduction
23 ---------------
25 PWLib is a moderately large class library that has its genesis many years ago as
26 a method to product applications to run on both Microsoft Windows and Unix
27 X-Windows systems. It also was to have a Macintosh port as well but this never
28 eventuated. The parts of the library relating to GUI functions have also been 
29 removed.
31 Since then the system has grown to include many classes that assist in writing
32 complete multi-platform applications. Classes for I/O portability, multi-threading
33 portability, aid in producing unix daemons and NT services portably and all
34 sorts of internet protocols were added over the years.
36 All this over and above basic "container" classes such as arrays, linear lists,
37 sorted lists (RB Tree) and dictionaries (hash tables) which were all created
38 before STL was standardized. Future versions of PWLib will see many of these
39 classes replaced or supplemented by STL.
41 The library was used extensively for all our in-house products. Then we decided
42 to support the open H323 project by throwing in some of the code written for
43 one of our products. Thus, required PWLib so it got thrown into the open source
44 world as well.
48 ================================================================================
50 2. Apologies (not)
51 ------------------
53 As you start using the library, the inevitable question "why did they do it that
54 way?" will come up. The more experienced out there will know that there are
55 several reasons for the way things are:
57    *   Carefully considered design,
58    *   Workarounds for portability and compiler subtleties,
59    *   History, it may be too hard to change an early design decision,
60    *   Complete arbitrariness, the absence of any compelling reason.
62 So, when you ask the next question "why didn't you do it this way?" The answer
63 will be one of the above. The last one being a synonym for "we didn't think of
64 that!"
66 The bottom line is, use the library as is or change it as you require. You can
67 even send in suggestions for improvements (or merely changes) and we may (or may
68 not) include them in the base line code. Just do not send us any mail starting
69 with the words "Why did you..." as the answer is quite likely to be "Because!"
73 ================================================================================
75 3. CVS Access
76 -------------
78 There is a public CVS archive available at cvs.sourceforge.net. To avoid
79 everyone getting all of the code platforms, we have provided CVS "modules"
80 that allow the Windows and Unix source trees to be extracted seperately.
82 The available modules are:
84         pwlib                   This ReadMe.txt file only
85         ptlib_unix              Unix libraries only
86         ptlib_win32             Windows libraries only
87         pwlib_win32             Windows libraries + GUI (no longer supported)
88         openh323                OpenH323 only
90 Note that the ptlib_unix, ptlib_win32 and pwlib_win32 modules all extract 
91 subcomponents of the pwlib directory tree using the CVS modules file - they
92 are not different directories.
94 To extract one of these modules, use a command line like the following:
96         cvs -z3 -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323 co module
98 where "module" is one of the module names specified above.
100 If you would like see the structure of the CVS, then use the View CVS tool at:
102         http://cvs.sourceforge.net/viewcvs.py/openh323/
105 ================================================================================
107 4. Building PWLib
108 -----------------
110 This library is multi-platform, however there are only two major build systems
111 that are used. The Microsoft DevStudio environment for Windows and the GNU make
112 system for all of the various unix systems.
115 4.1. For Windows
116 ----------------
118 Note that more complete instructions can be found at the following URL, but here 
119 are the basics:
121         http://www.postincrement.com/openh323/windows_build.html
123 1.  Note you will need the bison and flex tools to compile some parts of the
124     system. You can get a copy from http://www.openh323.org/bin/flexbison.zip,
125     follow the instructions included in that package and put the executables
126     somewhere in your path.
128 2.  Start MSVC (v5, v6 or v7 (.NET)). If you have another compiler you are on
129     your own! Add these folders to the Include Files path as follows:
130     
131     In VisualStudio v5/6 go into the Tools menu, Options item, Directories tab.
132     
133     In VisualStudio v7, go into the Tools menu, Options item. In the Options
134     dialog, open the Projects folder, VC++ Directories item. In the 'Show
135     Directories for:' list, select 'Include files'.
136         
137                 C:\PWLib\Include
138                 
139     Add the following to the Lib Files path and the Executable Files path:
140         
141                 C:\PWLib\Lib
142                 
143     The Lib folder is created as parts of PWLib are built. Also add this
144     directory to your PATH environment variable (so PWRC, MergeSym and 
145     ASNParser tools can be found).
147 2.  The build should automatically create a file pwlib/include/ptbuildopts.h
148     via the configure.exe program that should be in the pwlib directory. If
149     you have any problems try running the program directly from a command
150     line. Use ".\configure --help" to get information on options such as
151     forcing a feature or library dependency.
153     Note there are additional notes in the "Platform Specific Issues" on how
154     to compile the various libraries in a manner suitable for use by PWLib
155     under Windows.
157 3.  In VisualStudio v5/6 open the pwlib.dsw file in the pwlib top directory.
158     If you have the minimum library it will come up with several requests to
159     find .dsp files, just cancel past these.
160         
161     In VisualStudio v7 open the pwlib.sln file in the pwlib top directory.
163 4.  In VisualStudio v5/6 use the Batch Build command and build the "ASNParser
164     Win32 Release", "pwtest Win32 Release" and "pwtest Win32 Debug" targets.
165     Make sure all other targets are not checked.
166     
167     In VisualStudio v7 use the Batch Build command. It seems as though the
168     batch build does not build dependent parts unless they're checked in the
169     Build column. For a test build, be sure all Projects are checked except
170     ASNParser-debug, MergeSym-debug, PacketVXD-release, PWRC-debug, and both
171     XMLRPC.
173 5.  That's it, now you're on your own!
177 These are the project relationships:
179 project             dependencies                             output
180 -------             ------------                             ------
181 Console             (none)                                   ptlibs.lib
182 GUI                 (none)                                   pwlibs.lib
183 MergeSym            ptlibs.lib                               mergesym.exe
184 PTLib               ptlibs.lib, mergesym.exe                 ptlib.dll & lib
185 PWLib               pwlibs.lib, mergesysm.exe, ptlib.lib     pwlib.dll & lib
186 Console Components  (none)                                   ptclib.lib
187 GUI Components      (none)                                   pwclib.lib
188 ASN Parser          ptlib.lib                                asnparser.exe
189 PWRC                ptlib.lib (flex.exe)                     pwrc.exe
190 PWTest              ptlib,pwlib,ptclib,pwclib.lib,pwrc.exe   pwtest.exe
191 MSDevWizard         (none)                                   PWLibWizard.awx
192 XMLRPC              ptlibs.lib, ptclib.lib                   xmlrpc.exe
193 PacketVXD           (none)                                   epacket.vxd
195 Debug versions append 'd' to filename, ie: ptlibsd.lib.
197 MSDevWizard will not build in VisualStudio v7 and so is not included as a project.
201 --------------------------------------------------------------------------------
202 4.2. For unix.
203 --------------
205 1.      If you have not put pwlib it into your home directory (~/pwlib) then
206         you will have to defined the environment variable PWLIBDIR to point to
207         the correct directory.
208         Also make sure you have added the $PWLIBDIR/lib directory to your 
209         LD_LIBRARY_PATH environment variable if you intend to use shared 
210         libraries (the default).
212 2.      Build the debug and release versions of the PWLib library as follows:
213                 cd ~/pwlib
214                 ./configure
215                 make
216         This may take some time. Note, you will need bison and flex for this to
217         compile, most unix systems have these. WARNING: there is a bug in most 
218         of the bison.simple files. See below for details.
220         PWLib requires GNU Make. If GNU Make (gmake) is not your default make
221         program (eg FreeBSD users), you will need to install GNU Make first
222         and then use
223                 cd ~/pwlib
224                 ./configure
225                 gmake
228         If you are getting huge numbers of errors during the compile, then it 
229         is likely your platform is not supported, or you have incorrectly set 
230         the OSTYPE and MACHTYPE variables.
232 3.      That's all there is to it, you are now on your own!
236 Bison problem under Unix
238 The bison.simple file on many releases will not compile with the options used 
239 by the PWLib getdate.y grammar. The options are required to make the date 
240 parser thread safe so it is necessary to edit the bison.simple file to fix the 
241 problem.
243 The file is usually at /usr/lib/bison.simple but in the tradition of unix 
244 could actually be anywhere. We leave it up to you to find it.
246 The code:
248         /* Prevent warning if -Wstrict-prototypes. */
249         #ifdef __GNUC__
250         int yyparse (void);
251         #endif
253 should be changed to
255         /* Prevent warning if -Wstrict-prototypes. */
256         #ifdef __GNUC__
257         #ifndef YYPARSE_PARAM
258         int yyparse (void);
259         #endif
260         #endif
262 To prevent the incorrect function prototype from being defined. The getdate.y 
263 should then produce a getdate.tab.c file that will actually compile.
268 ================================================================================
270 5. Using PWLib
271 --------------
273 What documentation there is consists of this document and all of the header
274 files. It was intended that a post processer go through the header files and
275 produces HTML help files, but this never got completed.
278 5.1. Tutorial
279 -------------
281 Detailed tutorials will almost certainly not be forthcoming. However, at least
282 giving you an indication on how to start an application would be usefull, so
283 here is the infamous "Hello world!" program.
286 // hello.cxx
288 #include <ptlib.h>
290 class Hello : public PProcess
292   PCLASSINFO(Hello, PProcess)
293   public:
294     void Main();
297 PCREATE_PROCESS(Hello)
299 void Hello::Main()
301   cout << "Hello world!\n";
304 // End of hello.cxx
307 The CREATE_PROCESS macro actually defines the main() function and creates an
308 instance of Hello. This assures that everything is initialised in the correct
309 order. C++ does initialisation of global statics badly (and destruction is even
310 worse), so try to put everything into your PProcess descedent rather than
311 globals.
313 A GUI application is very similar but is descended off PApplication rather than
314 PProcess, and would create a window as a descendent off the PMainWindow class.
316 The following is a simple Makefile for Unix platforms for the hello world 
317 program.
320 # Simple makefile for PTLib
322 PROG    = hello
323 SOURCES = hello.cxx
325 ifndef PWLIBDIR
326 PWLIBDIR=$(HOME)/pwlib
327 endif
329 include $(PWLIBDIR)/make/ptlib.mak
331 # End of Makefile
335 --------------------------------------------------------------------------------
336 5.2. PWlib Classes
337 ------------------
339 The classes in PWLib fall into the following broad categories
341         Containers
342         I/O
343         Threads & Processes
346 5.2.1. Containers
348 While there are a number of container classes you wourld rarely actually descend
349 off them, you would use macros that declare type safe descendents. These are
350 simply templates instantiations when using a compiler that supports templates
351 in a simple manner (GNU C++ does not qualify in our opinion).
353 5.2.2. I/O
355 There are many classes descendend from a basic primitive call a PChannel, which
356 represents an entity for doing I/O. There are classes for files, serial ports,
357 various types of socket and pipes to sub-processes.
359 5.2.3. Threads & Processes
361 These classes support lightweight threading and functionality to do with the
362 process as a whole (for example argument parsing). The threading will be
363 pre-emptive on platforms that support it (Win32, platforms with pthreads eg
364 Linux and FreeBSD) and cooperative on those that don't.
369 ================================================================================
371 6. IPv6 support in pwlib
372 ------------------------
374 The IPv6 support in pwlib is still experimental. You have to get the latest
375 CVS version to compile it (does work since 7th November 2002). Pwlib can be
376 compiled with or without the IPv6 support.
378 When compiled with the IPv6 support, applications using only IPv4 are still 
379 fully backward compatible. Pwlib is able to manage simultaneously IPv4 and
380 IPv6 connections.
384 --------------------------------------------------------------------------------
385 6.1. Windows platforms
386 ----------------------
388 According to microsoft, IPv6 is not supported under 9x, experimental on Win2000, 
389 supported on XP.
390 You must use a compiler with IPv6 aware includes and libraries:
391   - VC6 must be patched to support RFC 2553 structure. (See 7.1 and 7.2 for patch)
392   - .Net should be ok (to be confirmed)
393 The port as been performed with VC6 patched on a win2000 platform.
395 For more informations about IPv6 support:
396   Microsoft IPv6 support: 
397     http://research.microsoft.com/msripv6/
398   IPv6 for win2000: 
399     http://msdn.microsoft.com/downloads/sdks/platform/tpipv6.asp
400   IPv6 for XP: 
401     http://www.microsoft.com/windowsxp/pro/techinfo/administration/ipv6/default.asp
405 6.1.1. Windows platforms: Win2000
406 ---------------------------------
407 Go to Microsoft win2000 IPv6 tech preview web page.
408 http://msdn.microsoft.com/downloads/sdks/platform/tpipv6.asp
409 Download the 'tpipv6-001205.exe' file and read carrefully the faq.
410 http://msdn.microsoft.com/downloads/sdks/platform/tpipv6/faq.asp
412 This program is designed for win2000 English Service pack 1.
413 To install it on newer Service pack, you have to modify some files.
414 Again, read the Faq.
416 This install the IPv6 driver and the IPv6 includes.
420 6.1.2. Windows platforms: XP
421 ----------------------------
422 Read the IPv6 faq for windows XP
423 http://www.microsoft.com/windowsxp/pro/techinfo/administration/ipv6/default.asp
425 The 'ipv6 install' command installs only the IPv6 drivers.
426 You need to install additionnals IPv6 includes for VC6.
427 .NET should be ready. (to be confirmed ....)
431 6.1.3. Compiling
432 ----------------
433 To compile pwlib and openh323 with the IPv6 support you have to set an 
434 environment variable:
435 IPV6FLAG=1
436 Set it using: [Start]/[Configuration pannel]/[System]/[Environment]
438 Add the IPv6 SDK include path in your Visual C++ 6 environment:
439 [Tools]/[Options]/[Directories]/[Include files]
443 --------------------------------------------------------------------------------
444 6.2. Linux platforms
445 --------------------
447 Recent Linux distributions support IPv6.
448 2.4 kernels are IPv6 aware.
450 Linux IPv6 Faq:
451 http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/
455 6.2.1. Enabling IPv6 support
456 ----------------------------
457 IPv6 can be compiled statically in the kernel or compiled as a module.
458 To load the IPv6 module, as 'root'
459 #modprobe ipv6
463 6.2.2. Compiling
464 --------------
465 Check that IPv6 is really on
466 #ls /proc/net/if_inet6
467 If this file exists, then IPv6 support is compiled in pwlib and openh323.
471 --------------------------------------------------------------------------------
472 6.3. Testing
473 ------------
475 The test application sources can be found in the directory: openh323/samples/simple
476 Once compiled the binaries are in simple/debug, release, obj_linux_x86_d, or
477 obj_linux_x86_r.
478 Under windows, the test application is simple.exe
479 Under linux, the test application is simh323
480 IPv6 support can be tested on only one machine. Just open two shell/command windows.
484 6.3.1. IPv6 Address and port notation
485 -------------------------------------
486 IPv4 address and port are written in dot notation: xx.xx.xx.xx:4000
487 IPv6 global address are written in semi-colon notation: [xx:xx:xx:xx::xx]:4000
488 IPv6 scoped address ad a field for the scope: [xx:xx:xx:xx::xx%scope]:4000
490 Exemples:
491 Global address
492 [3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5]:4000
493 [3ffe:0b80:0002:f9c1::500b:0ea5]:4000
495 Scoped address
496 [fe80::232:56ff:fe95:315%lnc0]:4000
497 Scoped address are not supported yet.
501 6.3.2. Tests configuration
502 --------------------------
503 Tests 1,2,3 run on a single dual stack machine.
504   IPv4 Address: 127.0.0.1, 10.0.0.6
505   IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5
507 Tests 4,5,6 run on two dual stack machine.
509   IPv4 Address: 10.0.0.6
510   IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5
512   IPv4 Address: 10.0.0.8
513   IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6
517 6.3.3. Test 1: IPv4 <--> IPv4 local call
518 ----------------------------------------
519 This test checks the backward compatibility with IPv4
521 In first shell/command window, listen on 127.0.0.1, wait for a call.
522 simple.exe -tttt -n -i 127.0.0.1 -l -a
523 In second shell/command window, listen on 10.0.0.6, call 127.0.0.1
524 simple.exe -tttt -n -i  10.0.0.6 -n 127.0.0.1
528 6.3.4. Test 2: IPv6 <--> IPv6 local call 
529 ----------------------------------------
530 This test checks the IPv6 support
532 In first shell/command window, listen on ::1, wait for a call.
533 simple.exe -tttt -n -i ::1 -l -a
534 In second shell/command window, listen on IPv6 address, call ::1
535 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -n [::1]
538 6.3.5. Test 3: IPv4 <--> IPv6 local call
539 ----------------------------------------
540 This test checks that simultaneous IPv4 and IPv6 calls are supported.
542 In first shell/command window, listen on 127.0.0.1, wait for a call.
543 simple.exe -tttt -n -i 127.0.0.1 -l -a
544 In second shell/command window, listen on IPv6 address, call 127.0.0.1
545 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -n 127.0.0.1
549 6.3.6. Test 4: IPv4 <--> IPv4 call between two hosts
550 ----------------------------------------------------
551 This test checks the backward compatibility with IPv4
553 First host, listen on 10.0.0.6, wait for a call.
554 simple.exe -tttt -n -i 127.0.0.1 -l -a
555 Second host, listen on 10.0.0.8, call 10.0.0.6
556 simple.exe -tttt -n -i  10.0.0.8 -n 10.0.0.6
560 6.3.7. Test 5: IPv6 <--> IPv6 call between two hosts
561 ----------------------------------------------------
562 This test checks the IPv6 support
564 First host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5, wait for a call.
565 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -l -a
566 Second host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6, call 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5
567 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6 -n [3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5]
571 6.3.8. Test 6: IPv4 <--> IPv6 call between two hosts
572 ----------------------------------------------------
573 This test checks that simultaneous IPv4 and IPv6 calls are supported.
575 First host, listen on 10.0.0.6, wait for a call.
576 simple.exe -tttt -n -i 10.0.0.6 -l -a
577 Second host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6, call 10.0.0.6
578 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6 -n 10.0.0.6
582 --------------------------------------------------------------------------------
583 6.4. Known limitations
584 --------------------
586 You must use IPv6 address with global scope. Tests with IPv6 local link address
587 fail.
591 --------------------------------------------------------------------------------
592 6.5. Questions
593 --------------
595 6.5.1. How to patch my VC6 includes files ?
596 -----------------------------------------
598 To patch you Developper studio Visual C++ version 6, just edit the file
599 "C:\Program Files\Microsoft Visual Studio\VC98\Include\ws2tcpip.h", and add
600 the sin6_scope_id field in the sockadd_in6 structure.
601 struct sockaddr_in6 {
602           short     sin6_family;         /* AF_INET6 */
603           u_short sin6_port;  /* Transport level port number */
604           u_long    sin6_flowinfo; /* IPv6 flow information */
605           struct in_addr6 sin6_addr; /* IPv6 address */
606           u_long    sin6_scope_id; /* scope id (new in RFC2553) */ <--- Add this one
609 This may have an impact on you system stability, use it only on
610 experimental platforms. Using .NET compiler should be a better solution.
614 6.5.2. Why do I need to modify my Visual C++6 include files ? 
615 -----------------------------------------------------------
617 Visual Studio C++ version 6 implements the old RFC 2133 in file "ws2tcpip.h".
618 RFC 2133 defines a 24 byte sockaddr_in6 structure.
619 struct sockaddr_in6 {
620           short     sin6_family;         /* AF_INET6 */
621           u_short sin6_port;  /* Transport level port number */
622           u_long    sin6_flowinfo; /* IPv6 flow information */
623           struct in_addr6 sin6_addr; /* IPv6 address */
627 This RFC as been replaced by RFC 2553.
628 RFC 2133 defines a 28 byte addsock_in6 structure.
629 struct sockaddr_in6 {
630           short     sin6_family;         /* AF_INET6 */
631           u_short sin6_port;  /* Transport level port number */
632           u_long    sin6_flowinfo; /* IPv6 flow information */
633           struct in_addr6 sin6_addr; /* IPv6 address */
634           u_long    sin6_scope_id; /* scope id (new in RFC2553) */
639 6.5.3. How to get an ipv6 address with a Global scope ?
640 -----------------------------------------------------
642 6.5.3.1. Manually
643 -----------------
645 Set one manually if you're not connected to IPv4 Internet or IPv6 backbone:
646 #ip -6 addr add 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 dev eth0
647 (this address is owned by freenet6.net).
649 Check the address is set.
650 #ifconfig
651 eth0      Lien encap:Ethernet  HWaddr 00:08:D5:10:C7:BB
652           inet adr:12.0.0.2  Bcast:12.255.255.255  Masque:255.0.0.0
653           adr inet6: 3ffe:b80:2:f9c1::500b:ea5/128 Scope:Global  <- - - Ok, Global scope
654           adr inet6: fe80::208:c7ff:fe59:bbc7/10 Scope:Lien <- - - [ Can't use this one ]
655           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
656           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
657           TX packets:9 errors:0 dropped:0 overruns:9 carrier:0
658           collisions:0
659           RX bytes:0 (0.0 b)  TX bytes:534 (534.0 b)
662 6.5.3.2. Tunnel broker
663 ----------------------
665 Get one from a free IPv6 tunnel broker.
666 Exemple: 
667 http://www.freenet6.net : Canadian tunnel broker
668 http://tb.ngnet.it      : Italian tunnel broker (Telecom Italia Research)
671 Note: The current (10/2002) freenet6 windows binary is buggy, use it to get the 
672 values, and set manually your tunnel.
676 --------------------------------------------------------------------------------
677 6.6. Troubles
678 ------------
680 6.6.1. Listen on ::1:1720 failed: Address family not supported by protocol
681 -----------------------------------------------------------------------
682 IPv6 module is not loaded in the kernel.
683 #modprobe ipv6
687 6.6.2. SimpleH323       TCP Could not open H.323 listener port on 1720
688 --------------------------------------------------------------
689 Add some traces: -t on the command line. 
693 6.6.3. SimpleH323       TCP Listen on fe80::2b0:d0ff:fedf:d6bf:1720 failed: Invalid argument
694 ------------------------------------------------------------------------------------
695 This address is a local scope address. As the scope_id field is always set to 0,
696 its value is invalid.
698 Use address with global scope.
703 ================================================================================
705 7. Platform Specific Issues
706 ---------------------------
707 PWLib has been ported to several platforms. However on some systems not all of
708 the functionality has been implemented. This could be due to lack of support
709 at the OS level or simply due to lack of time or documentation when developing
710 the port.
713 --------------------------------------------------------------------------------
714 7.1. FreeBSD Issues
715 -------------------
717 Port Maintained by Roger Hardiman <roger@freebsd.org>
718 GetRouteTable() in socket.cxx has been added. It is used by
719 OenH323Proxy, but is not fully tested.
722 --------------------------------------------------------------------------------
723 7.2. OpenBSD Issues
724 -------------------
726 Port Maintained by Roger Hardiman <roger@freebsd.org>
727 GetRouteTable() in socket.cxx has been added. It is used by
728 OenH323Proxy, but is not fully tested.
731 --------------------------------------------------------------------------------
732 7.3. NetBSD Issues
733 ------------------
735 Port Maintained by Roger Hardiman <roger@freebsd.org>
736 GetRouteTable() in socket.cxx has been added. It is used by
737 OenH323Proxy, but is not fully tested.
739 There are now three ways to do pthreads in NetBSD.
740 a) unproven threads - from the packages tree.
741 b) GNU pth threads - from the packages tree.
742 c) Native pthreads - added to the kernel on 15th January 2003.
744 The choice can be made by editing pwlib/make/unix.mak
745 Native threads is the default and the best solution.
747 --------------------------------------------------------------------------------
748 7.4. Mac OS X (Darwin) Issues
749 -----------------------------
751 Port maintained by Roger Hardiman <roger@freebsd.org> but recently
752 Shawn Pai-Hsiang Hsiao <shawn@eecs.harvard.edu> has been leading
753 development.
754 Threads cannot be suspended once they are running, and trying to Suspend
755 a running thread will generate an Assertion Error.
756 Theads can be created in 'suspended' mode and then started with Resume
757 This is due to a lack of pthread_kill() in Dawrin 1.2
758 See http://www.publicsource.apple.com/bugs/X/Libraries/2686231.html
760 GetRouteTable() in socket.cxx has been added. It is used by
761 OenH323Proxy, but is not fully tested.
763 localtime_r() and gm_time() are missing.
764 So in osutil.cxx I have implemented os_localtime() and os_gmtime()
765 with localtime() and gm_time() which may not be thread safe.
767 There is also no implementation for dynamic library functions.
769 Audio is supported using the coreaudio library.
771 Video support is being added by Shawn and users interested in this should
772 check Shawn's web site at http://sourceforge.net/projects/xmeeting/
774 --------------------------------------------------------------------------------
775 7.5. BeOS Issues
776 ----------------
778 Port Maintained by Yuri Kiryanov <openh323@kiryanov.com>. 
779 Current version supported is BeOS 5.0.2. 
781 Most important issue is lack of variable sample frequency from system sound producer node.
782 I made quite a few attempts to implement sound resampler in code, 
783 even with help of Be engineers, but eventually decided to wait until new Media Kit
784 with resampler built-in. 
785 Also network code needed more things, as OOB, which was promised in BONE. 
786 BONE will allow to make less #defines in network code as well.
787 As update will hit the Net, I'll get back to it ASAP.  
789 Look for more port-related info on http://www.dogsbone.com/be
792 --------------------------------------------------------------------------------
793 7.6. Windows CE Issues
794 ----------------------
796 Port Maintained by Yuri Kiryanov <openh323@kiryanov.com>. 
797 Versions supported is 2.x and 3.x (PocketPC). 
798 Look for more port-related info on http://www.pocketbone.com
800 Detailed how-to provided by Frank Naranjo <frank@mivideo.net>.
801 An html version of this readme is available at ;
802 http://www.mivideo.net/videophone
805 7.6.1. HOW-TO build and test Windows CE OpenH323 Port POCKETBONE
806 ----------------------------------------------------------------
807 March 30 2002, Currently, there is NO source available that compiles
808 and Tx/Rx Video and Audio for pocketbone. Only the released binary
809 10b1 in Oct 2001 works! The current CVS version Mar 30 2002, 
810 is supposed to be 10b1, but its' internaly noted as 0.9beta1. 
812 Since the code in the CVS has not changed much since October when 
813 the 10b1 version was released, maybe with the right #ifdef DEFINES
814 and registry keys configured it might work.
816 We will dig into the diffs, and debug this unfinished release. 
817 But, maybe Yuri Kiryanov might release source and its related binary
818 for a version that works one day, along with all the required
819 configuration parameters to build it. 
821 It would be nice to be in a ZIP file, so it is not subject to changes,
822 as in the CVS. 
824 7.6.2. Collecting the Required Files
825 ------------------------------------
826 There are three source modules required to build Pocketbone, 
827 two of them, openh323 and pwlib libraries and the contributed 
828 pocketbone module. Using WinCVS  u can get the latest sources
829 from CVS at openh323.org . Using CVS you should 'checkout' the
830 'pwlib', 'openh323' and 'contrib' modules. You can save some 
831 time and space and 'checkout' only the 'contrib/pocketbone' module.
832 Make certain when u checkout pwlib and openh323 that the .vcp
833 files are there. If not, u can always access them thru the web 
834 interface for CVS at openh323.org. You will also need the eVC 
835 ( embedded Visual C 3.0) software from Microsoft to build it.
837 The new eVC version 4.0 is available FREE for 120 day trial 
838 now ( since Feb 2002 ). You cannot use MS Visual Studio to
839 build an embedded system. The new eVC 4.0 has not been used 
840 to build pocketbone yet from the CVS or herein. 
842 Place all three source modules in a single directory. i.e.., 
843 contrib,openh323 and pwlib.
844 ( note that pocketbone is in the contrib directory ). Using eVC,
845 open the project workspace located in the contrib/pocketbone
846 (Pocketbone.vcp). It should automatically find the other two
847 modules (openh323 and pwlib ) and load their respective .vcp files. 
849 7.6.3. Steps to Build POCKETBONE
850 --------------------------------
851 To build POCKETBONE you first need to build the two libraries,
852 pwlib and openh323. You should build these two libraries using
853 MS Visual C++, they will need to be built with eVC for the embedded
854 solution. It would be a good idea to build the libraries first
855 since it contains 'asnparser.exe' which is NOT built within eVC.
856 Then the latest version of asnparser.exe is used to build the 
857 .asn files by eVC. The location of asnparser.exe will need to 
858 defined in the 'Executable directory' as shown below in order 
859 for eVC to find it. Asnparser.exe is usually in 
860 'pwlib/tools/asnparser/release'. Both PWLIB and OPENH323 directories
861 contain a .VCP file included within the POCKETBONE sources.
863 Before you can build POCKETBONE however, you will need to configure
864 your eVC so it knows where to find the required include, library 
865 and executable files. A  .VCP  project file is available within
866 each of the three source modules in the CVS or ZIP files. 
868 -When you download the zip files or the versions from the CVS,
869 your source directory tree should look like this: 
871 < Your source dir > \ contrib \ Pocketbone
872 < Your source dir > \ pwlib
873 < Your source dir > \ openh323
875 The pockebone.vcw file expects this configuration. Once you start eVC,
876 all you need to do is open the project file; 
877 < Your source dir> \ contrib \ pocketbone \ pocketbone.vcw 
879 eVC will then find the other project files for PWLIB and OPENH323,
880 otherwise it will ask you. Select which CPU or platform version
881 to create; the emulator version X86EMDbg,or the ARM version. 
882 The ARM versions have a DEBUG and RELEASE version.
883 Select the Platform :"Pocket PC", CPUs:" Win32(WCE ARM)" selection.
885 Set of directories which you have to be defined in eVC regardless
886 of target platform:
888 Tools->Options->Directories, option Include files.
889 -------------------------------------------------
890 < Standard include paths > 
891 < Your source dir > \ pwlib \ include \ ptlib \ wince
892 < Your source dir > \ pwlib \ include \ ptlib \ wince \ sys 
893 < Your source dir > \ pwlib \ include \ pwlib \ mswin 
894 < Your source dir > \ pwlib \ include \ ptlib \ msos 
895 < Your source dir > \ pwlib \ include 
896 < Your source dir > \ openh323 \ include 
897 < Your gapi source dir > \ inc
899 Get  Gapi source files at;
900 http://www.microsoft.com/mobile/downloads/developer/gapi.asp
902 Here are some 'fake' functions to avoid needing Platform 
903 Builder or loading SNMP libraries for gatekeeper functionality.
904 ( thanks to Jehan Bing ) http://www.mivideo.net/jh_snmp_c.txt
906 Platform Builder 3.0 was free under an 120 day evaluation, 
907 just as the new 4.0 platform builder ( since Feb 20002) 
908 which also includes the new 4.0 eVC. It is NOT necessary 
909 to build pocketbone with the SNMP libraries provided you
910 include the 'fake' calls in Jehan Bing's functions file
911 provided above. 
913 Tools->Options->Directories, option Executeable AND Library .
914 ------------------------------------------------------------
915 < Your source dir for location of asnparser.exe and ptlib.dll >    
916 < Your source dir for location of Gapi files ( gx.dll )  > \ lib 
917 < Your source dir >   PWLIB \ Lib (even if does not exist ) 
918 < Your source dir >   OPENH323 \ Lib ( even if doesn't exist ) 
919 < Your source dir for location of snmpapi.lib and snmp_mibii.lib  >
921 ( if you have Platform builder )   
922 click for Zip file for eVC 4.0 Platform Builder Libraries )
924 Using the BUILD ALL start the build process. The PWLIB library
925 is built first, then the OPENH323 library, then finally the 
926 POCKETBONE executable. the EVC will automatically download the 
927 executable to the iPAQ should you have activeSync and the iPAQ
928 in the cradle.eVC will copy the executeable to the start menu.
930 To run select POCKETBONE from the 'start' menu . Enter an IP 
931 using the keyboard, nit the buttons, since the do not always
932 work right. The keypad buttons only works on the 9a1 version.
934 Make any Option settings required such as gatekeeper, trace,
935 or audio settings. Then press 'Call' to initiate the call. 
936 You should hear and see the other party right away. 
937 On some versions full screen video is displayed.
938 There will be a button to toggle from this full screen in 
939 the future, along with Volume and mute buttons. 
940 You are on your own ! Please test and make any comments 
941 here regarding any problems or suggestions. 
943 In order to build POCKETBONE for other platforms, 
944 all you need to do is select the different platforms. 
945 Although, there will undoubtedly be changes required 
946 in the source for different platforms. These changes can 
947 usually be handled with #ifdef statements in the code. 
948 In order to maintain a single set of source files for 
949 different platforms.
951 7.6.4. Latest CVS version March 20 2002
952 ---------------------------------------
953 PWLIB.zip ( 7,424 Kb)  
954 "http://www.mivideo.net/videophone/cvs 4 20 pwlib.zip"
956 OPENH323.zip ( 22,887 Kb) 
957 "http://www.mivideo.net/videophone/cvs 4 20 openh323.zip"
959 CONTRIB.zip ( 5,034 Kb) 
960 "http://www.mivideo.net/videophone/cvs 4 20 contrib.zip"
961   
962 These zip files contain Complete! BUILT files for ARM and X86em
963 versions using eVC 3.0 and fake SNMP functions file (link above),
964 to avoid using SNMP libraries. 
965 For those who asked for it for comparisons !
967 Noted internally as version 0.9beta1, NOT .10b1 as was stated by
968 Yuri in the archives to be in this CVS version. This version has
969 trace options available along with a ( Remote / Local ) 
970 functionality and different bitmap to reflect it.
971 ARM Dbg ( 4,222 Kb)
972 http://www.mivideo.net/videophone/420DPocketBone.exe
974 ARM Rel ( 2,316 Kb )  
975 http://www.mivideo.net/videophone/420RPocketBone.exe
977 Note this version NOT size similar to 9a1 or 10b1 ! 
978 Yet, its the latest from the CVS as of date shown ! 
979 Other than the different BMPs used in 10b1 what else differs ?
981 testing from 4/22/2002  ;
982 - No Video or Audio Tx/Rx to CuSeeme 5.0.0.43 ( RadVision Stack)
983 - soft reset ! required after calls sometimes to get correct IP
984 - Audio OK when called from Cisco ATA 186
985 - The Remote and Local tabs have no effect.
986 -Talk button appears even though running on a Pocket PC
987  and the 'walkie-talkie is NOT clicked.
990 7.6.5. PocketBone 10b1 Binary zip for iPAQ
991 ------------------------------------------
992 http://www.mivideo.net/videophone/PocketBone10b1.zip
993 ( 2,317,824 bytes 10/24/2001).
995 Screen looks like; 
996 http://www.mivideo.net/videophone/PocketBone.jpg
998 Notes : Video receiving from NetMeeting has no green stripes. 
999 Transmits test video by default. Internally noted as 0.10beta1.
1000 Audio and Video works fine. No trace options. If Full screen 
1001 option is enabled, there is NO way out of it other than 'soft reset'
1003 There is NO known source files for this version ! Neither will 
1004 there probably ever be. It is the last release from October 2001
1005 before the Open Source version took a back seat to the commercial
1006 development of iFON at Tabletmedia.com.
1007 http://www.tabletmedia.com/ifon.asp
1009 Unpack the binary zip file and copy PocketBone.exe to
1010 \Windows\Start Menu and gx.dll to \Windows. 
1012 7.6.6. PocketBone .9a1 binary ARMREl
1013 ------------------------------------
1014 ( 2,257 Kb 8/9/2001 )
1015 The main bitmap for this version looks like;
1016 http://www.mivideo.net/videophone7alpha3b.jpg
1017 The working .9a1 binary version from the link below 
1018 was released as version .9a1. 
1019 Internally it is noted as 0.7alpha3. This version transmits
1020 default H261 video color bar screen. It can receive video
1021 and Tx and Rx audio. There are a few problems with this version.
1022 Calling from CuSeeme 5.0 client sending 160x240 video 
1023 this version displays video full screen and locks up the display,
1024 so you cannot do anything else to restore except a 'soft reset'.
1025 'Your mileage may vary'. Should you have better luck, 
1026 please let me know at nubeus@bellsouth.net.
1028 Also, I have not been able to initiate a call with it. 
1029 The display shows the [Remote / Local ] tabs along with
1030 an [FS] switch at the lower right of the display. 
1031 It also has an early address book non-working icon where
1032 you enter the IP along with icons for [Dialpad / Calls]
1033 which are not functioning. The number buttons do work correctly !
1034  The ZIP sources above does NOT build 
1035 the 0.9a1 version although it was supposed to according to Yuri
1036 and the mailing list. The version it creates is noted internally
1037 only in trace file as 0.7a3. It connects, but does not
1038 transmit video and audio. It crashes when called.
1040 Version .9a1 Binary is at 
1041 http://www.mivideo.net/videophone/PocketBone9a1.zip
1042 ( internally noted as 0.7alpha3 !! ) ( 2,250,240 bytes 8/9/2001) 
1044 Source Zip files which should, but does NOT match binary above !
1046 Pocketbone source Zip (1,952 Kb )
1047 http://www.mivideo.net/pocketbone.zip
1048 ARMREl ( 2,257 Kb )      ARMDbg ( 4,177 Kb )
1050 PwLib source Zip ( 1,830 Kb )
1051 http://www.mivideo.net/pwlib.zip
1053 OpenH323 source Zip (1,692 Kb) 
1054 http://www.mivideo.net/openh323.zip
1056 7.6.7. General Usage Notes
1057 --------------------------
1059 - PocketBone performs best on iPAQ Pocket PC 2002.
1060   An iPAQ 3630 with CE 3.0 and the Pocket PC 2002 
1061   update will do fine ! Pocketbone takes up less than 3mb,
1062   and getting smaller every version.
1064 - By default PocketBone connects to NetMeeting using MS-GSM.
1065   If your NetMeeting does not have GSM codec installed, 
1066   get it here. What Microsoft calls GSM 6.10 is not what
1067   everyone understands as GSM 6.10 compression. NetMeeting
1068   must be set to "GSM 6.10" (MS-GSM), iPAQ to MS-GSM. 
1069   Then they connect. 
1071 - If you are running PocketBone and you found an error 
1072   saying "Missing components", get gx.dll (part of GAPI) 
1073   from here and place it to \Windows directory. 
1075 - To enable gateway call, e.g. through Cisco AS5300, 
1076   set following:
1077   Go to Options/Gates, set gateway IP address, set gatekeeper
1078   address, check "Use Gatekeeper", "Require Gatekeeper". 
1079   Switch to Options/General, set name, e.g. "ipaq" in "User"
1080   field. Add your extension, e.g. "3620" and your cisco id,
1081   e.g."3620!cisco" to "Aliases". Check "Disable fast-start"
1082   to avoid fast-start problems when call connected earlier 
1083   for expense of clarity of first few seconds of call. 
1084   You won't be able to receive calls if you are not registered
1085   on gatekeeper .You have to rearrange audio codecs located
1086   at Options/Audio. Move GSM-06.10 and/or G.711 on top of 
1087   the list and disable MS-GSM codec. MS-GSM codec is 
1088   incompatible with non-MS products. 
1090 - If your connection is good enough, try reduce jitter 
1091   buffer size ( Options / Audio ). It will decrease audio latency. 
1093 - Full-duplex sound driver has been released by Compaq for
1094   Pocket PC 2000. Get it here (look for Full Duplex Driver link).
1095   The off-the-shelf iPaq 2000 is half-duplex. Do not forget to 
1096   uncheck Walkie-Talkie in Options/Audio and restart the app. 
1098 - Should you get link error : LINK : fatal error LNK1181: 
1099   cannot open input file "snmpapi.lib" then the library is not
1100   included in "Object/library modules:" at "Project - Settings -
1101   Link" in eVC. 
1103 - Some people reported problems with building code when compiler
1104   reports some SNMP includes missing. You will need to obtain 
1105   Platform Builder, and then add include and lib directory to 
1106   project settings in order to be able to link snmpapi.lib and 
1107   snmp_mibii.lib from the Platform Builder directory. 
1108   (\PUBLIC\COMMON\OAK\LIB\ARM\SA1100\CE\RETAIL). 
1110 - Video won't work out-of-box on x86 emulator. Get GAPI emulator
1111   and try figuring it out.
1113 - Supports full-screen CIF video. Audio clicking removed 
1115 - If you had installed an old version before, please remove 
1116   old registry settings located at: 
1117   HKEY_CURRENT_USER\Software\OpenH323\PocketBone\CurrentVersion
1119 - To enable video receive with QCIF size, make sure registry
1120   has "VideoSize"=1 and "H261_QCIF"=1. 
1122 - If you have problems on connection, go to registry and disable
1123   video receiving.Find following key in registry:
1124   HKEY_CURRENT_USER\Software\OpenH323\PocketBone\CurrentVersion\Options
1125   Then add DWORD value of 0 with name of "VideoSize". 
1127 - In order to improve UDP performance ( videoconferencing ) 
1128   you have to change registry setting on iPAQ value to 16(maximum)
1129   HKEY_LOCAL_MACHINE\Comm\Afd
1130 On NetMeeting go to Video settings,
1131   choose "Better Image". 
1133 - If you get following when trying to run PocketBone:
1134   "Cannot find PocketBone or one of it's components. Make sure
1135   the path and file name are correct and all the required 
1136   libraries are available...", install GAPI (Game API) gx.h and gx.dll. 
1138 - When in Walkie-Talkie mode, re-assign a recorder button on
1139   your iPAQ to PocketBone. It will allow you to use this 
1140   recorder button as a switch to change PocketBone from "listen"
1141   mode to "talk" mode and back. Only required when iPAQ is used
1142   in half-duplex. Version .9a1 and .10b1 work fine in full 
1143   duplex on a PPC. rfer to;
1144   http://www.mivideo.net/Buttons.jpg
1146 7.6.8. Testing
1147 --------------
1148 Ohphone can be used to test Pocketbone as well as Netmeeting.
1149 Although Netmeeting does not hold up to the H323 standard well.
1150 and has been forsaken for the new Instant Messenger from Microsoft.
1151 CuSeeme 5.0 on the other hand is built with the RadVision H323 stack,
1152 a better implementation of the H323 standard. Pocketbone adheres
1153 thru the work of many contributors of the openh323.org project
1154 to the H323 v4 standard. It does not have patented codecs 
1155 integrated due to licensing restrictions but there are hooks
1156 in it should the codec be recognized in the system. Please refer
1157 to the openh323.org site for details.
1159 Cisco ATA 186 IP phones,
1160 either in H323 or when set to IP phones work quite well . 
1161 Testing has been done on HP Jornada and Casio PDAs. 
1162 Results will soon follow along with configurations, notes and source Zip files.
1164 7.6.9. Links 
1165 ------------
1166 Keep in touch with the PDA global activities thru http://www.infosync.no/
1168 7.6.10. Futures
1169 --------------
1170 Porting to other platforms such as Palm, and other CPUs such as MIPS, SH3,
1171 SH4 are not too difficult.
1173 HOW-TO step-by-step will be provided as new platforms are ported and tested.
1174 If you have ported this to another platform, your configuration info would
1175 be appreciated.
1177 Please forward comments of this how-to page to nubeus@bellsouth.net
1178 an html version of this readme is available at ;
1179 http://www.mivideo.net/videophone
1182 --------------------------------------------------------------------------------
1183 7.7. Solaris Issues
1184 -------------------
1185 On Solaris 8, you need to install GNU Ld (the loader) to get
1186 shared libraries to compile. (otherwise there is an error with -soname)
1187 You can get around this by using the static libraries and
1188 compiling with make optnoshared and make debugnoshared
1190 There is currently no implementation of GetRouteTable() in socket.cxx
1191 so OpenH323Proxy will not work.
1194 --------------------------------------------------------------------------------
1195 7.8. Build libraries under Windows
1196 ----------------------------------
1198 Unfortunately building libraries that were intended for Unix based systems
1199 under Windows can sometimes be difficult. Here are some notes on the subsystems
1200 that PWLib uses.
1202 7.8.1. OpenSSL under Windows
1203 ----------------------------
1204 The standard build for OpenSSL off http://www.openssl.org does work though it
1205 is rather tricky and requires things like Perl to be installed on your
1206 Windows box. However the build does work and is correct for PWlib use. Make
1207 sure you build the non-DLL Debug and Release versions.
1209 7.8.2. EXPAT under Windows
1210 ---------------------------
1211 The easiest way is to get the one in the OpenH323 CVS. This is guranteed to
1212 work. Use the following command to do this:
1214   cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323 co external/expat
1216 and then use the expat.dsw file to build the Debug and Release libraries.
1218 7.8.3. OpenLDAP under Windows
1219 ---------------------------
1220 To use OpenLDAP with PWLib you have to compile the OpenLDAP library as a DLL.
1221 Unfortunately, the standard distribution does not do this. So there is a file in
1222 PWLib called pwlib/tools/openldap-2.1.12-win32.zip which contains altered build
1223 files for that version of OpenLDAP. Note if you have a different version these
1224 files may not work.
1226 To build the DLL:
1228    1   Get OpenLDAP v 2.1.17 via tar file at
1229          ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.1.17.tgz
1230        or anonymous CVS using tag at
1231          :pserver:anonymous@cvs.OpenLDAP.org:/repo/OpenLDAP
1232        using tag OPENLDAP_REL_ENG_2_1_17
1233    2   Unpack it somewhere, eg c:\work\openldap
1234    3   Unzip the openldap-2.1.17-win32.zip file that directory
1235    4   Open openldap/build/main.dsw
1236    5   use Batch build to and select the "dll" project and build the "DLL Debug"
1237        and "DLL Release" targets.
1238    6   Put the resulting openldap/DLLRelease/openldap.dll and
1239        openldap/DLLDebug/openldapd.dll files in your path.
1241 7.8.4 SDL under Windows
1242 -----------------------
1243 Version 1.2.5 has support for Windows and MSVC so you just need to download it
1244 from http://www.libsdl.org/ and follow the build instructions.
1246 7.8.5 SASL under Windows
1247 ------------------------
1248 The standard distribution of Cyrus SASL comes with makefiles for Windows and
1249 clear instructions on how to build the library. The current implementation
1250 in PWLib was tested with Cyrus SASL version 2.1.18. Tarballs can be downloaded
1251 from:
1253     http://asg.web.cmu.edu/sasl/sasl-library.html
1256 --------------------------------------------------------------------------------
1257 7.9. ESD (Esound)
1258 -----------------
1260 Most targets come with native sound support.
1261 However there is also support for the ESD (esound) daemon which provides
1262 full duplex audio via network sockets.
1263 To compile pwlib to use ESD, you need to set the ESDDIR environment variable
1264 to point to the directory you have installed ESD into.
1265 Then compile pwlib.
1268 ================================================================================
1270 8. Conclusion
1271 -------------
1273 This package is far from a "product". There is very limited documentation and
1274 support will be on an ad-hoc basis, send us an e-mail and we will probably
1275 answer your question if it isn't too difficult.
1277 It is supplied mainly to support the open H323 project, but that shouldn't stop
1278 you from using it in whatever project you have in mind if you so desire. We like
1279 it and use it all the time, and we don't want to get into any religious wars of
1280 this class library over that one.
1285 ================================================================================
1287 9. Licensing                 
1288 ------------
1290 The bulk of this library is licensed under the MPL (Mozilla Public License)
1291 version 1.0. In simple terms this license allows you to use the library for 
1292 any purpose, commercial or otherwise, provided the library is kept in tact
1293 as a separate entity and any changes made to the library are made publicly
1294 available under the same (MPL) license. It is important to realise that that 
1295 refers to changes to the library and not your application that is merely 
1296 linked to the library.
1298 Note that due to a restriction in the GPL, any application you write that 
1299 uses anything another than GPL, eg our library with MPL, is technically in
1300 breach of the GPL license. However, it should be noted that MPL does not
1301 care about the license of the final application, and as only the author of
1302 the GPL application is in breach of his own license and is unlikely to sue
1303 themselves for that breach, in practice there is no problem with a GPL 
1304 application using an MPL or any other commercial library.
1307 The random number generator is based on code originally by Bob Jenkins.
1310 Portions of this library are from the REGEX library and is under the
1311 following license:
1313 Copyright 1992, 1993, 1994, 1997 Henry Spencer.  All rights reserved.
1314 This software is not subject to any license of the American Telephone
1315 and Telegraph Company or of the Regents of the University of California.
1317 Permission is granted to anyone to use this software for any purpose on
1318 any computer system, and to alter it and redistribute it, subject
1319 to the following restrictions:
1321 1. The author is not responsible for the consequences of use of this
1322    software, no matter how awful, even if they arise from flaws in it.
1324 2. The origin of this software must not be misrepresented, either by
1325    explicit claim or by omission.  Since few users ever read sources,
1326    credits must appear in the documentation.
1328 3. Altered versions must be plainly marked as such, and must not be
1329    misrepresented as being the original software.  Since few users
1330    ever read sources, credits must appear in the documentation.
1332 4. This notice may not be removed or altered.
1335 The in-band DTMF decoding code was taken from FreeBSD's dtmfdecode.c
1336 application written by Poul-Henning Kamp. It has the following
1337 license:
1338  * ----------------------------------------------------------------------------
1339  * "THE BEER-WARE LICENSE" (Revision 42):
1340  * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
1341  * can do whatever you want with this stuff. If we meet some day, and you think
1342  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
1343  * ----------------------------------------------------------------------------
1347 ================================================================================
1348 Equivalence Pty. Ltd.
1349 Home of OpenH323 and the Open Phone Abstraction Library (OPAL)
1351 support@equival.com.au
1352 http://www.equival.com.au (US Mirror - http://www.equival.com)
1354 ================================================================================