ptlib-2.2.0-src

所属分类:中间件编程
开发工具:Visual C++
文件大小:8570KB
下载次数:61
上传日期:2008-04-07 22:34:03
上 传 者1016775
说明:  opal的ptlib c++源程序 可以从官方网站上下载
(opal of ptlib c++ source code can be downloaded from the official website)

文件列表:
ptlib (0, 2008-03-07)
ptlib\.cvsignore (109, 2007-12-10)
ptlib\ChangeLog-ptlib-v2_0_2.txt (1352, 2008-03-07)
ptlib\ChangeLog-ptlib-v2_1_2.txt (16120, 2007-12-10)
ptlib\ChangeLog-ptlib-v2_2_0.txt (307, 2008-03-07)
ptlib\config.guess (43491, 2007-12-10)
ptlib\config.log (49281, 2008-03-07)
ptlib\config.status (32077, 2008-03-07)
ptlib\config.sub (31980, 2007-12-10)
ptlib\configure (372838, 2008-03-07)
ptlib\configure.ac (74821, 2008-03-07)
ptlib\configure.exe (192512, 2008-03-07)
ptlib\History.txt (17540, 2007-12-10)
ptlib\html (0, 2008-03-07)
ptlib\html\annotated.html (50265, 2008-03-07)
ptlib\html\args_8h-source.html (28252, 2008-03-07)
ptlib\html\args_8h.html (1805, 2008-03-07)
ptlib\html\array_8h-source.html (54206, 2008-03-07)
ptlib\html\array_8h.html (22578, 2008-03-07)
ptlib\html\asnber_8h-source.html (15656, 2008-03-07)
ptlib\html\asnber_8h.html (1574, 2008-03-07)
ptlib\html\asner_8h-source.html (191732, 2008-03-07)
ptlib\html\asner_8h.html (15440, 2008-03-07)
ptlib\html\asnper_8h-source.html (17583, 2008-03-07)
ptlib\html\asnper_8h.html (1574, 2008-03-07)
ptlib\html\asnxer_8h-source.html (14184, 2008-03-07)
ptlib\html\asnxer_8h.html (1574, 2008-03-07)
ptlib\html\channel_8h-source.html (38006, 2008-03-07)
ptlib\html\channel_8h.html (2383, 2008-03-07)
ptlib\html\classPAbstractArray-members.html (14366, 2008-03-07)
ptlib\html\classPAbstractArray.html (36833, 2008-03-07)
ptlib\html\classPAbstractArray.png (1931, 2008-03-07)
ptlib\html\classPAbstractDictionary-members.html (17678, 2008-03-07)
ptlib\html\classPAbstractDictionary.html (29855, 2008-03-07)
ptlib\html\classPAbstractDictionary.png (3001, 2008-03-07)
ptlib\html\classPAbstractList-members.html (16415, 2008-03-07)
ptlib\html\classPAbstractList.html (37016, 2008-03-07)
ptlib\html\classPAbstractList.png (1427, 2008-03-07)
ptlib\html\classPAbstractSet-members.html (16511, 2008-03-07)
ptlib\html\classPAbstractSet.html (21709, 2008-03-07)
... ...

Portable Tools Libary ===================== Contents -------- 1. Introduction 2. Apologies 3. CVS Access 4. Building PTLib 5. Using PTLib 6. IPv6 issues 7. Platform Specific Issues 8. Conclusion 9. Licensing ================================================================================ 1. Introduction --------------- PTLib (Portable Tools Library) is a moderately large class library that has it's genesis many years ago as PWLib (portable Windows Library), a method to product applications to run on both Microsoft Windows and Unix systems. It has also been ported to other systems such as Mac OSX, VxWorks and other embedded systems Since then the system has grown to include many classes that assist in writing complete multi-platform applications. Classes for I/O portability, multi- threading portability, aid in producing unix daemons and NT services portably and all sorts of internet protocols were added over the years. So it became a Portable Tools Library and was renamed to PTLib. All this over and above basic "container" classes such as arrays, linear lists, sorted lists (RB Tree) and dictionaries (hash tables) which were all created before STL was standardized. Future versions of PTLib will see many of these classes replaced or supplemented by STL. The library was used extensively for all our in-house products. Then we decided to support the Open H323 project by throwing in some of the code written for one of our products. Thus, required PTLib so it got thrown into the open source world as well. ================================================================================ 2. Apologies (not) ------------------ As you start using the library, the inevitable question "why did they do it that way?" will come up. The more experienced out there will know that there are several reasons for the way things are: * Carefully considered design, * Workarounds for portability and compiler subtleties, * History, it may be too hard to change an early design decision, * Complete arbitrariness, the absence of any compelling reason. So, when you ask the next question "why didn't you do it this way?" The answer will be one of the above. The last one being a synonym for "we didn't think of that!" The bottom line is, use the library as is or change it as you require. You can even send in suggestions for improvements (or merely changes) and we may (or may not) include them in the base line code. Just do not send us any mail starting with the words "Why did you..." as the answer is quite likely to be "Because!" ================================================================================ 3. SVN Access ------------- There is a public SVN archive available at svn.sourceforge.net. To extract, use a command line like the following: cvs -z3 -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323 co module where "module" is one of the module names specified above. If you would like see the structure of the CVS, then use the View CVS tool at: http://cvs.sourceforge.net/viewcvs.py/openh323/ ================================================================================ 4. Building PTLib ----------------- This library is multi-platform, however there are only two major build systems that are used. The Microsoft DevStudio environment for Windows and the GNU make system for all of the various unix systems. SPECIAL NOTE FOR MSVC 6 USERS: ------------------------------ If you are using MSVC 6 then please run the "msvc6_upgrade.bat" script in the PTLib top directory before continuing. If you skip this step, you will not be able to compile PTLib on MSVC 6. If you change the build environment to bypass this step, then DLL versions of PTLib will not function correctly. For more information, please see: http://www.voxgratia.org/docs/ptlib_windows.html#msvc_headers Actually, better yet, UPGRADE YOUR COMPILER!!!! 4.1. For Windows ---------------- Note that more complete instructions can be found at the following URL, but here are the basics: http://www.voxgratia.org/docs/ptlib_windows.html 1. Note you will need the bison and flex tools to compile some parts of the system. You can get a copy from http://www.openh323.org/bin/flexbison.zip, follow the instructions included in that package and put the executables somewhere in your path. 2. Start DevStudio .NET 2003 or .NET 2005. MSVC v6 may work, but is no longer actively supported. If you have another compiler you are on your own! Add these directories to the Include Files path as follows: In VisualStudio v7/8, go into the Tools menu, Options item. In the Options dialog, open the Projects folder, VC++ Directories item. In the 'Show Directories for:' list, select 'Include files'. C:\PTLib\Include Add the following to the Lib Files path and the Executable Files path: C:\PTLib\Lib The Lib folder is created as parts of PTLib are built. Also add this directory to your PATH environment variable (so the MergeSym tool can be found). 3. Open the ptlib.sln or ptlib_2005.sln file for DevStudio 2003 or 2005 respectively. 4. Select Release mode and build MergeSym. The build should automatically create a file ptlib/include/ptbuildopts.h via the configure.exe program that should be in the ptlib directory. If you have any problems try running the program directly from a command line. Use ".\configure --help" to get information on options such as forcing a feature or library dependency. The above will search the entire hard disk(s) for software packages to configure. This may take some time, so a useful feature is to set the environment variable: PTLIB_CONFIGURE_OPTIONS = --no-search which will only search some "standard" locations. Not ethat you could also include arguments to set the paths of packages that are not in standard locations. Note there are additional notes in the "Platform Specific Issues" on how to compile the various libraries in a manner suitable for use by PTLib under Windows. 5. You can then build the entire solution for Release, Debug and No Trace versions as you require. 5. That's it, now you're on your own! These are the project relationships: project dependencies output ------- ------------ ------ Console (none) ptlibs.lib MergeSym ptlibs.lib mergesym.exe PTLib ptlibs.lib, mergesym.exe ptlib.dll & lib XMLRPC ptlibs.lib, ptclib.lib xmlrpc.exe Debug versions append 'd' to filename, ie: ptlibsd.lib. MSDevWizard will not build in VisualStudio v7 and so is not included as a project. -------------------------------------------------------------------------------- 4.2. For unix. -------------- 1. If you have not put ptlib it into your home directory (~/ptlib) then you will have to defined the environment variable PTLIBDIR to point to the correct directory. Also make sure you have added the $PTLIBDIR/lib directory to your LD_LIBRARY_PATH environment variable if you intend to use shared libraries (the default). 2. Build the debug and release versions of the PTLib library as follows: cd ~/ptlib ./configure make This may take some time. Note, you will need bison and flex for this to compile, most unix systems have these. WARNING: there is a bug in most of the bison.simple files. See below for details. PTLib requires GNU Make. If GNU Make (gmake) is not your default make program (eg FreeBSD users), you will need to install GNU Make first and then use cd ~/ptlib ./configure gmake If you are getting huge numbers of errors during the compile, then it is likely your platform is not supported, or you have incorrectly set the OSTYPE and MACHTYPE variables. 3. That's all there is to it, you are now on your own! Bison problem under Unix The bison.simple file on many releases will not compile with the options used by the PTLib getdate.y grammar. The options are required to make the date parser thread safe so it is necessary to edit the bison.simple file to fix the problem. The file is usually at /usr/lib/bison.simple but in the tradition of unix could actually be anywhere. We leave it up to you to find it. The code: /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ int yyparse (void); #endif should be changed to /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ #ifndef YYPARSE_PARAM int yyparse (void); #endif #endif To prevent the incorrect function prototype from being defined. The getdate.y should then produce a getdate.tab.c file that will actually compile. ================================================================================ 5. Using PTLib -------------- What documentation there is consists of this document and all of the header files. It was intended that a post processer go through the header files and produces HTML help files, but this never got completed. 5.1. Tutorial ------------- Detailed tutorials will almost certainly not be forthcoming. However, at least giving you an indication on how to start an application would be usefull, so here is the infamous "Hello world!" program. // hello.cxx #include class Hello : public PProcess { PCLASSINFO(Hello, PProcess) public: void Main(); }; PCREATE_PROCESS(Hello) void Hello::Main() { cout << "Hello world!\n"; } // End of hello.cxx The CREATE_PROCESS macro actually defines the main() function and creates an instance of Hello. This assures that everything is initialised in the correct order. C++ does initialisation of global statics badly (and destruction is even worse), so try to put everything into your PProcess descedent rather than globals. A GUI application is very similar but is descended off PApplication rather than PProcess, and would create a window as a descendent off the PMainWindow class. The following is a simple Makefile for Unix platforms for the hello world program. # Simple makefile for PTLib PROG = hello SOURCES = hello.cxx ifndef PTLIBDIR PTLIBDIR=$(HOME)/ptlib endif include $(PTLIBDIR)/make/ptlib.mak # End of Makefile -------------------------------------------------------------------------------- 5.2. PTlib Classes ------------------ The classes in PTLib fall into the following broad categories Containers I/O Threads & Processes 5.2.1. Containers While there are a number of container classes you wourld rarely actually descend off them, you would use macros that declare type safe descendents. These are simply templates instantiations when using a compiler that supports templates in a simple manner (GNU C++ does not qualify in our opinion). 5.2.2. I/O There are many classes descendend from a basic primitive call a PChannel, which represents an entity for doing I/O. There are classes for files, serial ports, various types of socket and pipes to sub-processes. 5.2.3. Threads & Processes These classes support lightweight threading and functionality to do with the process as a whole (for example argument parsing). The threading will be pre-emptive on platforms that support it (Win32, platforms with pthreads eg Linux and FreeBSD) and cooperative on those that don't. ================================================================================ 6. IPv6 support in ptlib ------------------------ The IPv6 support in PTlib is supported and can be enabled or disabled via the configure program. When compiled with the IPv6 support, applications using only IPv4 are still fully backward compatible. PTLib is able to manage simultaneously IPv4 and IPv6 connections. -------------------------------------------------------------------------------- 6.1. Windows platforms ---------------------- According to microsoft, IPv6 is not supported under 9x, experimental on Win2000, supported on XP. You must use a compiler with IPv6 aware includes and libraries: - VC6 must be patched to support RFC 2553 structure. (See 7.1 and 7.2 for patch) - .Net should be ok (to be confirmed) The port as been performed with VC6 patched on a win2000 platform. For more informations about IPv6 support: Microsoft IPv6 support: http://research.microsoft.com/msripv6/ IPv6 for win2000: http://msdn.microsoft.com/downloads/sdks/platform/tpipv6.asp IPv6 for XP: http://www.microsoft.com/windowsxp/pro/techinfo/administration/ipv6/default.asp 6.1.1. Windows platforms: Win2000 --------------------------------- Go to Microsoft win2000 IPv6 tech preview web page. http://msdn.microsoft.com/downloads/sdks/platform/tpipv6.asp Download the 'tpipv6-001205.exe' file and read carrefully the faq. http://msdn.microsoft.com/downloads/sdks/platform/tpipv6/faq.asp This program is designed for win2000 English Service pack 1. To install it on newer Service pack, you have to modify some files. Again, read the Faq. This install the IPv6 driver and the IPv6 includes. 6.1.2. Windows platforms: XP ---------------------------- Read the IPv6 faq for windows XP http://www.microsoft.com/windowsxp/pro/techinfo/administration/ipv6/default.asp The 'ipv6 install' command installs only the IPv6 drivers. You need to install additionnals IPv6 includes for VC6. .NET should be ready. (to be confirmed ....) 6.1.3. Compiling ---------------- To compile ptlib and openh323 with the IPv6 support you have to set an environment variable: IPV6FLAG=1 Set it using: [Start]/[Configuration pannel]/[System]/[Environment] Add the IPv6 SDK include path in your Visual C++ 6 environment: [Tools]/[Options]/[Directories]/[Include files] -------------------------------------------------------------------------------- 6.2. Linux platforms -------------------- Recent Linux distributions support IPv6. 2.4 kernels are IPv6 aware. Linux IPv6 Faq: http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/ 6.2.1. Enabling IPv6 support ---------------------------- IPv6 can be compiled statically in the kernel or compiled as a module. To load the IPv6 module, as 'root' #modprobe ipv6 6.2.2. Compiling -------------- Check that IPv6 is really on #ls /proc/net/if_inet6 If this file exists, then IPv6 support is compiled in ptlib and openh323. -------------------------------------------------------------------------------- 6.3. Testing ------------ The test application sources can be found in the directory: openh323/samples/simple Once compiled the binaries are in simple/debug, release, obj_linux_x86_d, or obj_linux_x86_r. Under windows, the test application is simple.exe Under linux, the test application is simh323 IPv6 support can be tested on only one machine. Just open two shell/command windows. 6.3.1. IPv6 Address and port notation ------------------------------------- IPv4 address and port are written in dot notation: xx.xx.xx.xx:4000 IPv6 global address are written in semi-colon notation: [xx:xx:xx:xx::xx]:4000 IPv6 scoped address ad a field for the scope: [xx:xx:xx:xx::xx%scope]:4000 Exemples: Global address [3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5]:4000 [3ffe:0b80:0002:f9c1::500b:0ea5]:4000 Scoped address [fe80::232:56ff:fe95:315%lnc0]:4000 Scoped address are not supported yet. 6.3.2. Tests configuration -------------------------- Tests 1,2,3 run on a single dual stack machine. IPv4 Address: 127.0.0.1, 10.0.0.6 IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 Tests 4,5,6 run on two dual stack machine. PC1 IPv4 Address: 10.0.0.6 IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 PC2 IPv4 Address: 10.0.0.8 IPv6 Address: ::1, 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6 6.3.3. Test 1: IPv4 <--> IPv4 local call ---------------------------------------- This test checks the backward compatibility with IPv4 In first shell/command window, listen on 127.0.0.1, wait for a call. simple.exe -tttt -n -i 127.0.0.1 -l -a In second shell/command window, listen on 10.0.0.6, call 127.0.0.1 simple.exe -tttt -n -i 10.0.0.6 -n 127.0.0.1 6.3.4. Test 2: IPv6 <--> IPv6 local call ---------------------------------------- This test checks the IPv6 support In first shell/command window, listen on ::1, wait for a call. simple.exe -tttt -n -i ::1 -l -a In second shell/command window, listen on IPv6 address, call ::1 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -n [::1] 6.3.5. Test 3: IPv4 <--> IPv6 local call ---------------------------------------- This test checks that simultaneous IPv4 and IPv6 calls are supported. In first shell/command window, listen on 127.0.0.1, wait for a call. simple.exe -tttt -n -i 127.0.0.1 -l -a In second shell/command window, listen on IPv6 address, call 127.0.0.1 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -n 127.0.0.1 6.3.6. Test 4: IPv4 <--> IPv4 call between two hosts ---------------------------------------------------- This test checks the backward compatibility with IPv4 First host, listen on 10.0.0.6, wait for a call. simple.exe -tttt -n -i 127.0.0.1 -l -a Second host, listen on 10.0.0.8, call 10.0.0.6 simple.exe -tttt -n -i 10.0.0.8 -n 10.0.0.6 6.3.7. Test 5: IPv6 <--> IPv6 call between two hosts ---------------------------------------------------- This test checks the IPv6 support First host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5, wait for a call. simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 -l -a Second host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6, call 3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6 -n [3ffe:0b80:0002:f9c1:0000:0000:500b:0ea5] 6.3.8. Test 6: IPv4 <--> IPv6 call between two hosts ---------------------------------------------------- This test checks that simultaneous IPv4 and IPv6 calls are supported. First host, listen on 10.0.0.6, wait for a call. simple.exe -tttt -n -i 10.0.0.6 -l -a Second host, listen on 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6, call 10.0.0.6 simple.exe -tttt -n -i 3ffe:0b80:0002:f9c1:0000:0000:500b:0eb6 -n 10.0.0.6 -------------------------------------------------------------------------------- ***. Known limitations -------------------- You must use IPv6 address with global scope. Tests with IPv6 local link address fail. -------------------------------------------------------------------------------- 6.5. Questions -------------- 6.5.1. How to patch my VC6 includes files ? ----------------------------------------- To patch you Developper studio Visual C++ version 6, just edit the file "C:\Program Fil ... ...

近期下载者

相关文件


收藏者