mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-12 23:40:04 +00:00
remove jrtp (we can always pull it out of the archives)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1035 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
1a4224183f
commit
13c4c60260
@ -1,59 +0,0 @@
|
||||
/* .in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to 1 if your processor stores words with the most significant byte
|
||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
@ -1 +0,0 @@
|
||||
|
@ -1,268 +0,0 @@
|
||||
March 26, 2006
|
||||
|
||||
|
||||
JRTPLIB ChangeLog
|
||||
|
||||
-----------
|
||||
|
||||
3.5.2 (March 2006)
|
||||
* Fixed bug in the random number functions which are used with
|
||||
MS Visual Studio 2005. Thanks to Jun Ohasi (jun@jnb.odn.ne.jp)
|
||||
for bringing the incorrect use of rand_s to my attention.
|
||||
* Changed types like u_int32_t to types like uint32_t in the
|
||||
documentation.
|
||||
|
||||
3.5.1 (March 2006)
|
||||
* Fixed bug in RTCP scheduler. Due to -= operation on an RTPTime
|
||||
instance, an incredibly large scheduling interval could be
|
||||
calculated.
|
||||
|
||||
3.5.0 (March 2006)
|
||||
* Now, the define RTP_SNPRINTF is used instead of snprintf,
|
||||
_snprintf or _snprintf_s.
|
||||
* In the RTPSources member function MultipleTimeouts, I neglected
|
||||
to call the OnRemoveSource virtual function. Thanks to Adam Love
|
||||
(alove@exceptionalinnovation.com) for bringing this to my attention.
|
||||
* Added a OnSendRTCPCompoundPacket member function to the RTPSession
|
||||
class. Useful for inspecting outgoing data.
|
||||
* Modified the templates somewhat. Should cause less compiler problems
|
||||
this way. Thanks tot Chris Hamilton (chamilton@cs.dal.ca) for
|
||||
providing this solution.
|
||||
* On Win32, if possible the functions rand_s and srand_s are now used.
|
||||
|
||||
3.4.0 (January 2006)
|
||||
* Changed u_int32_t like types to uint32_t like types. Thanks to
|
||||
Panagiotis Issaris (takis.issaris@uhasselt.be) for informing me
|
||||
that these are C99 compliant.
|
||||
* Changed sprintf functions to safer snprintf functions. Thanks to
|
||||
Panagiotis Issaris (takis.issaris@uhasselt.be) for pointing this
|
||||
out.
|
||||
* Fixed bug in RTPSources (counters were not reset when the source
|
||||
table was cleared). Thanks to Justin Matthews (jmatthewsr@yahoo.com)
|
||||
for pointing this out.
|
||||
* Fixed bug in RTPHashTable and RTPKeyHashTable. Thanks to
|
||||
Tom Pijsel (tom.pijsel@twelvecubes.com) for bringing this to my
|
||||
attention.
|
||||
* Fixed bug in example3.cpp
|
||||
|
||||
3.3.0 (October 2005)
|
||||
* Now it is possible to use a user-defined transmission component.
|
||||
* Added GStreamer transmission component written by Philippe Khalaf
|
||||
(burger@speedy.org).
|
||||
|
||||
3.2.1 (September 2005)
|
||||
* The library wouldn't compile when probation support was disabled.
|
||||
Thanks to Herman Bastiaens (herman.bastiaens@student.luc.ac.be) for
|
||||
bringing this to my attention.
|
||||
* When parsed from an RTPRawPacket, the receive time is also stored
|
||||
in the RTPPacket instance.
|
||||
|
||||
3.2.0 (September 2005)
|
||||
* Modified the routine in the RTPSession class which creates the
|
||||
CNAME. Aparently on some systems, the 'getlogin' call returns
|
||||
null. As an alternative, the library uses getenv("LOGNAME").
|
||||
Thanks to Mark Schiffmann (schima@neumann-elektronik.com) for
|
||||
mentioning this to me.
|
||||
* Added a OnBYEPacket method to the RTPSession class. Thanks to
|
||||
Sigrid Thijs (sthijs@androme.be) for suggesting this.
|
||||
* When probation support is enabled, a probation type can be selected
|
||||
when the session is created. Supported types are "No probation",
|
||||
"Use probation, but store packets" and "Use probation and discard
|
||||
packets received in probation mode". Thanks to Chris Flerackers
|
||||
(cflerackers@androme.be) for suggesting this feature.
|
||||
* Added a parameter to WaitForIncomingData which indicates if
|
||||
data is available when the function returns. Based on a suggestion
|
||||
by Uwe Andersen (uandersen@mayah.com).
|
||||
* Now using getifaddrs (if possible) to obtain our own IP addresses
|
||||
(both in IPv4 version and IPv6 version).
|
||||
* IPv6 code in Win32 version now works, but Visual Studio 2005 beta
|
||||
has to be used. Thanks to Yi-Huan Chan (yhchan@csie.nctu.edu.tw)
|
||||
for contributing some code.
|
||||
* Added Win32 code for GetLocalIPList_Interfaces (both IPv4 and IPv6).
|
||||
Thanks to Ivan Makushkin (camry@pisem.net) for pointing out how
|
||||
this could be done.
|
||||
* Added an option to use a SR packet when sending a BYE message.
|
||||
Previously, a RR packet was always used, even if a session is
|
||||
actually an active sender of data. Thanks to Uwe Andersen
|
||||
(uandersen@mayah.com) for bringing this to my attention.
|
||||
* Fixed bug in CNAME creation.
|
||||
* Added WinCE support. Thanks to Maarten Daniels
|
||||
(maarten.daniels@uhasselt.be) for supplying patches.
|
||||
* Changed the CurrentTime implementation for the MS-Windows version.
|
||||
Thanks to Maarten Daniels (maarten.daniels@uhasselt.be) and Chris
|
||||
Flerackers (cflerackers@androme.be).
|
||||
|
||||
3.1.0 (October 2004)
|
||||
* Added a callback OnPollThreadStep which is called at the end of
|
||||
each loop of the poll thread
|
||||
* Added the examples subdirectory to the package
|
||||
* Fixed bug in rtpudpv4transmitter.cpp and rtpudpv6transmitter.cpp
|
||||
which caused an infinite loop in LeaveAllMulticastGroups. Thanks
|
||||
to Stijn Agten (stijn.agten@luc.ac.be) for pointing this out.
|
||||
* Added a function GetTransmissionInfo to the RTPTransmitter class
|
||||
(and subclasses). The function will return some additional
|
||||
information about the transmitter, like local IP addresses and
|
||||
socket descriptors.
|
||||
|
||||
3.0.2 (September 2004)
|
||||
* Bugfix in rtpinternalsourcedata.cpp. The bug caused a crash when
|
||||
duplicate packets were received. Thanks to Dominique Prunier
|
||||
(dominique.prunier@micromedia-int.com) for informing me about
|
||||
this.
|
||||
|
||||
3.0.1 (September 2004)
|
||||
* Bugfix in rtpudpv4transmitter.cpp and rtpudpv6transmitter.cpp in
|
||||
method SetReceiveMode
|
||||
* Removed unused 'acceptownpackets' variable from
|
||||
rtpudpv4transmitter.cpp and rtpudpv6transmitter.cpp
|
||||
* Added a 'Dump' function (for debugging) in RTPUDPv4Transmitter
|
||||
and RTPUDPv6Transmitter
|
||||
* Now using JThread 1.1.0
|
||||
|
||||
3.0.0 (August 2004)
|
||||
* Complete rewrite of the library to provide better extensibility
|
||||
and compliance with RFC 3550
|
||||
* Changes from the 2.x series:
|
||||
- The 2.x series was created with the idea that the user
|
||||
would only need to use the RTPSession class which meant
|
||||
that the other classes were not very useful by themselves.
|
||||
This version on the other hand, aims to provide many
|
||||
useful components to aid the user in building RTP capable
|
||||
applications.
|
||||
- In this version, the code which is specific for the
|
||||
underlying protocol by which RTP packets are transported,
|
||||
is bundled in a class which inherits its interface from a
|
||||
class called RTPTransmitter. This makes it easy for
|
||||
different underlying protocols to be supported. Currently
|
||||
there is support for UDP over IPv4 and UDP over IPv6.
|
||||
|
||||
2.9 (July 2004)
|
||||
* Fixed bug in rtpsrclist.cpp. Thanks to Lukasz Bobowiec
|
||||
(bobowiec@icslab.agh.edu.pl)
|
||||
* Added function in RTPSourceData which returns the IP address
|
||||
* Changed the random routines. Thanks to Jaap Keuter
|
||||
(jaap.keuter@xs4all.nl)
|
||||
* Made the shared library link against libstdc++ if possible.
|
||||
Thanks to Anatoly Yakovenko (aeyakovenko@yahoo.com) for the
|
||||
suggestion.
|
||||
|
||||
2.8 (January 2004)
|
||||
* Added code to avoid a crash when receiving a malformed packet
|
||||
* Fixed a memory leak (forgot to free memory when a malformed
|
||||
packet was discarded)
|
||||
* Changed debug routines for memory tracking
|
||||
|
||||
2.7b (November 2003)
|
||||
* Only added --enable-fpic and --enable-fPIC to the configure script
|
||||
|
||||
2.7 (December 2002)
|
||||
* Fixed important bug in rtpsources.cpp. This bug could cause
|
||||
source information to get lost and could create a memory leak.
|
||||
* Improved support for AIX in multicasting code (uses _AIX define).
|
||||
Thanks to Klaus Matuschek (klaus.matuschek@infonova.com)
|
||||
* Fixed possible buffer overrun in rtpcontributingsources.cpp
|
||||
|
||||
2.6 (January 2002)
|
||||
* This release only contains some minor changes
|
||||
* An 'install' target was added to the Makefile
|
||||
* Some newlines were added add the end of certain files to avoid
|
||||
compiler warnings
|
||||
* Improved the jitter calculations somewhat
|
||||
|
||||
2.5 (December 2000)
|
||||
* Added the possibility for the user to receive the raw RTCP packets.
|
||||
* Fixed a bug in RTPContributingSources::CreateLocalCNAME(). In this
|
||||
routine, the wrong length was passed to 'gethostname'. Thanks to
|
||||
Sergey V.Shpital (sergey@page.net.ru) for bringing this to my
|
||||
attention.
|
||||
* Added a routine to set the Type of Service (ToS) field of the
|
||||
outgoing packets (both RTP and RTCP). Thank to Philippe Cardon
|
||||
(philippe.cardon@bt.com) for writing this code.
|
||||
* Fixed a bug in the 'packets lost' calculation. Thank to Domingo
|
||||
Cuevas Jr. (dcj@onebox.com) for helping me find this bug.
|
||||
* Fixed a bug in the sequence number and jitter calculation: when
|
||||
packets were received out of order, the sequence numbers and
|
||||
jitter got messed up. Many thanks to Mohammad Tawsheeq Russool
|
||||
(m.russool@eim.surrey.ac.uk) for helping me track down these
|
||||
bugs.
|
||||
* Added the possibility to set the timestamp unit for a particular
|
||||
source. Previously, it was assumed that their timestamp unit
|
||||
was the same as that of the local session.
|
||||
|
||||
2.4 (July 2000)
|
||||
* Fixed a bug which caused all CSRS's except one to be incorrect.
|
||||
* Added RTP header extension support (for both sending and receiving).
|
||||
* Added some things (which should have been there already) to
|
||||
RTPPacket.
|
||||
* Adjusted the way in which the login name is retrieved on unix-like
|
||||
systems. First I used a call to 'getlogin', but apparently this
|
||||
function messes with timers through the use of 'alarm' calls (at
|
||||
least on Linux). Now, I use a combination of 'geteuid' and
|
||||
'getpwuid' to obtain the necessary information. This does not
|
||||
have that problem and is a lot cleaner since it doesn't depend
|
||||
on login info (utmp) like 'getlogin'. Thanks to Roberto Jung Drebes
|
||||
(drebes@inf.ufrgs.br) for pointing out the timer-problem.
|
||||
* Made a LaTeX version of the manual and tutorial. Looks a lot nicer.
|
||||
* Made it possible for the user to specify the local IP address
|
||||
instead of letting the library figure it out itself.
|
||||
* Fixed a bug which caused the 'fraction lost' in a RR packet to be
|
||||
zero all the time. Thanks to Domingo Cuevas Jr. (dcj@onebox.com) for
|
||||
pointing this out.
|
||||
* Rewrote the RTCP packet sending routines. Now, they are much cleaner
|
||||
and much more understandable :)
|
||||
* Added better support for RTCP 'APP' packets. You can now both send
|
||||
and receive APP packets.
|
||||
|
||||
2.3 (April 2000)
|
||||
* The routine which creates and sends RTCP packets is now a bit faster.
|
||||
* Added a sample that demonstrates the round-trip time function.
|
||||
* Added functions to RTPSourceData: now the time when the last RR or
|
||||
SR report was received can be retrieved. Also, the round trip time
|
||||
can be retrieved: this is calculated as suggested in RFC 1889.
|
||||
* Fixed a bug: the LSR value was not calculated correctly, now it is
|
||||
(or should be ;-) )
|
||||
* Instead of specifying defines on the command line, they are now
|
||||
defined in a config file. The unix version of this file is created
|
||||
by the configure script.
|
||||
* Added a member to RTPPacket which I had forgotten (the payload type,
|
||||
which is obviously important :-) ).
|
||||
* The library should now be able to work on a VxWorks platform. Thanks
|
||||
to Dave Osborne (dosborne@argoneng.com) for his help.
|
||||
* Added a tutorial and a small example application.
|
||||
* Added some debugging routines (RTPDebug class) to check for memory
|
||||
leaks. It turned out that there weren't any, so I'm pretty pleased ;)
|
||||
* I've added a 'configure' script to make compilation a bit easier
|
||||
across different platforms. Thanks to Qi Han (qh1c4@mizzou.edu) for
|
||||
helping me to improve the support for the Solaris platform. Also
|
||||
many thanks to Dario Maggiorini (dario@netdev.usr.dsi.unimi.it) for
|
||||
helping me test the script on several platforms.
|
||||
* Added multicasting support.
|
||||
* A bug in rtpsourcedata.cpp was pointed out and fixed by Ramon Clout
|
||||
(ramonc@win.tue.nl). Many thanks for this, Ramon.
|
||||
|
||||
2.2 (February 2000)
|
||||
* Extra support for Sun and HP. Thanks to Henry Lau (hlau@nuera.com)
|
||||
and Justin Matthews (jmatthews@nuera.com) for this information.
|
||||
* The 'Poll' routine in rtpconnection.cpp has been altered. Now, the
|
||||
routine should work even if there's that ioctl bug (previously, this
|
||||
bug was only taken into consideration on a Windows platform).
|
||||
Thanks to Justin Matthews (jmatthews@nuera.com) for his bugreport.
|
||||
* Added some routines to RTPSession to get the local IP address and the
|
||||
port number of the sending socket.
|
||||
* 'install' rule added to the makefile.
|
||||
* Added the define 'RTP_SOCKLENTYPE_UINT'. See README.TXT for more
|
||||
information about this.
|
||||
|
||||
2.1 (December 1999)
|
||||
* First release of jrtplib.
|
||||
* Added member functions of RTPSession to retrieve the used sockets.
|
||||
* Made the destination list faster by using a hash table.
|
||||
|
||||
2.0 (August 1999)
|
||||
* First decent implementation of RTP. Entirely rewritten since 1.0.
|
||||
|
||||
1.0 (August 1999)
|
||||
* First implementation of RTP. There were a lot of things that weren't
|
||||
quite right and the organisation of the classes was quite nasty.
|
||||
However, I learned a lot about RTP making this version, and so it
|
||||
allowed me to make a good start on version 2.0.
|
@ -1,236 +0,0 @@
|
||||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
This file is free documentation; the Free Software Foundation gives
|
||||
unlimited permission to copy, distribute and modify it.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. (Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.)
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You only need
|
||||
`configure.ac' if you want to change it or regenerate `configure' using
|
||||
a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that the
|
||||
`configure' script does not know about. Run `./configure --help' for
|
||||
details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not support the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a
|
||||
time in the source code directory. After you have installed the
|
||||
package for one architecture, use `make distclean' before reconfiguring
|
||||
for another architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out automatically,
|
||||
but needs to determine by the type of machine the package will run on.
|
||||
Usually, assuming the package is built to be run on the _same_
|
||||
architectures, `configure' can figure that out, but if it prints a
|
||||
message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share, you
|
||||
can create a site shell script called `config.site' that gives default
|
||||
values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script). Here is a another example:
|
||||
|
||||
/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
|
||||
configuration-related scripts to be executed by `/bin/bash'.
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
@ -1,19 +0,0 @@
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
@ -1,21 +0,0 @@
|
||||
SUBDIRS = src
|
||||
EXTRA_DIST = LICENSE.MIT ChangeLog README.TXT jrtplib.dsw jrtplib.dsp jrtplib.vcproj \
|
||||
jrtplib.sln jrtplib_wce.vcproj jrtplib_wce.sln
|
||||
|
||||
if IS64BITLINUX
|
||||
AM_CFLAGS = -m64 -march=k8 -fPIC
|
||||
endif
|
||||
|
||||
dist-hook: distclean
|
||||
rm -f $(distdir)/src/rtpconfig_unix.h
|
||||
rm -f $(distdir)/src/rtptypes_unix.h
|
||||
mv $(distdir)/jrtplib.dsw $(distdir)/jrtplib.dsw.tmp
|
||||
mv $(distdir)/jrtplib.dsp $(distdir)/jrtplib.dsp.tmp
|
||||
todos < $(distdir)/jrtplib.dsw.tmp > $(distdir)/jrtplib.dsw
|
||||
todos < $(distdir)/jrtplib.dsp.tmp > $(distdir)/jrtplib.dsp
|
||||
rm $(distdir)/jrtplib.dsw.tmp
|
||||
rm $(distdir)/jrtplib.dsp.tmp
|
||||
chmod a-x $(distdir)/jrtplib.vcproj
|
||||
chmod a-x $(distdir)/jrtplib.sln
|
||||
chmod a-x $(distdir)/jrtplib_wce.vcproj
|
||||
chmod a-x $(distdir)/jrtplib_wce.sln
|
@ -1,630 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS TODO config.guess config.sub depcomp \
|
||||
install-sh ltmain.sh missing mkinstalldirs
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS64BITLINUX_FALSE = @IS64BITLINUX_FALSE@
|
||||
IS64BITLINUX_TRUE = @IS64BITLINUX_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
RTP_ENDIAN = @RTP_ENDIAN@
|
||||
RTP_FILIO = @RTP_FILIO@
|
||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||
RTP_JTHREADINCLUDES = @RTP_JTHREADINCLUDES@
|
||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||
RTP_SOCKIO = @RTP_SOCKIO@
|
||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||
RTP_SUPPORT_IPV6 = @RTP_SUPPORT_IPV6@
|
||||
RTP_SUPPORT_IPV6MULTICAST = @RTP_SUPPORT_IPV6MULTICAST@
|
||||
RTP_SUPPORT_PROBATION = @RTP_SUPPORT_PROBATION@
|
||||
RTP_SUPPORT_RANDR = @RTP_SUPPORT_RANDR@
|
||||
RTP_SUPPORT_SDESPRIV = @RTP_SUPPORT_SDESPRIV@
|
||||
RTP_SUPPORT_THREAD = @RTP_SUPPORT_THREAD@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
SUBDIRS = src
|
||||
EXTRA_DIST = LICENSE.MIT ChangeLog README.TXT jrtplib.dsw jrtplib.dsp jrtplib.vcproj \
|
||||
jrtplib.sln jrtplib_wce.vcproj jrtplib_wce.sln
|
||||
|
||||
@IS64BITLINUX_TRUE@AM_CFLAGS = -m64 -march=k8 -fPIC
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/pkgconfig $(distdir)/src
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-libtool distclean-recursive \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs installdirs-am \
|
||||
maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
dist-hook: distclean
|
||||
rm -f $(distdir)/src/rtpconfig_unix.h
|
||||
rm -f $(distdir)/src/rtptypes_unix.h
|
||||
mv $(distdir)/jrtplib.dsw $(distdir)/jrtplib.dsw.tmp
|
||||
mv $(distdir)/jrtplib.dsp $(distdir)/jrtplib.dsp.tmp
|
||||
todos < $(distdir)/jrtplib.dsw.tmp > $(distdir)/jrtplib.dsw
|
||||
todos < $(distdir)/jrtplib.dsp.tmp > $(distdir)/jrtplib.dsp
|
||||
rm $(distdir)/jrtplib.dsw.tmp
|
||||
rm $(distdir)/jrtplib.dsp.tmp
|
||||
chmod a-x $(distdir)/jrtplib.vcproj
|
||||
chmod a-x $(distdir)/jrtplib.sln
|
||||
chmod a-x $(distdir)/jrtplib_wce.vcproj
|
||||
chmod a-x $(distdir)/jrtplib_wce.sln
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
@ -1 +0,0 @@
|
||||
|
@ -1 +0,0 @@
|
||||
|
@ -1,127 +0,0 @@
|
||||
------------------------------------------------------------------------------
|
||||
March 26, 2006
|
||||
|
||||
|
||||
JRTPLIB (v3.5.2)
|
||||
|
||||
|
||||
Developed at the The Expertise Centre for
|
||||
Digital Media (EDM), a research institute
|
||||
of the Hasselt University
|
||||
|
||||
http://www.edm.uhasselt.be/
|
||||
http://www.uhasselt.be/
|
||||
|
||||
|
||||
LIBRARY LOCATION AND CONTACT
|
||||
============================
|
||||
|
||||
Normally, you should be able to download the latest version of the library
|
||||
from this url:
|
||||
http://research.edm.uhasselt.be/jori/jrtplib/jrtplib.html
|
||||
|
||||
If you have questions about the library, you can mail me at:
|
||||
jori@lumumba.uhasselt.be
|
||||
|
||||
There is also a mailing list for the library. To subscribe to the list,
|
||||
send an e-mail with the text 'subscribe jrtplib' as the message body (not
|
||||
the subject) to majordomo@edm.uhasselt.be and you'll receive further
|
||||
instructions.
|
||||
|
||||
ACKNOWLEDGMENT
|
||||
==============
|
||||
|
||||
I would like thank the people at the Expertise Centre for Digital Media
|
||||
for giving me the opportunity to create this rewrite of the library.
|
||||
|
||||
DISCLAIMER & COPYRIGHT
|
||||
======================
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
INSTALLATION NOTES
|
||||
==================
|
||||
|
||||
* To compile the library on a unix-like platform, just start the configure
|
||||
script. This should generate a makefile which you can use to start
|
||||
building the library using 'make'.
|
||||
|
||||
* To compile the library on an MS-Windows platfrom: Visual Studio
|
||||
workspace files are included. The project will search
|
||||
for JThread files in ..\jthread-1.1.2
|
||||
To compile the library without using JThread, comment the line
|
||||
with RTP_SUPPORT_THREAD in rtpconfig_win.h
|
||||
Note that for Visual Studio 6, you must have service pack 6 for
|
||||
installed to be able to compile the library. (NOTE: In this copy
|
||||
of the lib, jthread has been included and does not need to be included
|
||||
seperately)
|
||||
|
||||
* For a manual about the library, please refer to doc/ subdirectory.
|
||||
Using 'make doc', a PDF version of the documentation will be built.
|
||||
Note that you'll need to have the pdflatex LaTeX compiler installed.
|
||||
Alternatively, you can download the documentation from the homepage:
|
||||
http://research.edm.uhasselt.be/jori/jrtplib/jrtplib.pdf
|
||||
|
||||
* For systems with low memory or for applications which will involve only
|
||||
a few participants at a time:
|
||||
You can set the HASHSIZE defines in rtpsources.h, rtpudpv4transmitter.h
|
||||
and rtpudpv6transmitter.h to a lower value to avoid memory being wasted.
|
||||
Note that the library will have to be recompiled.
|
||||
|
||||
* Used defines:
|
||||
- WIN32:
|
||||
For compilation on an Win32 platform.
|
||||
- _WIN32_WCE:
|
||||
Define needed for compilation on a WinCE platform
|
||||
- RTP_HAVE_SYS_FILIO:
|
||||
Set if <sys/filio.h> exists.
|
||||
- RTP_HAVE_SYS_SOCKIO:
|
||||
Set if <sys/sockio.h> exists.
|
||||
- RTP_BIG_ENDIAN:
|
||||
If set, assume big-endian byte ordering.
|
||||
- RTP_SOCKLENTYPE_UINT:
|
||||
Indicates that getsockname used an unsigned int as its
|
||||
third parameter.
|
||||
- RTP_HAVE_SOCKADDR_LEN:
|
||||
Indicates that struct sockaddr has an sa_len field.
|
||||
- RTP_SUPPORT_IPV4MULTICAST:
|
||||
Enables support for IPv4 multicasting.
|
||||
- RTP_SUPPORT_THREAD:
|
||||
Enables support for JThread.
|
||||
- RTP_SUPPORT_SDESPRIV:
|
||||
Enables support for RTCP SDES private items.
|
||||
- RTP_SUPPORT_PROBATION:
|
||||
If set, a few consecutive RTP packets are needed to validate
|
||||
a member.
|
||||
- RTP_SUPPORT_GNUDRAND:
|
||||
If set, the RTPRandom class will use drand48_r and srand48_r
|
||||
- RTP_SUPPORT_RANDR:
|
||||
If set and RTP_SUPPORT_GNUDRAND is not set, the RTPRandom
|
||||
class will use rand_r.
|
||||
- RTP_SUPPORT_GETLOGINR:
|
||||
If set, the library will use getlogin_r instead of getlogin.
|
||||
- RTP_SUPPORT_IPV6:
|
||||
If set, IPv6 support is enabled.
|
||||
- RTP_SUPPORT_IPV6MULTICAST:
|
||||
If set, IPv6 multicasting support is enabled.
|
||||
- RTPDEBUG:
|
||||
Enables some memory tracking functions and some debug routines.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
7014
libs/jrtplib/aclocal.m4
vendored
7014
libs/jrtplib/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
1466
libs/jrtplib/config.guess
vendored
1466
libs/jrtplib/config.guess
vendored
File diff suppressed because it is too large
Load Diff
1579
libs/jrtplib/config.sub
vendored
1579
libs/jrtplib/config.sub
vendored
File diff suppressed because it is too large
Load Diff
22475
libs/jrtplib/configure
vendored
22475
libs/jrtplib/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,457 +0,0 @@
|
||||
AC_INIT(configure.in)
|
||||
AM_INIT_AUTOMAKE(jrtplib,3.5.2)
|
||||
|
||||
RTP_FILIO="// Don't have <sys/filio.h>"
|
||||
RTP_SOCKIO="// Don't have <sys/sockio.h>"
|
||||
RTP_ENDIAN="// Little endian system"
|
||||
RTP_SOCKLENTYPE_UINT="// socklen_t is int'"
|
||||
RTP_HAVE_SOCKADDR_LEN="// No sa_len member in struct sockaddr"
|
||||
RTP_SUPPORT_IPV4MULTICAST="// No IPv4 multicasting support"
|
||||
RTP_SUPPORT_IPV6MULTICAST="// No IPv6 multicasting support"
|
||||
RTP_SUPPORT_THREAD="// No support for jthread"
|
||||
RTP_SUPPORT_SDESPRIV="// No support for SDES PRIV items"
|
||||
RTP_SUPPORT_PROBATION="// Do not wait for a number of consecutive packets to validate source"
|
||||
RTP_SUPPORT_GNUDRAND="// Not using drand48_r and srand48_r"
|
||||
RTP_SUPPORT_RANDR="// Not using rand_r"
|
||||
RTP_SUPPORT_GETLOGINR="// Not using getlogin_r"
|
||||
RTP_SUPPORT_IPV6="// No IPv6 support"
|
||||
RTP_SUPPORT_IFADDRS="// No ifaddrs support"
|
||||
RTP_LINKLIBS=""
|
||||
|
||||
if test "BLA$CXXFLAGS" = "BLA" ; then
|
||||
dnl CXXFLAGS="-g -Werror -Wall"
|
||||
CXXFLAGS="-O2 "
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Set language to C++ and do libtool stuff
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_LANG(C++)
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check for the SDES PRIV support
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_ARG_ENABLE(sdespriv,[ --disable-sdespriv Disable support for SDES PRIV items],[
|
||||
if test "$enableval" = yes ; then
|
||||
privsupport="yes"
|
||||
else
|
||||
privsupport="no"
|
||||
fi],[
|
||||
privsupport="yes"
|
||||
])
|
||||
|
||||
if test "$privsupport" = "yes" ; then
|
||||
RTP_SUPPORT_SDESPRIV="#define RTP_SUPPORT_SDESPRIV"
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check for the probation support
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_ARG_ENABLE(probation,[ --disable-probation Disable support for probation of a new source],[
|
||||
if test "$enableval" = yes ; then
|
||||
probsupport="yes"
|
||||
else
|
||||
probsupport="no"
|
||||
fi],[
|
||||
probsupport="yes"
|
||||
])
|
||||
|
||||
if test "$probsupport" = "yes" ; then
|
||||
RTP_SUPPORT_PROBATION="#define RTP_SUPPORT_PROBATION"
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check for the jthread headers
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_ARG_ENABLE(jthread,[ --disable-jthread Disable support for JThread],[
|
||||
if test "$enableval" = yes ; then
|
||||
checkjthread="yes"
|
||||
else
|
||||
checkjthread="no"
|
||||
fi],[
|
||||
checkjthread="yes"
|
||||
])
|
||||
|
||||
if test "$checkjthread" = "yes" ; then
|
||||
searchdirs="/usr/include/jthread /usr/local/include/jthread"
|
||||
|
||||
AC_MSG_CHECKING(for JThread include files)
|
||||
AC_ARG_WITH(jthread-includes,[ --with-jthread-includes Directory where JThread include files are located],
|
||||
[
|
||||
if test -e "$withval"/jthread.h && test -e "$withval"/jmutex.h ; then
|
||||
AC_MSG_RESULT(in "$withval")
|
||||
AC_MSG_CHECKING(JThread version)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include "$withval/jthread.h"
|
||||
class MyThread : public JThread
|
||||
{
|
||||
public:
|
||||
void *Thread() { JThread::ThreadStarted(); return 0; }
|
||||
};],[
|
||||
RTP_JTHREADINCLUDES="-I $withval"
|
||||
RTP_SUPPORT_THREAD="#define RTP_SUPPORT_THREAD"
|
||||
RTP_LINKLIBS="$RTP_LINKLIBS -ljthread -lpthread"
|
||||
AC_MSG_RESULT(>= 1.1.0) ],[
|
||||
AC_MSG_RESULT(< 1.1.0)
|
||||
AC_MSG_WARN(You need at least JThread version 1.1.0. Support for JThread has been disabled)])
|
||||
else
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_MSG_WARN(The JThread include files were not found in $withval. Support for JThread has been disabled)
|
||||
fi
|
||||
],
|
||||
[
|
||||
for i in $searchdirs ; do
|
||||
if test -e $i/jthread.h && test -e $i/jmutex.h ; then
|
||||
RTP_JTHREADINCLUDEDIR="$i"
|
||||
AC_MSG_RESULT($i)
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test "BLAAI$RTP_JTHREADINCLUDEDIR" = "BLAAI" ; then
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_MSG_WARN(Unable to locate the JThread include files. Please specify the include path with --with-jthread-includes if they exist on your system. JThread support has been disabled)
|
||||
else
|
||||
AC_MSG_CHECKING(JThread version)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include "$RTP_JTHREADINCLUDEDIR/jthread.h"
|
||||
class MyThread : public JThread
|
||||
{
|
||||
public:
|
||||
void *Thread() { JThread::ThreadStarted(); return 0; }
|
||||
};],[
|
||||
RTP_JTHREADINCLUDES="-I $RTP_JTHREADINCLUDEDIR"
|
||||
RTP_SUPPORT_THREAD="#define RTP_SUPPORT_THREAD"
|
||||
RTP_LINKLIBS="$RTP_LINKLIBS -ljthread -lpthread"
|
||||
AC_MSG_RESULT(>= 1.1.0) ],[
|
||||
AC_MSG_RESULT(< 1.1.0)
|
||||
AC_MSG_WARN(You need at least JThread version 1.1.0. Support for JThread has been disabled)])
|
||||
fi
|
||||
])
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if sys/filio.h exists (used on solaris)
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_CHECK_HEADER(sys/filio.h,[RTP_FILIO="#define RTP_HAVE_SYS_FILIO"])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if sys/sockio.h exists (used on solaris)
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_CHECK_HEADER(sys/sockio.h,[RTP_SOCKIO="#define RTP_HAVE_SYS_SOCKIO"])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if it's a big endian or little endian system
|
||||
dnl Note that we must be careful when a cross-compiler is being used...
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
if test "$cross_compiling" = yes ; then
|
||||
cat << EOF
|
||||
|
||||
ASSUMING TARGET IS BIG ENDIAN:
|
||||
|
||||
The script detected a cross-compiler on your system. This can mean that
|
||||
there really is a cross-compiler installed, or that for some other reason,
|
||||
a simple program could not be run. You should check the config.log file
|
||||
to verify this.
|
||||
Since we are assuming a cross-compiler, we won't be able to actually test
|
||||
any program. More important, we cannot test if the system is big or little
|
||||
endian.
|
||||
For now, big endian is assumed. If this assumption should be wrong, you will
|
||||
have to comment the appropriate line in 'rtpconfig_unix.h'
|
||||
|
||||
EOF
|
||||
RTP_ENDIAN="#define RTP_BIG_ENDIAN // comment this if the target is a little endian system"
|
||||
else
|
||||
AC_C_BIGENDIAN
|
||||
if test "$ac_cv_c_bigendian" = yes; then
|
||||
RTP_ENDIAN="#define RTP_BIG_ENDIAN"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if compiler supports -Werror -Wall
|
||||
dnl ---------------------------------------------------------------------------
|
||||
oldcxxflags="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS -Werror -Wall"
|
||||
AC_MSG_CHECKING(if compiler supports -Werror -Wall)
|
||||
AC_TRY_COMPILE([
|
||||
#include <stdio.h>],[
|
||||
printf("Hello world\n");],
|
||||
AC_MSG_RESULT(yes),[
|
||||
AC_MSG_RESULT(no)
|
||||
CXXFLAGS="$oldcxxflags"])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check what the last argument for getsockname is
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(last argument of getsockname)
|
||||
AC_TRY_COMPILE([#include <sys/types.h>
|
||||
#include <sys/socket.h>],
|
||||
[int param;
|
||||
int sock = 0;
|
||||
struct sockaddr addr;
|
||||
getsockname(sock,&addr,¶m);],
|
||||
AC_MSG_RESULT(int),
|
||||
[
|
||||
AC_MSG_RESULT(unsigned int)
|
||||
RTP_SOCKLENTYPE_UINT="#define RTP_SOCKLENTYPE_UINT"
|
||||
])
|
||||
|
||||
CXXFLAGS="$oldcxxflags"
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if multicast options are known
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(if necessary options for IPv4 multicasting are available)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>],[
|
||||
int testval;
|
||||
struct ip_mreq mreq,mreq2;
|
||||
mreq = mreq2; // avoid 'unused variable'
|
||||
testval = IP_MULTICAST_TTL;
|
||||
testval = IP_ADD_MEMBERSHIP;
|
||||
testval = IP_DROP_MEMBERSHIP;],[
|
||||
AC_MSG_RESULT(yes)
|
||||
RTP_SUPPORT_IPV4MULTICAST="#define RTP_SUPPORT_IPV4MULTICAST"],
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if sockaddr has a length field (sa_len)
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(if struct sockaddr has sa_len member)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>],[
|
||||
struct sockaddr sa;
|
||||
sa.sa_len = 0;],[
|
||||
AC_MSG_RESULT(yes)
|
||||
RTP_HAVE_SOCKADDR_LEN="#define RTP_HAVE_SOCKADDR_LEN"],
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if compiler needs -LANG:std (needed on Irix)
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(if compiler can compile programs with STL)
|
||||
AC_TRY_COMPILE([
|
||||
#include <iostream>],[
|
||||
std::cout << "Bla" << std::endl; ],
|
||||
AC_MSG_RESULT(yes),
|
||||
[AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(if compiler can compile STL programs with option -LANG:std)
|
||||
CXXFLAGS="$CXXFLAGS -LANG:std"
|
||||
AC_TRY_COMPILE([
|
||||
#include <iostream>],[
|
||||
std::cout << "Bla" << std::endl; ],
|
||||
AC_MSG_RESULT(yes),[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR(Unable to compile a trivial STL program)]
|
||||
)
|
||||
])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check for uint32_t etc
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(if types like uint32_t exist)
|
||||
AC_TRY_COMPILE([
|
||||
#include <inttypes.h>],[
|
||||
uint32_t x;
|
||||
x = 0;],
|
||||
[AC_MSG_RESULT(yes)
|
||||
echo -e "#include <inttypes.h>\n#include <sys/types.h>" >src/rtptypes_unix.h
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
echo "Generating src/rtptypes.h ..."
|
||||
if ! ( $CXX $CFLAGS -o tools/gettypes tools/gettypes.cpp >/dev/null 2>/dev/null ) ; then
|
||||
AC_MSG_ERROR(Unable to create src/rtptypes_unix.h)
|
||||
fi
|
||||
if ! ( tools/gettypes >src/rtptypes_unix.h ) ; then
|
||||
AC_MSG_ERROR(Unable to create src/rtptypes_unix.h)
|
||||
fi
|
||||
])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check random functions
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(for drand48_r and srand48_r)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include <stdlib.h>
|
||||
int main(void)
|
||||
{
|
||||
struct drand48_data drandbuffer;
|
||||
double x;
|
||||
srand48_r(12345,&drandbuffer);
|
||||
drand48_r(&drandbuffer,&x);
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
RTP_SUPPORT_GNUDRAND="#define RTP_SUPPORT_GNUDRAND"],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(for rand_r)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include <stdlib.h>
|
||||
int main(void)
|
||||
{
|
||||
unsigned int x;
|
||||
x = 12345;
|
||||
rand_r(&x);
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
[ AC_MSG_RESULT(yes)
|
||||
RTP_SUPPORT_RANDR="#define RTP_SUPPORT_RANDR"],
|
||||
[ AC_MSG_RESULT(no)])
|
||||
])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check getlogin_r functions
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(for getlogin_r)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include <unistd.h>
|
||||
int main(void)
|
||||
{
|
||||
char buf[[256]];
|
||||
getlogin_r(buf,256);
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
RTP_SUPPORT_GETLOGINR="#define RTP_SUPPORT_GETLOGINR"],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check IPv6 support
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_ARG_ENABLE(IPv6,[ --disable-IPv6 Disable support for IPv6],[
|
||||
if test "$enableval" = yes ; then
|
||||
ipv6support="yes"
|
||||
else
|
||||
ipv6support="no"
|
||||
fi],[
|
||||
ipv6support="yes"
|
||||
])
|
||||
|
||||
if test "$ipv6support" = "yes" ; then
|
||||
|
||||
if test "$cross_compiling" = yes ; then
|
||||
cat << EOF
|
||||
|
||||
ABOUT IPv6 SUPPORT:
|
||||
|
||||
Can't check if IPv6 support is possible when cross-compiling. For now, lets
|
||||
assume that you want IPv6 support enabled. To disable it, comment the two
|
||||
appropriate lines in src/rtpconfig_unix.h before running make.
|
||||
|
||||
EOF
|
||||
else
|
||||
|
||||
AC_MSG_CHECKING(IPv6 support)
|
||||
AC_RUN_IFELSE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
int main(void)
|
||||
{
|
||||
int s;
|
||||
|
||||
s = socket(PF_INET6,SOCK_DGRAM,0);
|
||||
if (s < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
[AC_MSG_RESULT(enabled)
|
||||
RTP_SUPPORT_IPV6="#define RTP_SUPPORT_IPV6"
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if multicast options are known
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(if necessary options for IPv6 multicasting are available)
|
||||
AC_COMPILE_IFELSE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int testval;
|
||||
struct ipv6_mreq mreq,mreq2;
|
||||
mreq = mreq2; // avoid 'unused variable'
|
||||
testval = IPV6_MULTICAST_HOPS;
|
||||
testval = IPV6_JOIN_GROUP;
|
||||
testval = IPV6_LEAVE_GROUP;
|
||||
return 0;
|
||||
}
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
RTP_SUPPORT_IPV6MULTICAST="#define RTP_SUPPORT_IPV6MULTICAST"],
|
||||
AC_MSG_RESULT(no))],
|
||||
[
|
||||
AC_MSG_RESULT(disabled)
|
||||
])
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Check if ifaddrs.h exists so we can use getifaddrs
|
||||
dnl ---------------------------------------------------------------------------
|
||||
|
||||
AC_CHECK_HEADER(ifaddrs.h,[RTP_SUPPORT_IFADDRS="#define RTP_SUPPORT_IFADDRS"])
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
||||
dnl Finish up...
|
||||
dnl ---------------------------------------------------------------------------
|
||||
AM_CONDITIONAL(IS64BITLINUX, [test `uname -m` = x86_64])
|
||||
|
||||
AC_SUBST(RTP_FILIO)
|
||||
AC_SUBST(RTP_SOCKIO)
|
||||
AC_SUBST(RTP_ENDIAN)
|
||||
AC_SUBST(RTP_SOCKLENTYPE_UINT)
|
||||
AC_SUBST(RTP_JTHREADINCLUDES)
|
||||
AC_SUBST(RTP_HAVE_SOCKADDR_LEN)
|
||||
AC_SUBST(RTP_SUPPORT_IPV4MULTICAST)
|
||||
AC_SUBST(RTP_SUPPORT_THREAD)
|
||||
AC_SUBST(RTP_SUPPORT_SDESPRIV)
|
||||
AC_SUBST(RTP_SUPPORT_INLINETEMPLATEPARAM)
|
||||
AC_SUBST(RTP_SUPPORT_PROBATION)
|
||||
AC_SUBST(RTP_SUPPORT_GNUDRAND)
|
||||
AC_SUBST(RTP_SUPPORT_RANDR)
|
||||
AC_SUBST(RTP_SUPPORT_GETLOGINR)
|
||||
AC_SUBST(RTP_SUPPORT_IPV6)
|
||||
AC_SUBST(RTP_SUPPORT_IPV6MULTICAST)
|
||||
AC_SUBST(RTP_SUPPORT_IFADDRS)
|
||||
AC_SUBST(RTP_LINKLIBS)
|
||||
AC_OUTPUT(Makefile \
|
||||
src/Makefile \
|
||||
src/rtpconfig_unix.h \
|
||||
doc/Makefile \
|
||||
tools/Makefile \
|
||||
examples/Makefile \
|
||||
pkgconfig/Makefile \
|
||||
pkgconfig/jrtplib.pc \
|
||||
pkgconfig/jrtplib-uninstalled.pc \
|
||||
)
|
||||
|
||||
|
@ -1,530 +0,0 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2005-07-09.11
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> $depfile
|
||||
echo >> $depfile
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> $depfile
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
||||
tmpdepfile="$stripped.u"
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test -f "$tmpdepfile"; then :
|
||||
else
|
||||
stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
||||
tmpdepfile="$stripped.u"
|
||||
fi
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile"; then
|
||||
outname="$stripped.o"
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mecanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
"$@" || exit $?
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
@ -1,10 +0,0 @@
|
||||
EXTRA_DIST = jrtplib.tex manual.tex
|
||||
|
||||
doc: jrtplib.pdf
|
||||
|
||||
jrtplib.pdf: jrtplib.tex
|
||||
pdflatex jrtplib.tex
|
||||
pdflatex jrtplib.tex
|
||||
|
||||
clean:
|
||||
rm -f jrtplib.{toc,aux,log,pdf}
|
@ -1,335 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = doc
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS64BITLINUX_FALSE = @IS64BITLINUX_FALSE@
|
||||
IS64BITLINUX_TRUE = @IS64BITLINUX_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
RTP_ENDIAN = @RTP_ENDIAN@
|
||||
RTP_FILIO = @RTP_FILIO@
|
||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||
RTP_JTHREADINCLUDES = @RTP_JTHREADINCLUDES@
|
||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||
RTP_SOCKIO = @RTP_SOCKIO@
|
||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||
RTP_SUPPORT_IPV6 = @RTP_SUPPORT_IPV6@
|
||||
RTP_SUPPORT_IPV6MULTICAST = @RTP_SUPPORT_IPV6MULTICAST@
|
||||
RTP_SUPPORT_PROBATION = @RTP_SUPPORT_PROBATION@
|
||||
RTP_SUPPORT_RANDR = @RTP_SUPPORT_RANDR@
|
||||
RTP_SUPPORT_SDESPRIV = @RTP_SUPPORT_SDESPRIV@
|
||||
RTP_SUPPORT_THREAD = @RTP_SUPPORT_THREAD@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
EXTRA_DIST = jrtplib.tex manual.tex
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
|
||||
|
||||
doc: jrtplib.pdf
|
||||
|
||||
jrtplib.pdf: jrtplib.tex
|
||||
pdflatex jrtplib.tex
|
||||
pdflatex jrtplib.tex
|
||||
|
||||
clean:
|
||||
rm -f jrtplib.{toc,aux,log,pdf}
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
File diff suppressed because it is too large
Load Diff
@ -1,114 +0,0 @@
|
||||
\documentclass[a4paper,12pt]{article}
|
||||
\usepackage{listings}
|
||||
\lstset{language=C++}
|
||||
\lstset{tabsize=4}
|
||||
\begin{document}
|
||||
\title{JThread manual (v1.1.2)}
|
||||
\author{Jori Liesenborgs\\
|
||||
{\tt jori@lumumba.uhasselt.be} }
|
||||
\date{September 14, 2005}
|
||||
\maketitle
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
A lot of projects on which I'm working use threads. To be able to
|
||||
use the same code on both unix and MS-Windows platforms, I decided
|
||||
to write some simple wrapper classes for the existing thread functions
|
||||
on those platforms.
|
||||
|
||||
The JThread package is very simple: currently, it only contains two
|
||||
classes, namely {\tt JThread} and {\tt JMutex}. As their names
|
||||
suggest, {\tt JThread} represents a thread and {\tt JMutex} a mutex.
|
||||
The thread class only contains very basic functions, for example to
|
||||
start or kill a thread.
|
||||
|
||||
\section{Copyright \& disclaimer}
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
\section{Usage}
|
||||
|
||||
Here follows a description of the {\tt JThread} and {\tt JMutex} classes.
|
||||
Note that functions with return type {\tt int} always return a value of zero
|
||||
or more on success and a negative value in case something went wrong.
|
||||
|
||||
\subsection{{\tt JMutex}}
|
||||
|
||||
The class definition of {\tt JMutex} is shown below. Before you can use an
|
||||
instance of this type, you must first call the {\tt Init} function. You can
|
||||
check if the mutex was already initialized by checking the return value
|
||||
of {\tt IsInitialized}. After the initialization, the mutex can be locked
|
||||
and unlocked by calling the functions {\tt Lock} and {\tt Unlock} respectively.
|
||||
|
||||
\begin{lstlisting}[frame=tb]{}
|
||||
class JMutex
|
||||
{
|
||||
public:
|
||||
JMutex();
|
||||
~JMutex();
|
||||
int Init();
|
||||
int Lock();
|
||||
int Unlock();
|
||||
bool IsInitialized();
|
||||
};
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{{\tt JThread}}
|
||||
|
||||
To create your own thread, you have to derive a class from {\tt JThread},
|
||||
which is depicted below. In your derived class, you have to implement
|
||||
a member function {\tt Thread}, which will be executed in the new thread.
|
||||
Your own {\tt Thread} implementation should call {\tt ThreadStarted}
|
||||
immediately.
|
||||
|
||||
To start your thread, you simply have to call the {\tt Start} function.
|
||||
This function finishes when your own {\tt Thread} function has called
|
||||
{\tt ThreadStarted}. This way, when the {\tt Start} function
|
||||
finishes, you can be really sure that your own {\tt Thread} implementation
|
||||
is really running.
|
||||
|
||||
You can check if the thread is still running by calling {\tt IsRunning}.
|
||||
If the thread has finished, you can check its return value by calling
|
||||
{\tt GetReturnValue}. Finally, in case your thread gets stuck, you can
|
||||
end it by using the {\tt Kill} function.
|
||||
|
||||
You should be careful with this {\tt Kill} function: if you call it when
|
||||
the thread is working with a mutex (for example an internal mutex), this
|
||||
mutex can be left in a locked state, which in turn can cause another thread
|
||||
to block. You should only use the {\tt Kill} function when you're absolutely
|
||||
sure that the thread is stuck in some loop and cannot be ended otherwise.
|
||||
|
||||
\begin{lstlisting}[frame=tb]{}
|
||||
class JThread
|
||||
{
|
||||
public:
|
||||
JThread();
|
||||
virtual ~JThread();
|
||||
int Start();
|
||||
int Kill();
|
||||
virtual void *Thread() = 0;
|
||||
bool IsRunning();
|
||||
void *GetReturnValue();
|
||||
protected:
|
||||
void ThreadStarted();
|
||||
};
|
||||
\end{lstlisting}
|
||||
|
||||
\end{document}
|
||||
|
@ -1,469 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# examples/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/jrtplib
|
||||
pkglibdir = $(libdir)/jrtplib
|
||||
pkgincludedir = $(includedir)/jrtplib
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
noinst_PROGRAMS = example1$(EXEEXT) example2$(EXEEXT) \
|
||||
example3$(EXEEXT) example4$(EXEEXT)
|
||||
subdir = examples
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
am_example1_OBJECTS = example1.$(OBJEXT)
|
||||
example1_OBJECTS = $(am_example1_OBJECTS)
|
||||
example1_LDADD = $(LDADD)
|
||||
example1_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example2_OBJECTS = example2.$(OBJEXT)
|
||||
example2_OBJECTS = $(am_example2_OBJECTS)
|
||||
example2_LDADD = $(LDADD)
|
||||
example2_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example3_OBJECTS = example3.$(OBJEXT)
|
||||
example3_OBJECTS = $(am_example3_OBJECTS)
|
||||
example3_LDADD = $(LDADD)
|
||||
example3_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example4_OBJECTS = example4.$(OBJEXT)
|
||||
example4_OBJECTS = $(am_example4_OBJECTS)
|
||||
example4_LDADD = $(LDADD)
|
||||
example4_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
|
||||
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(example1_SOURCES) $(example2_SOURCES) $(example3_SOURCES) \
|
||||
$(example4_SOURCES)
|
||||
DIST_SOURCES = $(example1_SOURCES) $(example2_SOURCES) \
|
||||
$(example3_SOURCES) $(example4_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run tar
|
||||
AR = ar
|
||||
AUTOCONF = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"jrtplib\" -DVERSION=\"3.5.2\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1
|
||||
DEPDIR = .deps
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = grep -E
|
||||
EXEEXT =
|
||||
F77 =
|
||||
FFLAGS =
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
IS64BITLINUX_FALSE = #
|
||||
IS64BITLINUX_TRUE =
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAKEINFO = ${SHELL} /usr/src/freeswitch.trunk/libs/jrtplib/missing --run makeinfo
|
||||
OBJEXT = o
|
||||
PACKAGE = jrtplib
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
RANLIB = ranlib
|
||||
RTP_ENDIAN = // Little endian system
|
||||
RTP_FILIO = // Don't have <sys/filio.h>
|
||||
RTP_HAVE_SOCKADDR_LEN = // No sa_len member in struct sockaddr
|
||||
RTP_JTHREADINCLUDES =
|
||||
RTP_LINKLIBS =
|
||||
RTP_SOCKIO = // Don't have <sys/sockio.h>
|
||||
RTP_SOCKLENTYPE_UINT = #define RTP_SOCKLENTYPE_UINT
|
||||
RTP_SUPPORT_GETLOGINR = #define RTP_SUPPORT_GETLOGINR
|
||||
RTP_SUPPORT_GNUDRAND = #define RTP_SUPPORT_GNUDRAND
|
||||
RTP_SUPPORT_IFADDRS = #define RTP_SUPPORT_IFADDRS
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM =
|
||||
RTP_SUPPORT_IPV4MULTICAST = #define RTP_SUPPORT_IPV4MULTICAST
|
||||
RTP_SUPPORT_IPV6 = // No IPv6 support
|
||||
RTP_SUPPORT_IPV6MULTICAST = // No IPv6 multicasting support
|
||||
RTP_SUPPORT_PROBATION = #define RTP_SUPPORT_PROBATION
|
||||
RTP_SUPPORT_RANDR = // Not using rand_r
|
||||
RTP_SUPPORT_SDESPRIV = #define RTP_SUPPORT_SDESPRIV
|
||||
RTP_SUPPORT_THREAD = // No support for jthread
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
VERSION = 3.5.2
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 =
|
||||
ac_ct_RANLIB = ranlib
|
||||
ac_ct_STRIP = strip
|
||||
am__fastdepCC_FALSE = #
|
||||
am__fastdepCC_TRUE =
|
||||
am__fastdepCXX_FALSE = #
|
||||
am__fastdepCXX_TRUE =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${prefix}/share
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${prefix}/info
|
||||
install_sh = /usr/src/freeswitch.trunk/libs/jrtplib/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${prefix}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
prefix = /usr/local/freeswitch
|
||||
program_transform_name = s,x,x,
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
example1_SOURCES = example1.cpp
|
||||
example2_SOURCES = example2.cpp
|
||||
example3_SOURCES = example3.cpp
|
||||
example4_SOURCES = example4.cpp
|
||||
INCLUDES = -I ../src/
|
||||
LDADD = ../src/.libs/libjrtp.a
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu examples/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
clean-noinstPROGRAMS:
|
||||
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f $$p $$f"; \
|
||||
rm -f $$p $$f ; \
|
||||
done
|
||||
example1$(EXEEXT): $(example1_OBJECTS) $(example1_DEPENDENCIES)
|
||||
@rm -f example1$(EXEEXT)
|
||||
$(CXXLINK) $(example1_LDFLAGS) $(example1_OBJECTS) $(example1_LDADD) $(LIBS)
|
||||
example2$(EXEEXT): $(example2_OBJECTS) $(example2_DEPENDENCIES)
|
||||
@rm -f example2$(EXEEXT)
|
||||
$(CXXLINK) $(example2_LDFLAGS) $(example2_OBJECTS) $(example2_LDADD) $(LIBS)
|
||||
example3$(EXEEXT): $(example3_OBJECTS) $(example3_DEPENDENCIES)
|
||||
@rm -f example3$(EXEEXT)
|
||||
$(CXXLINK) $(example3_LDFLAGS) $(example3_OBJECTS) $(example3_LDADD) $(LIBS)
|
||||
example4$(EXEEXT): $(example4_OBJECTS) $(example4_DEPENDENCIES)
|
||||
@rm -f example4$(EXEEXT)
|
||||
$(CXXLINK) $(example4_LDFLAGS) $(example4_OBJECTS) $(example4_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
include ./$(DEPDIR)/example1.Po
|
||||
include ./$(DEPDIR)/example2.Po
|
||||
include ./$(DEPDIR)/example3.Po
|
||||
include ./$(DEPDIR)/example4.Po
|
||||
|
||||
.cpp.o:
|
||||
if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cpp.obj:
|
||||
if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.cpp.lo:
|
||||
if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
# source='$<' object='$@' libtool=yes \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(LTCXXCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool clean-noinstPROGRAMS ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
@ -1,10 +0,0 @@
|
||||
noinst_PROGRAMS = example1 example2 example3 example4
|
||||
|
||||
example1_SOURCES = example1.cpp
|
||||
example2_SOURCES = example2.cpp
|
||||
example3_SOURCES = example3.cpp
|
||||
example4_SOURCES = example4.cpp
|
||||
|
||||
INCLUDES = @RTP_JTHREADINCLUDES@ -I ../src/
|
||||
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
||||
|
@ -1,469 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
noinst_PROGRAMS = example1$(EXEEXT) example2$(EXEEXT) \
|
||||
example3$(EXEEXT) example4$(EXEEXT)
|
||||
subdir = examples
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
am_example1_OBJECTS = example1.$(OBJEXT)
|
||||
example1_OBJECTS = $(am_example1_OBJECTS)
|
||||
example1_LDADD = $(LDADD)
|
||||
example1_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example2_OBJECTS = example2.$(OBJEXT)
|
||||
example2_OBJECTS = $(am_example2_OBJECTS)
|
||||
example2_LDADD = $(LDADD)
|
||||
example2_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example3_OBJECTS = example3.$(OBJEXT)
|
||||
example3_OBJECTS = $(am_example3_OBJECTS)
|
||||
example3_LDADD = $(LDADD)
|
||||
example3_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
am_example4_OBJECTS = example4.$(OBJEXT)
|
||||
example4_OBJECTS = $(am_example4_OBJECTS)
|
||||
example4_LDADD = $(LDADD)
|
||||
example4_DEPENDENCIES = ../src/.libs/libjrtp.a
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
|
||||
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(example1_SOURCES) $(example2_SOURCES) $(example3_SOURCES) \
|
||||
$(example4_SOURCES)
|
||||
DIST_SOURCES = $(example1_SOURCES) $(example2_SOURCES) \
|
||||
$(example3_SOURCES) $(example4_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS64BITLINUX_FALSE = @IS64BITLINUX_FALSE@
|
||||
IS64BITLINUX_TRUE = @IS64BITLINUX_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
RTP_ENDIAN = @RTP_ENDIAN@
|
||||
RTP_FILIO = @RTP_FILIO@
|
||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||
RTP_JTHREADINCLUDES = @RTP_JTHREADINCLUDES@
|
||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||
RTP_SOCKIO = @RTP_SOCKIO@
|
||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||
RTP_SUPPORT_IPV6 = @RTP_SUPPORT_IPV6@
|
||||
RTP_SUPPORT_IPV6MULTICAST = @RTP_SUPPORT_IPV6MULTICAST@
|
||||
RTP_SUPPORT_PROBATION = @RTP_SUPPORT_PROBATION@
|
||||
RTP_SUPPORT_RANDR = @RTP_SUPPORT_RANDR@
|
||||
RTP_SUPPORT_SDESPRIV = @RTP_SUPPORT_SDESPRIV@
|
||||
RTP_SUPPORT_THREAD = @RTP_SUPPORT_THREAD@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
example1_SOURCES = example1.cpp
|
||||
example2_SOURCES = example2.cpp
|
||||
example3_SOURCES = example3.cpp
|
||||
example4_SOURCES = example4.cpp
|
||||
INCLUDES = @RTP_JTHREADINCLUDES@ -I ../src/
|
||||
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu examples/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
clean-noinstPROGRAMS:
|
||||
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f $$p $$f"; \
|
||||
rm -f $$p $$f ; \
|
||||
done
|
||||
example1$(EXEEXT): $(example1_OBJECTS) $(example1_DEPENDENCIES)
|
||||
@rm -f example1$(EXEEXT)
|
||||
$(CXXLINK) $(example1_LDFLAGS) $(example1_OBJECTS) $(example1_LDADD) $(LIBS)
|
||||
example2$(EXEEXT): $(example2_OBJECTS) $(example2_DEPENDENCIES)
|
||||
@rm -f example2$(EXEEXT)
|
||||
$(CXXLINK) $(example2_LDFLAGS) $(example2_OBJECTS) $(example2_LDADD) $(LIBS)
|
||||
example3$(EXEEXT): $(example3_OBJECTS) $(example3_DEPENDENCIES)
|
||||
@rm -f example3$(EXEEXT)
|
||||
$(CXXLINK) $(example3_LDFLAGS) $(example3_OBJECTS) $(example3_LDADD) $(LIBS)
|
||||
example4$(EXEEXT): $(example4_OBJECTS) $(example4_DEPENDENCIES)
|
||||
@rm -f example4$(EXEEXT)
|
||||
$(CXXLINK) $(example4_LDFLAGS) $(example4_OBJECTS) $(example4_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example3.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example4.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.cpp.lo:
|
||||
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool clean-noinstPROGRAMS ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
@ -1,149 +0,0 @@
|
||||
/*
|
||||
Here's a small IPv4 example: it asks for a portbase and a destination and
|
||||
starts sending packets to that destination.
|
||||
*/
|
||||
|
||||
#include "rtpsession.h"
|
||||
#include "rtppacket.h"
|
||||
#include "rtpudpv4transmitter.h"
|
||||
#include "rtpipv4address.h"
|
||||
#include "rtpsessionparams.h"
|
||||
#include "rtperrors.h"
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
#endif // WIN32
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
//
|
||||
// This function checks if there was a RTP error. If so, it displays an error
|
||||
// message and exists.
|
||||
//
|
||||
|
||||
void checkerror(int rtperr)
|
||||
{
|
||||
if (rtperr < 0)
|
||||
{
|
||||
std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// The main routine
|
||||
//
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef WIN32
|
||||
WSADATA dat;
|
||||
WSAStartup(MAKEWORD(2,2),&dat);
|
||||
#endif // WIN32
|
||||
|
||||
RTPSession sess;
|
||||
uint16_t portbase,destport;
|
||||
uint32_t destip;
|
||||
std::string ipstr;
|
||||
int status,i,num;
|
||||
|
||||
// First, we'll ask for the necessary information
|
||||
|
||||
std::cout << "Enter local portbase:" << std::endl;
|
||||
std::cin >> portbase;
|
||||
std::cout << std::endl;
|
||||
|
||||
std::cout << "Enter the destination IP address" << std::endl;
|
||||
std::cin >> ipstr;
|
||||
destip = inet_addr(ipstr.c_str());
|
||||
if (destip == INADDR_NONE)
|
||||
{
|
||||
std::cerr << "Bad IP address specified" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The inet_addr function returns a value in network byte order, but
|
||||
// we need the IP address in host byte order, so we use a call to
|
||||
// ntohl
|
||||
destip = ntohl(destip);
|
||||
|
||||
std::cout << "Enter the destination port" << std::endl;
|
||||
std::cin >> destport;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << "Number of packets you wish to be sent:" << std::endl;
|
||||
std::cin >> num;
|
||||
|
||||
// Now, we'll create a RTP session, set the destination, send some
|
||||
// packets and poll for incoming data.
|
||||
|
||||
RTPUDPv4TransmissionParams transparams;
|
||||
RTPSessionParams sessparams;
|
||||
|
||||
// IMPORTANT: The local timestamp unit MUST be set, otherwise
|
||||
// RTCP Sender Report info will be calculated wrong
|
||||
// In this case, we'll be sending 10 samples each second, so we'll
|
||||
// put the timestamp unit to (1.0/10.0)
|
||||
sessparams.SetOwnTimestampUnit(1.0/10.0);
|
||||
|
||||
sessparams.SetAcceptOwnPackets(true);
|
||||
transparams.SetPortbase(portbase);
|
||||
status = sess.Create(sessparams,&transparams);
|
||||
checkerror(status);
|
||||
|
||||
RTPIPv4Address addr(destip,destport);
|
||||
|
||||
status = sess.AddDestination(addr);
|
||||
checkerror(status);
|
||||
|
||||
for (i = 1 ; i <= num ; i++)
|
||||
{
|
||||
printf("\nSending packet %d/%d\n",i,num);
|
||||
|
||||
// send the packet
|
||||
status = sess.SendPacket((void *)"1234567890",10,0,false,10);
|
||||
checkerror(status);
|
||||
|
||||
sess.BeginDataAccess();
|
||||
|
||||
// check incoming packets
|
||||
if (sess.GotoFirstSourceWithData())
|
||||
{
|
||||
do
|
||||
{
|
||||
RTPPacket *pack;
|
||||
|
||||
while ((pack = sess.GetNextPacket()) != NULL)
|
||||
{
|
||||
// You can examine the data here
|
||||
printf("Got packet !\n");
|
||||
|
||||
// we don't longer need the packet, so
|
||||
// we'll delete it
|
||||
delete pack;
|
||||
}
|
||||
} while (sess.GotoNextSourceWithData());
|
||||
}
|
||||
|
||||
sess.EndDataAccess();
|
||||
|
||||
#ifndef RTP_SUPPORT_THREAD
|
||||
status = sess.Poll();
|
||||
checkerror(status);
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
RTPTime::Wait(RTPTime(1,0));
|
||||
}
|
||||
|
||||
sess.BYEDestroy(RTPTime(10,0),0,0);
|
||||
|
||||
#ifdef WIN32
|
||||
WSACleanup();
|
||||
#endif // WIN32
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,98 +0,0 @@
|
||||
#include "rtpsession.h"
|
||||
#include "rtpsessionparams.h"
|
||||
#include "rtpudpv4transmitter.h"
|
||||
#include "rtpipv4address.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include "rtppacket.h"
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef WIN32
|
||||
WSADATA dat;
|
||||
WSAStartup(MAKEWORD(2,2),&dat);
|
||||
#endif // WIN32
|
||||
|
||||
RTPSession session;
|
||||
|
||||
RTPSessionParams sessionparams;
|
||||
sessionparams.SetOwnTimestampUnit(1.0/8000.0);
|
||||
|
||||
RTPUDPv4TransmissionParams transparams;
|
||||
transparams.SetPortbase(8000);
|
||||
|
||||
int status = session.Create(sessionparams,&transparams);
|
||||
if (status < 0)
|
||||
{
|
||||
std::cerr << RTPGetErrorString(status) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
uint8_t localip[]={127,0,0,1};
|
||||
RTPIPv4Address addr(localip,9000);
|
||||
|
||||
status = session.AddDestination(addr);
|
||||
if (status < 0)
|
||||
{
|
||||
std::cerr << RTPGetErrorString(status) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
session.SetDefaultPayloadType(96);
|
||||
session.SetDefaultMark(false);
|
||||
session.SetDefaultTimestampIncrement(160);
|
||||
|
||||
uint8_t silencebuffer[160];
|
||||
for (int i = 0 ; i < 160 ; i++)
|
||||
silencebuffer[i] = 128;
|
||||
|
||||
RTPTime delay(0.020);
|
||||
RTPTime starttime = RTPTime::CurrentTime();
|
||||
|
||||
bool done = false;
|
||||
while (!done)
|
||||
{
|
||||
status = session.SendPacket(silencebuffer,160);
|
||||
if (status < 0)
|
||||
{
|
||||
std::cerr << RTPGetErrorString(status) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
session.BeginDataAccess();
|
||||
if (session.GotoFirstSource())
|
||||
{
|
||||
do
|
||||
{
|
||||
RTPPacket *packet = session.GetNextPacket();
|
||||
if (packet)
|
||||
{
|
||||
std::cout << "Got packet with "
|
||||
<< "extended sequence number "
|
||||
<< packet->GetExtendedSequenceNumber()
|
||||
<< " from SSRC " << packet->GetSSRC()
|
||||
<< std::endl;
|
||||
delete packet;
|
||||
}
|
||||
} while (session.GotoNextSource());
|
||||
}
|
||||
session.EndDataAccess();
|
||||
|
||||
RTPTime::Wait(delay);
|
||||
|
||||
RTPTime t = RTPTime::CurrentTime();
|
||||
t -= starttime;
|
||||
if (t > RTPTime(60.0))
|
||||
done = true;
|
||||
}
|
||||
|
||||
delay = RTPTime(10.0);
|
||||
session.BYEDestroy(delay,"Time's up",9);
|
||||
|
||||
#ifdef WIN32
|
||||
WSACleanup();
|
||||
#endif // WIN32
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,224 +0,0 @@
|
||||
/*
|
||||
This IPv4 example listens for incoming packets and automatically adds destinations
|
||||
for new sources.
|
||||
*/
|
||||
|
||||
#include "rtpsession.h"
|
||||
#include "rtppacket.h"
|
||||
#include "rtpudpv4transmitter.h"
|
||||
#include "rtpipv4address.h"
|
||||
#include "rtpsessionparams.h"
|
||||
#include "rtperrors.h"
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
#endif // WIN32
|
||||
#include "rtpsourcedata.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
//
|
||||
// This function checks if there was a RTP error. If so, it displays an error
|
||||
// message and exists.
|
||||
//
|
||||
|
||||
void checkerror(int rtperr)
|
||||
{
|
||||
if (rtperr < 0)
|
||||
{
|
||||
std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// The new class routine
|
||||
//
|
||||
|
||||
class MyRTPSession : public RTPSession
|
||||
{
|
||||
protected:
|
||||
void OnNewSource(RTPSourceData *dat)
|
||||
{
|
||||
if (dat->IsOwnSSRC())
|
||||
return;
|
||||
|
||||
uint32_t ip;
|
||||
uint16_t port;
|
||||
|
||||
if (dat->GetRTPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort();
|
||||
}
|
||||
else if (dat->GetRTCPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort()-1;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
RTPIPv4Address dest(ip,port);
|
||||
AddDestination(dest);
|
||||
|
||||
struct in_addr inaddr;
|
||||
inaddr.s_addr = htonl(ip);
|
||||
std::cout << "Adding destination " << std::string(inet_ntoa(inaddr)) << ":" << port << std::endl;
|
||||
}
|
||||
|
||||
void OnBYEPacket(RTPSourceData *dat)
|
||||
{
|
||||
if (dat->IsOwnSSRC())
|
||||
return;
|
||||
|
||||
uint32_t ip;
|
||||
uint16_t port;
|
||||
|
||||
if (dat->GetRTPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort();
|
||||
}
|
||||
else if (dat->GetRTCPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort()-1;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
RTPIPv4Address dest(ip,port);
|
||||
DeleteDestination(dest);
|
||||
|
||||
struct in_addr inaddr;
|
||||
inaddr.s_addr = htonl(ip);
|
||||
std::cout << "Deleting destination " << std::string(inet_ntoa(inaddr)) << ":" << port << std::endl;
|
||||
}
|
||||
|
||||
void OnRemoveSource(RTPSourceData *dat)
|
||||
{
|
||||
if (dat->IsOwnSSRC())
|
||||
return;
|
||||
if (dat->ReceivedBYE())
|
||||
return;
|
||||
|
||||
uint32_t ip;
|
||||
uint16_t port;
|
||||
|
||||
if (dat->GetRTPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort();
|
||||
}
|
||||
else if (dat->GetRTCPDataAddress() != 0)
|
||||
{
|
||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||
ip = addr->GetIP();
|
||||
port = addr->GetPort()-1;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
RTPIPv4Address dest(ip,port);
|
||||
DeleteDestination(dest);
|
||||
|
||||
struct in_addr inaddr;
|
||||
inaddr.s_addr = htonl(ip);
|
||||
std::cout << "Deleting destination " << std::string(inet_ntoa(inaddr)) << ":" << port << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// The main routine
|
||||
//
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef WIN32
|
||||
WSADATA dat;
|
||||
WSAStartup(MAKEWORD(2,2),&dat);
|
||||
#endif // WIN32
|
||||
|
||||
MyRTPSession sess;
|
||||
uint16_t portbase,destport;
|
||||
uint32_t destip;
|
||||
std::string ipstr;
|
||||
int status,i,num;
|
||||
|
||||
// First, we'll ask for the necessary information
|
||||
|
||||
std::cout << "Enter local portbase:" << std::endl;
|
||||
std::cin >> portbase;
|
||||
std::cout << std::endl;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << "Number of seconds you wish to wait:" << std::endl;
|
||||
std::cin >> num;
|
||||
|
||||
// Now, we'll create a RTP session, set the destination
|
||||
// and poll for incoming data.
|
||||
|
||||
RTPUDPv4TransmissionParams transparams;
|
||||
RTPSessionParams sessparams;
|
||||
|
||||
// IMPORTANT: The local timestamp unit MUST be set, otherwise
|
||||
// RTCP Sender Report info will be calculated wrong
|
||||
// In this case, we'll be just use 8000 samples per second.
|
||||
sessparams.SetOwnTimestampUnit(1.0/8000.0);
|
||||
|
||||
sessparams.SetAcceptOwnPackets(true);
|
||||
transparams.SetPortbase(portbase);
|
||||
status = sess.Create(sessparams,&transparams);
|
||||
checkerror(status);
|
||||
|
||||
for (i = 1 ; i <= num ; i++)
|
||||
{
|
||||
sess.BeginDataAccess();
|
||||
|
||||
// check incoming packets
|
||||
if (sess.GotoFirstSourceWithData())
|
||||
{
|
||||
do
|
||||
{
|
||||
RTPPacket *pack;
|
||||
|
||||
while ((pack = sess.GetNextPacket()) != NULL)
|
||||
{
|
||||
// You can examine the data here
|
||||
printf("Got packet !\n");
|
||||
|
||||
// we don't longer need the packet, so
|
||||
// we'll delete it
|
||||
delete pack;
|
||||
}
|
||||
} while (sess.GotoNextSourceWithData());
|
||||
}
|
||||
|
||||
sess.EndDataAccess();
|
||||
|
||||
#ifndef RTP_SUPPORT_THREAD
|
||||
status = sess.Poll();
|
||||
checkerror(status);
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
RTPTime::Wait(RTPTime(1,0));
|
||||
}
|
||||
|
||||
sess.BYEDestroy(RTPTime(10,0),0,0);
|
||||
|
||||
#ifdef WIN32
|
||||
WSACleanup();
|
||||
#endif // WIN32
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,145 +0,0 @@
|
||||
/*
|
||||
This IPv4 example uses the background thread itself to process all packets.
|
||||
You can use example one to send data to the session that's created in this
|
||||
example.
|
||||
*/
|
||||
|
||||
#include "rtpsession.h"
|
||||
#include "rtppacket.h"
|
||||
#include "rtpudpv4transmitter.h"
|
||||
#include "rtpipv4address.h"
|
||||
#include "rtpsessionparams.h"
|
||||
#include "rtperrors.h"
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
#endif // WIN32
|
||||
#include "rtpsourcedata.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#ifdef RTP_SUPPORT_THREAD
|
||||
|
||||
//
|
||||
// This function checks if there was a RTP error. If so, it displays an error
|
||||
// message and exists.
|
||||
//
|
||||
|
||||
void checkerror(int rtperr)
|
||||
{
|
||||
if (rtperr < 0)
|
||||
{
|
||||
std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// The new class routine
|
||||
//
|
||||
|
||||
class MyRTPSession : public RTPSession
|
||||
{
|
||||
protected:
|
||||
void OnPollThreadStep();
|
||||
void ProcessRTPPacket(const RTPSourceData &srcdat,const RTPPacket &rtppack);
|
||||
};
|
||||
|
||||
void MyRTPSession::OnPollThreadStep()
|
||||
{
|
||||
BeginDataAccess();
|
||||
|
||||
// check incoming packets
|
||||
if (GotoFirstSourceWithData())
|
||||
{
|
||||
do
|
||||
{
|
||||
RTPPacket *pack;
|
||||
RTPSourceData *srcdat;
|
||||
|
||||
srcdat = GetCurrentSourceInfo();
|
||||
|
||||
while ((pack = GetNextPacket()) != NULL)
|
||||
{
|
||||
ProcessRTPPacket(*srcdat,*pack);
|
||||
delete pack;
|
||||
}
|
||||
} while (GotoNextSourceWithData());
|
||||
}
|
||||
|
||||
EndDataAccess();
|
||||
}
|
||||
|
||||
void MyRTPSession::ProcessRTPPacket(const RTPSourceData &srcdat,const RTPPacket &rtppack)
|
||||
{
|
||||
// You can inspect the packet and the source's info here
|
||||
std::cout << "Got packet " << rtppack.GetExtendedSequenceNumber() << " from SSRC " << srcdat.GetSSRC() << std::endl;
|
||||
}
|
||||
|
||||
//
|
||||
// The main routine
|
||||
//
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef WIN32
|
||||
WSADATA dat;
|
||||
WSAStartup(MAKEWORD(2,2),&dat);
|
||||
#endif // WIN32
|
||||
|
||||
MyRTPSession sess;
|
||||
uint16_t portbase,destport;
|
||||
uint32_t destip;
|
||||
std::string ipstr;
|
||||
int status,i,num;
|
||||
|
||||
// First, we'll ask for the necessary information
|
||||
|
||||
std::cout << "Enter local portbase:" << std::endl;
|
||||
std::cin >> portbase;
|
||||
std::cout << std::endl;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << "Number of seconds you wish to wait:" << std::endl;
|
||||
std::cin >> num;
|
||||
|
||||
// Now, we'll create a RTP session, set the destination
|
||||
// and poll for incoming data.
|
||||
|
||||
RTPUDPv4TransmissionParams transparams;
|
||||
RTPSessionParams sessparams;
|
||||
|
||||
// IMPORTANT: The local timestamp unit MUST be set, otherwise
|
||||
// RTCP Sender Report info will be calculated wrong
|
||||
// In this case, we'll be just use 8000 samples per second.
|
||||
sessparams.SetOwnTimestampUnit(1.0/8000.0);
|
||||
|
||||
transparams.SetPortbase(portbase);
|
||||
status = sess.Create(sessparams,&transparams);
|
||||
checkerror(status);
|
||||
|
||||
// Wait a number of seconds
|
||||
RTPTime::Wait(RTPTime(num,0));
|
||||
|
||||
sess.BYEDestroy(RTPTime(10,0),0,0);
|
||||
|
||||
#ifdef WIN32
|
||||
WSACleanup();
|
||||
#endif // WIN32
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main(void)
|
||||
{
|
||||
std::cerr << "Thread support is required for this example" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
@ -1,323 +0,0 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
cpprog="${CPPROG-cp}"
|
||||
chmodprog="${CHMODPROG-chmod}"
|
||||
chownprog="${CHOWNPROG-chown}"
|
||||
chgrpprog="${CHGRPPROG-chgrp}"
|
||||
stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dstarg=
|
||||
no_target_directory=
|
||||
|
||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
-c (ignored)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-c) shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t) dstarg=$2
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-T) no_target_directory=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
*) # When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
test -n "$dir_arg$dstarg" && break
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dstarg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dstarg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dstarg=$arg
|
||||
done
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$1"; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
||||
if test -d "$dst"; then
|
||||
mkdircmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
mkdircmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dstarg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dstarg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dstarg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
pathcomp=
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
if test ! -d "$pathcomp"; then
|
||||
$mkdirprog "$pathcomp"
|
||||
# mkdir can fail with a `File exist' error in case several
|
||||
# install-sh are creating the directory concurrently. This
|
||||
# is OK.
|
||||
test -d "$pathcomp" || exit
|
||||
fi
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $mkdircmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
|
||||
else
|
||||
dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
$doit $cpprog "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| {
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
}
|
||||
}
|
||||
fi || { (exit 1); exit 1; }
|
||||
done
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit 0
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
@ -1,13 +0,0 @@
|
||||
EXPORTS
|
||||
jrtp4c_new
|
||||
jrtp4c_destroy
|
||||
jrtp4c_get_rtp_socket
|
||||
jrtp4c_set_invald_handler
|
||||
jrtp4c_read
|
||||
jrtp4c_write
|
||||
jrtp4c_write_payload
|
||||
jrtp4c_start
|
||||
jrtp4c_get_ssrc
|
||||
jrtp4c_killread
|
||||
jrtp4c_set_private
|
||||
jrtp4c_get_private
|
@ -1,404 +0,0 @@
|
||||
# Microsoft Developer Studio Project File - Name="jrtplib" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=jrtplib - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "jrtplib.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "jrtplib.mak" CFG="jrtplib - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "jrtplib - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "jrtplib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "jrtplib - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\jthread-1.2.0\src" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x813 /d "NDEBUG"
|
||||
# ADD RSC /l 0x813 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "jrtplib - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\jthread-1.2.0\src" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x813 /d "_DEBUG"
|
||||
# ADD RSC /l 0x813 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "jrtplib - Win32 Release"
|
||||
# Name "jrtplib - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpapppacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpbyepacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpcompoundpacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpcompoundpacketbuilder.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcppacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcppacketbuilder.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcprrpacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpscheduler.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsdesinfo.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsdespacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsrpacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpcollisionlist.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpdebug.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtperrors.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpinternalsourcedata.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv4address.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv6address.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtplibraryversion.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppacket.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppacketbuilder.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppollthread.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtprandom.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsession.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsessionparams.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsessionsources.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsourcedata.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsources.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtptimeutilities.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpudpv4transmitter.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\jrtp4c.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\win32\jmutex.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\win32\jthread.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpudpv6transmitter.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpapppacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpbyepacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpcompoundpacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpcompoundpacketbuilder.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcppacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcppacketbuilder.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcprrpacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpscheduler.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsdesinfo.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsdespacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpsrpacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtcpunknownpacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpaddress.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpcollisionlist.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpconfig.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpconfig_win.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpdebug.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpdefines.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtperrors.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpeventhandler.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtphashtable.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpinternalsourcedata.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv4address.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv4destination.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv6address.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpipv6destination.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpkeyhashtable.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtplibraryversion.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppacketbuilder.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtppollthread.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtprandom.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtprawpacket.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsession.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsessionparams.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsessionsources.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsourcedata.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpsources.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpstructs.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtptimeutilities.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtptransmitter.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtptypes.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtptypes_win.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpudpv4transmitter.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\src\rtpudpv6transmitter.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
@ -1,29 +0,0 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "jrtplib"=.\jrtplib.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
@ -1,26 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jrtplib", "jrtplib.vcproj", "{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug Dll|Win32 = Debug Dll|Win32
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release Dll|Win32 = Release Dll|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Debug Dll|Win32.ActiveCfg = Debug Dll|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Debug Dll|Win32.Build.0 = Debug Dll|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Release Dll|Win32.ActiveCfg = Release Dll|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Release Dll|Win32.Build.0 = Release Dll|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
@ -1,611 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="jrtplib"
|
||||
ProjectGUID="{D2A2E3F7-BF5F-4D92-A167-1AF302E20950}"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="4"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="./src;../jthread-1.1.2/src"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="0"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="4"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="./src;../jthread-1.1.2/src"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="0"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug Dll|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="./src;../jthread-1.1.2/src"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="0"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Ws2_32.lib "
|
||||
ModuleDefinitionFile="jrtplib.def"
|
||||
OptimizeReferences="1"
|
||||
EnableCOMDATFolding="1"
|
||||
OptimizeForWindows98="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release Dll|Win32"
|
||||
OutputDirectory="$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="./src;../jthread-1.1.2/src"
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="0"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Ws2_32.lib "
|
||||
ModuleDefinitionFile="jrtplib.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\jrtp4c.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpapppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpbyepacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcprrpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpscheduler.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdesinfo.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdespacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsrpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpunknownpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpaddress.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpcollisionlist.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpconfig.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpconfig_win.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdebug.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdefines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtperrors.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtphashtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpinternalsourcedata.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4address.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4destination.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6address.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6destination.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpkeyhashtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtplibraryversion.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppollthread.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprandom.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprawpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsession.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionparams.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionsources.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsourcedata.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsources.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpstructs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptimeutilities.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptransmitter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptypes.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptypes_win.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv4transmitter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv6transmitter.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\jrtp4c.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpapppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpbyepacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcprrpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpscheduler.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdesinfo.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdespacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsrpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpcollisionlist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdebug.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtperrors.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpinternalsourcedata.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4address.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6address.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtplibraryversion.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppollthread.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprandom.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsession.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionparams.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionsources.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsourcedata.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsources.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptimeutilities.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv4transmitter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv6transmitter.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\jrtplib.def"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -1,22 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jrtplib_wce", "jrtplib_wce.vcproj", "{93374307-119F-404E-9B09-3642C6FC96C1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
|
||||
Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
|
||||
{93374307-119F-404E-9B09-3642C6FC96C1}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
@ -1,481 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="jrtplib_wce"
|
||||
ProjectGUID="{93374307-119F-404E-9B09-3642C6FC96C1}"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Pocket PC 2003 (ARMV4)"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Pocket PC 2003 (ARMV4)"
|
||||
OutputDirectory="$(PlatformName)\Debug"
|
||||
IntermediateDirectory="$(PlatformName)\Debug"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
ExecutionBucket="7"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../jthread-1.2.0/src"
|
||||
PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);_DEBUG;DEBUG;_LIB;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE"
|
||||
MinimalRebuild="true"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG;_UNICODE;UNICODE;_WIN32_WCE;UNDER_CE"
|
||||
Culture="1033"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM"
|
||||
OutputFile="$(OutDir)/jrtplib_wce.lib"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCodeSignTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
<DeploymentTool
|
||||
ForceDirty="-1"
|
||||
RemoteDirectory=""
|
||||
RegisterOutput="0"
|
||||
AdditionalFiles=""
|
||||
/>
|
||||
<DebuggerTool
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Pocket PC 2003 (ARMV4)"
|
||||
OutputDirectory="$(PlatformName)\Release"
|
||||
IntermediateDirectory="$(PlatformName)\Release"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
ExecutionBucket="7"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories="../jthread-1.2.0/src"
|
||||
PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;$(PLATFORMDEFINES);NDEBUG;_LIB;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG;_UNICODE;UNICODE;_WIN32_WCE;UNDER_CE"
|
||||
Culture="1033"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM"
|
||||
OutputFile="$(OutDir)/jrtplib_wce.lib"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCodeSignTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
<DeploymentTool
|
||||
ForceDirty="-1"
|
||||
RemoteDirectory=""
|
||||
RegisterOutput="0"
|
||||
AdditionalFiles=""
|
||||
/>
|
||||
<DebuggerTool
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\rtcpapppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpbyepacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcprrpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpscheduler.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdesinfo.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdespacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsrpacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpcollisionlist.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdebug.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtperrors.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpinternalsourcedata.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4address.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6address.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtplibraryversion.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacketbuilder.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppollthread.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprandom.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsession.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionparams.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionsources.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsourcedata.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsources.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptimeutilities.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv4transmitter.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv6transmitter.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\rtcpapppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpbyepacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpcompoundpacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcppacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcprrpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpscheduler.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdesinfo.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsdespacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpsrpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtcpunknownpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpaddress.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpcollisionlist.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpconfig.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpconfig_win.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdebug.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpdefines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtperrors.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtphashtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpinternalsourcedata.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4address.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv4destination.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6address.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpipv6destination.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpkeyhashtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtplibraryversion.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppacketbuilder.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtppollthread.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprandom.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtprawpacket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsession.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionparams.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsessionsources.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsourcedata.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpsources.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpstructs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptimeutilities.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptransmitter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptypes.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtptypes_win.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv4transmitter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\rtpudpv6transmitter.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
File diff suppressed because it is too large
Load Diff
@ -1,360 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2005-06-08.21
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program).
|
||||
case "$1" in
|
||||
lex|yacc)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
@ -1,158 +0,0 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
|
||||
scriptversion=2005-06-29.22
|
||||
|
||||
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain.
|
||||
#
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
errstatus=0
|
||||
dirmode=
|
||||
|
||||
usage="\
|
||||
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
|
||||
|
||||
Create each directory DIR (with mode MODE, if specified), including all
|
||||
leading file name components.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>."
|
||||
|
||||
# process command line arguments
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-h | --help | --h*) # -h for help
|
||||
echo "$usage"
|
||||
exit $?
|
||||
;;
|
||||
-m) # -m PERM arg
|
||||
shift
|
||||
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
|
||||
dirmode=$1
|
||||
shift
|
||||
;;
|
||||
--version)
|
||||
echo "$0 $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
--) # stop option processing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*) # unknown option
|
||||
echo "$usage" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*) # first non-opt arg
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file
|
||||
do
|
||||
if test -d "$file"; then
|
||||
shift
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
case $# in
|
||||
0) exit 0 ;;
|
||||
esac
|
||||
|
||||
# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
|
||||
# mkdir -p a/c at the same time, both will detect that a is missing,
|
||||
# one will create a, then the other will try to create a and die with
|
||||
# a "File exists" error. This is a problem when calling mkinstalldirs
|
||||
# from a parallel make. We use --version in the probe to restrict
|
||||
# ourselves to GNU mkdir, which is thread-safe.
|
||||
case $dirmode in
|
||||
'')
|
||||
if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
||||
echo "mkdir -p -- $*"
|
||||
exec mkdir -p -- "$@"
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
test -d ./-p && rmdir ./-p
|
||||
test -d ./--version && rmdir ./--version
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
|
||||
test ! -d ./--version; then
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
else
|
||||
# Clean up after NextStep and OpenStep mkdir.
|
||||
for d in ./-m ./-p ./--version "./$dirmode";
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
for file
|
||||
do
|
||||
case $file in
|
||||
/*) pathcomp=/ ;;
|
||||
*) pathcomp= ;;
|
||||
esac
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set fnord $file
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
for d
|
||||
do
|
||||
test "x$d" = x && continue
|
||||
|
||||
pathcomp=$pathcomp$d
|
||||
case $pathcomp in
|
||||
-*) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
@ -1,129 +0,0 @@
|
||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||
# ----------------------------------
|
||||
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
|
||||
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
|
||||
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
||||
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
|
||||
fi
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
_pkg_min_version=m4_ifval([$1], [$1], [0.9.0])
|
||||
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
PKG_CONFIG=""
|
||||
fi
|
||||
|
||||
fi[]dnl
|
||||
])# PKG_PROG_PKG_CONFIG
|
||||
|
||||
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
# Check to see whether a particular set of modules exists. Similar
|
||||
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||
#
|
||||
#
|
||||
# Similar to PKG_CHECK_MODULES, make sure that the first instance of
|
||||
# this or PKG_CHECK_MODULES is called, or make sure to call
|
||||
# PKG_CHECK_EXISTS manually
|
||||
# --------------------------------------------------------------
|
||||
AC_DEFUN([PKG_CHECK_EXISTS],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
|
||||
m4_ifval([$2], [$2], [:])
|
||||
m4_ifvaln([$3], [else
|
||||
$3])dnl
|
||||
fi])
|
||||
|
||||
|
||||
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||
# ---------------------------------------------
|
||||
m4_define([_PKG_CONFIG],
|
||||
[if test -n "$PKG_CONFIG"; then
|
||||
PKG_CHECK_EXISTS([$3],
|
||||
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
|
||||
[pkg_failed=yes])
|
||||
pkg_failed=untried
|
||||
fi[]dnl
|
||||
])# _PKG_CONFIG
|
||||
|
||||
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
# [ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
#
|
||||
# Note that if there is a possibility the first call to
|
||||
# PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||
#
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
AC_DEFUN([PKG_CHECK_MODULES],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
|
||||
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
|
||||
|
||||
pkg_failed=no
|
||||
AC_MSG_CHECKING([for $1])
|
||||
|
||||
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
|
||||
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
|
||||
|
||||
if test $pkg_failed = yes; then
|
||||
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$$1[]_PKG_ERRORS" 1>&AS_MESSAGE_LOG_FD
|
||||
|
||||
ifelse([$4], , [AC_MSG_ERROR(dnl
|
||||
[Package requirements ($2) were not met.
|
||||
Consider adjusting the PKG_CONFIG_PATH environment variable if you
|
||||
installed software in a non-standard prefix.
|
||||
|
||||
Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables
|
||||
to avoid the need to call pkg-config. See the pkg-config man page for
|
||||
more details.])],
|
||||
[$4])
|
||||
elif test $pkg_failed = untried; then
|
||||
ifelse([$4], , [AC_MSG_FAILURE(dnl
|
||||
[The pkg-config script could not be found or is too old. Make sure it
|
||||
is in your PATH or set the PKG_CONFIG environment variable to the full
|
||||
path to pkg-config.
|
||||
|
||||
Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables
|
||||
to avoid the need to call pkg-config. See the pkg-config man page for
|
||||
more details.
|
||||
|
||||
To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
|
||||
[$4])
|
||||
else
|
||||
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
|
||||
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
|
||||
ifelse([$3], , :, [$3])
|
||||
fi[]dnl
|
||||
])# PKG_CHECK_MODULES
|
@ -1,17 +0,0 @@
|
||||
### all of the standard pc files we need to generate
|
||||
pcfiles = \
|
||||
jrtplib.pc
|
||||
|
||||
pcfiles_uninstalled = \
|
||||
jrtplib-uninstalled.pc
|
||||
|
||||
all-local: $(pcfiles) $(pcfiles_uninstalled)
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = $(pcfiles)
|
||||
|
||||
EXTRA_DIST = \
|
||||
jrtplib.pc.in \
|
||||
jrtplib-uninstalled.pc.in
|
||||
|
||||
CLEANFILES = $(pcfiles) $(pcfiles_uninstalled)
|
@ -1,381 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = pkgconfig
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(srcdir)/jrtplib-uninstalled.pc.in $(srcdir)/jrtplib.pc.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES = jrtplib.pc jrtplib-uninstalled.pc
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
|
||||
pkgconfigDATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(pkgconfig_DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS64BITLINUX_FALSE = @IS64BITLINUX_FALSE@
|
||||
IS64BITLINUX_TRUE = @IS64BITLINUX_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
RTP_ENDIAN = @RTP_ENDIAN@
|
||||
RTP_FILIO = @RTP_FILIO@
|
||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||
RTP_JTHREADINCLUDES = @RTP_JTHREADINCLUDES@
|
||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||
RTP_SOCKIO = @RTP_SOCKIO@
|
||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||
RTP_SUPPORT_IPV6 = @RTP_SUPPORT_IPV6@
|
||||
RTP_SUPPORT_IPV6MULTICAST = @RTP_SUPPORT_IPV6MULTICAST@
|
||||
RTP_SUPPORT_PROBATION = @RTP_SUPPORT_PROBATION@
|
||||
RTP_SUPPORT_RANDR = @RTP_SUPPORT_RANDR@
|
||||
RTP_SUPPORT_SDESPRIV = @RTP_SUPPORT_SDESPRIV@
|
||||
RTP_SUPPORT_THREAD = @RTP_SUPPORT_THREAD@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
|
||||
### all of the standard pc files we need to generate
|
||||
pcfiles = \
|
||||
jrtplib.pc
|
||||
|
||||
pcfiles_uninstalled = \
|
||||
jrtplib-uninstalled.pc
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = $(pcfiles)
|
||||
EXTRA_DIST = \
|
||||
jrtplib.pc.in \
|
||||
jrtplib-uninstalled.pc.in
|
||||
|
||||
CLEANFILES = $(pcfiles) $(pcfiles_uninstalled)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu pkgconfig/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
jrtplib.pc: $(top_builddir)/config.status $(srcdir)/jrtplib.pc.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
||||
jrtplib-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/jrtplib-uninstalled.pc.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-pkgconfigDATA: $(pkgconfig_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
|
||||
@list='$(pkgconfig_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
|
||||
$(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-pkgconfigDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgconfig_DATA)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(DATA) all-local
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-pkgconfigDATA
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
|
||||
|
||||
.PHONY: all all-am all-local check check-am clean clean-generic \
|
||||
clean-libtool distclean distclean-generic distclean-libtool \
|
||||
distdir dvi dvi-am html html-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-pkgconfigDATA install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
|
||||
uninstall-info-am uninstall-pkgconfigDATA
|
||||
|
||||
|
||||
all-local: $(pcfiles) $(pcfiles_uninstalled)
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
@ -1,12 +0,0 @@
|
||||
# the standard variables don't make sense for an uninstalled copy
|
||||
prefix=
|
||||
exec_prefix=
|
||||
libdir=${pcfiledir}/..
|
||||
includedir=${pcfiledir}/..
|
||||
|
||||
Name: Jrtplib Uninstalled
|
||||
Description: Full featured RTP library, Not Installed
|
||||
Version: @VERSION@
|
||||
Requires:
|
||||
Libs: ${libdir}/src/libjrtp.la
|
||||
Cflags: -I${includedir} -I${includedir}/src
|
@ -1,11 +0,0 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@/jrtplib3
|
||||
|
||||
Name: Jrtplib
|
||||
Description: An full featured RTP library
|
||||
Requires:
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -ljrtp
|
||||
Cflags: -I${includedir}
|
@ -1,36 +0,0 @@
|
||||
lib_LTLIBRARIES = libjrtp.la
|
||||
libjrtp_la_SOURCES = rtpdebug.cpp rtpsession.cpp rtpconfig_win.h \
|
||||
rtperrors.cpp rtpudpv4transmitter.cpp \
|
||||
rtcpsdesinfo.cpp rtppollthread.cpp rtppacket.cpp \
|
||||
rtppacketbuilder.cpp rtpsessionparams.cpp \
|
||||
rtpsources.cpp rtpinternalsourcedata.cpp \
|
||||
rtpsourcedata.cpp rtpipv4address.cpp \
|
||||
rtcpcompoundpacket.cpp jrtp4c.cpp\
|
||||
rtcpapppacket.cpp rtcpbyepacket.cpp \
|
||||
rtcprrpacket.cpp rtcpsdespacket.cpp \
|
||||
rtcpsrpacket.cpp rtplibraryversion.cpp \
|
||||
rtcppacket.cpp rtcpcompoundpacketbuilder.cpp \
|
||||
rtprandom.cpp rtcpscheduler.cpp \
|
||||
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
||||
rtpcollisionlist.cpp rtpipv6address.cpp \
|
||||
rtpudpv6transmitter.cpp rtptimeutilities.cpp
|
||||
libjrtp_la_LDFLAGS = -release 3.5.2 @RTP_LINKLIBS@
|
||||
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
||||
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
||||
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
||||
rtcpsrpacket.h rtcpunknownpacket.h rtpaddress.h rtpconfig.h \
|
||||
rtpconfig_win.h rtpdebug.h rtpdefines.h rtperrors.h rtphashtable.h \
|
||||
rtpconfig_unix.h rtpinternalsourcedata.h rtpipv4address.h \
|
||||
rtpipv4destination.h rtpkeyhashtable.h rtplibraryversion.h rtppacket.h \
|
||||
rtppacketbuilder.h rtppollthread.h rtprandom.h rtprawpacket.h \
|
||||
rtpsession.h rtpsessionparams.h rtpsourcedata.h rtpsources.h \
|
||||
rtpstructs.h rtptimeutilities.h rtptransmitter.h \
|
||||
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
||||
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
||||
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
||||
jrtp4c.h
|
||||
EXTRA_DIST = rtpconfig_unix.h.in
|
||||
libjrtpincludedir = ${includedir}/jrtplib3
|
||||
|
||||
|
||||
|
@ -1,574 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = src
|
||||
DIST_COMMON = $(libjrtpinclude_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/rtpconfig_unix.h.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES = rtpconfig_unix.h
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" \
|
||||
"$(DESTDIR)$(libjrtpincludedir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libjrtp_la_LIBADD =
|
||||
am_libjrtp_la_OBJECTS = rtpdebug.lo rtpsession.lo rtperrors.lo \
|
||||
rtpudpv4transmitter.lo rtcpsdesinfo.lo rtppollthread.lo \
|
||||
rtppacket.lo rtppacketbuilder.lo rtpsessionparams.lo \
|
||||
rtpsources.lo rtpinternalsourcedata.lo rtpsourcedata.lo \
|
||||
rtpipv4address.lo rtcpcompoundpacket.lo jrtp4c.lo \
|
||||
rtcpapppacket.lo rtcpbyepacket.lo rtcprrpacket.lo \
|
||||
rtcpsdespacket.lo rtcpsrpacket.lo rtplibraryversion.lo \
|
||||
rtcppacket.lo rtcpcompoundpacketbuilder.lo rtprandom.lo \
|
||||
rtcpscheduler.lo rtcppacketbuilder.lo rtpsessionsources.lo \
|
||||
rtpcollisionlist.lo rtpipv6address.lo rtpudpv6transmitter.lo \
|
||||
rtptimeutilities.lo
|
||||
libjrtp_la_OBJECTS = $(am_libjrtp_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
|
||||
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libjrtp_la_SOURCES)
|
||||
DIST_SOURCES = $(libjrtp_la_SOURCES)
|
||||
libjrtpincludeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(libjrtpinclude_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS64BITLINUX_FALSE = @IS64BITLINUX_FALSE@
|
||||
IS64BITLINUX_TRUE = @IS64BITLINUX_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
RTP_ENDIAN = @RTP_ENDIAN@
|
||||
RTP_FILIO = @RTP_FILIO@
|
||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||
RTP_JTHREADINCLUDES = @RTP_JTHREADINCLUDES@
|
||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||
RTP_SOCKIO = @RTP_SOCKIO@
|
||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||
RTP_SUPPORT_IPV6 = @RTP_SUPPORT_IPV6@
|
||||
RTP_SUPPORT_IPV6MULTICAST = @RTP_SUPPORT_IPV6MULTICAST@
|
||||
RTP_SUPPORT_PROBATION = @RTP_SUPPORT_PROBATION@
|
||||
RTP_SUPPORT_RANDR = @RTP_SUPPORT_RANDR@
|
||||
RTP_SUPPORT_SDESPRIV = @RTP_SUPPORT_SDESPRIV@
|
||||
RTP_SUPPORT_THREAD = @RTP_SUPPORT_THREAD@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
lib_LTLIBRARIES = libjrtp.la
|
||||
libjrtp_la_SOURCES = rtpdebug.cpp rtpsession.cpp rtpconfig_win.h \
|
||||
rtperrors.cpp rtpudpv4transmitter.cpp \
|
||||
rtcpsdesinfo.cpp rtppollthread.cpp rtppacket.cpp \
|
||||
rtppacketbuilder.cpp rtpsessionparams.cpp \
|
||||
rtpsources.cpp rtpinternalsourcedata.cpp \
|
||||
rtpsourcedata.cpp rtpipv4address.cpp \
|
||||
rtcpcompoundpacket.cpp jrtp4c.cpp\
|
||||
rtcpapppacket.cpp rtcpbyepacket.cpp \
|
||||
rtcprrpacket.cpp rtcpsdespacket.cpp \
|
||||
rtcpsrpacket.cpp rtplibraryversion.cpp \
|
||||
rtcppacket.cpp rtcpcompoundpacketbuilder.cpp \
|
||||
rtprandom.cpp rtcpscheduler.cpp \
|
||||
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
||||
rtpcollisionlist.cpp rtpipv6address.cpp \
|
||||
rtpudpv6transmitter.cpp rtptimeutilities.cpp
|
||||
|
||||
libjrtp_la_LDFLAGS = -release 3.5.2 @RTP_LINKLIBS@
|
||||
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
||||
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
||||
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
||||
rtcpsrpacket.h rtcpunknownpacket.h rtpaddress.h rtpconfig.h \
|
||||
rtpconfig_win.h rtpdebug.h rtpdefines.h rtperrors.h rtphashtable.h \
|
||||
rtpconfig_unix.h rtpinternalsourcedata.h rtpipv4address.h \
|
||||
rtpipv4destination.h rtpkeyhashtable.h rtplibraryversion.h rtppacket.h \
|
||||
rtppacketbuilder.h rtppollthread.h rtprandom.h rtprawpacket.h \
|
||||
rtpsession.h rtpsessionparams.h rtpsourcedata.h rtpsources.h \
|
||||
rtpstructs.h rtptimeutilities.h rtptransmitter.h \
|
||||
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
||||
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
||||
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
||||
jrtp4c.h
|
||||
|
||||
EXTRA_DIST = rtpconfig_unix.h.in
|
||||
libjrtpincludedir = ${includedir}/jrtplib3
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
rtpconfig_unix.h: $(top_builddir)/config.status $(srcdir)/rtpconfig_unix.h.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libjrtp.la: $(libjrtp_la_OBJECTS) $(libjrtp_la_DEPENDENCIES)
|
||||
$(CXXLINK) -rpath $(libdir) $(libjrtp_la_LDFLAGS) $(libjrtp_la_OBJECTS) $(libjrtp_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jrtp4c.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpapppacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpbyepacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpcompoundpacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpcompoundpacketbuilder.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcppacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcppacketbuilder.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcprrpacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpscheduler.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpsdesinfo.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpsdespacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtcpsrpacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpcollisionlist.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpdebug.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtperrors.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpinternalsourcedata.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpipv4address.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpipv6address.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtplibraryversion.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtppacket.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtppacketbuilder.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtppollthread.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtprandom.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpsession.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpsessionparams.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpsessionsources.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpsourcedata.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpsources.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtptimeutilities.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpudpv4transmitter.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpudpv6transmitter.Plo@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.cpp.lo:
|
||||
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-libjrtpincludeHEADERS: $(libjrtpinclude_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libjrtpincludedir)" || $(mkdir_p) "$(DESTDIR)$(libjrtpincludedir)"
|
||||
@list='$(libjrtpinclude_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(libjrtpincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libjrtpincludedir)/$$f'"; \
|
||||
$(libjrtpincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libjrtpincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-libjrtpincludeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(libjrtpinclude_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(libjrtpincludedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(libjrtpincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libjrtpincludedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-libjrtpincludeHEADERS
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
|
||||
uninstall-libjrtpincludeHEADERS
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-libjrtpincludeHEADERS \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-info-am uninstall-libLTLIBRARIES \
|
||||
uninstall-libjrtpincludeHEADERS
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
File diff suppressed because it is too large
Load Diff
@ -1,240 +0,0 @@
|
||||
/*
|
||||
|
||||
This class allows for jrtp to process packets without sending them out
|
||||
anywhere.
|
||||
The incoming messages are handed in to jrtp through the TransmissionParams
|
||||
and can be retreived from jrtp through the normal polling mecanisms.
|
||||
The outgoing RTP/RTCP packets are given to jrtp through the normal
|
||||
session->SendPacket() and those packets are handed back out to the
|
||||
client through a callback function (packet_ready_cb).
|
||||
|
||||
example usage : Allows for integration of RTP into gstreamer.
|
||||
|
||||
Copyright (c) 2005 Philippe Khalaf <burger@speedy.org>
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2004 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.luc.ac.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.luc.ac.be), a research center of the "Limburgs Universitair
|
||||
Centrum" (http://www.luc.ac.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPFAKETRANSMITTER_H
|
||||
|
||||
#define RTPFAKETRANSMITTER_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
|
||||
#include "rtptransmitter.h"
|
||||
#include "rtpipv4destination.h"
|
||||
#include "rtphashtable.h"
|
||||
#include "rtpkeyhashtable.h"
|
||||
#include <list>
|
||||
|
||||
#ifdef RTP_SUPPORT_THREAD
|
||||
#include <jmutex.h>
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
#define RTPFAKETRANS_HASHSIZE 8317
|
||||
#define RTPFAKETRANS_DEFAULTPORTBASE 5000
|
||||
|
||||
// Definition of a callback that is called when a packet is ready for sending
|
||||
// params (*data, data_len, dest_addr, dest_port, rtp [1 if rtp, 0 if rtcp])
|
||||
typedef void(*packet_ready_cb)(uint8_t*, uint16_t, uint32_t, uint16_t, int rtp);
|
||||
|
||||
class RTPFakeTransmissionParams : public RTPTransmissionParams
|
||||
{
|
||||
public:
|
||||
RTPFakeTransmissionParams():RTPTransmissionParams(RTPTransmitter::UserDefinedProto) { portbase = RTPFAKETRANS_DEFAULTPORTBASE; bindIP = 0; multicastTTL = 1; currentdata = NULL;}
|
||||
void SetBindIP(uint32_t ip) { bindIP = ip; }
|
||||
void SetPortbase(uint16_t pbase) { portbase = pbase; }
|
||||
void SetMulticastTTL(uint8_t mcastTTL) { multicastTTL = mcastTTL; }
|
||||
void SetLocalIPList(std::list<uint32_t> &iplist) { localIPs = iplist; }
|
||||
void ClearLocalIPList() { localIPs.clear(); }
|
||||
void SetCurrentData(uint8_t *data) { currentdata = data; }
|
||||
void SetCurrentDataLen(uint16_t len) { currentdatalen = len; }
|
||||
void SetCurrentDataAddr(uint32_t addr) { currentdataaddr = addr; }
|
||||
void SetCurrentDataPort(uint16_t port) { currentdataport = port; }
|
||||
void SetCurrentDataType(bool type) { currentdatatype = type; }
|
||||
void SetPacketReadyCB(packet_ready_cb cb) { packetreadycb = cb; };
|
||||
uint32_t GetBindIP() const { return bindIP; }
|
||||
uint16_t GetPortbase() const { return portbase; }
|
||||
uint8_t GetMulticastTTL() const { return multicastTTL; }
|
||||
const std::list<uint32_t> &GetLocalIPList() const { return localIPs; }
|
||||
uint8_t* GetCurrentData() const { return currentdata; }
|
||||
uint16_t GetCurrentDataLen() const { return currentdatalen; }
|
||||
uint32_t GetCurrentDataAddr() const { return currentdataaddr; }
|
||||
uint16_t GetCurrentDataPort() const { return currentdataport; }
|
||||
bool GetCurrentDataType() const { return currentdatatype; }
|
||||
packet_ready_cb GetPacketReadyCB() const { return packetreadycb; }
|
||||
private:
|
||||
uint16_t portbase;
|
||||
uint32_t bindIP;
|
||||
std::list<uint32_t> localIPs;
|
||||
uint8_t multicastTTL;
|
||||
uint8_t* currentdata;
|
||||
uint16_t currentdatalen;
|
||||
uint32_t currentdataaddr;
|
||||
uint16_t currentdataport;
|
||||
bool currentdatatype;
|
||||
packet_ready_cb packetreadycb;
|
||||
};
|
||||
|
||||
class RTPFakeTransmissionInfo : public RTPTransmissionInfo
|
||||
{
|
||||
public:
|
||||
RTPFakeTransmissionInfo(std::list<uint32_t> iplist,
|
||||
RTPFakeTransmissionParams *transparams) :
|
||||
RTPTransmissionInfo(RTPTransmitter::UserDefinedProto)
|
||||
{ localIPlist = iplist; params = transparams; }
|
||||
|
||||
~RTPFakeTransmissionInfo() { }
|
||||
std::list<uint32_t> GetLocalIPList() const { return localIPlist; }
|
||||
RTPFakeTransmissionParams* GetTransParams() { return params; }
|
||||
private:
|
||||
std::list<uint32_t> localIPlist;
|
||||
RTPFakeTransmissionParams *params;
|
||||
};
|
||||
|
||||
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||
inline int RTPFakeTrans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPFAKETRANS_HASHSIZE; }
|
||||
inline int RTPFakeTrans_GetHashIndex_uint32_t(const uint32_t &k) { return k%RTPFAKETRANS_HASHSIZE; }
|
||||
#else // No support for inline function as template parameter
|
||||
int RTPFakeTrans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d);
|
||||
int RTPFakeTrans_GetHashIndex_uint32_t(const uint32_t &k);
|
||||
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||
|
||||
#define RTPFAKETRANS_HEADERSIZE (20+8)
|
||||
|
||||
class RTPFakeTransmitter : public RTPTransmitter
|
||||
{
|
||||
public:
|
||||
RTPFakeTransmitter();
|
||||
~RTPFakeTransmitter();
|
||||
|
||||
int Init(bool treadsafe);
|
||||
int Create(size_t maxpacksize,const RTPTransmissionParams *transparams);
|
||||
void Destroy();
|
||||
RTPTransmissionInfo *GetTransmissionInfo();
|
||||
|
||||
int GetLocalHostName(uint8_t *buffer,size_t *bufferlength);
|
||||
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
||||
size_t GetHeaderOverhead() { return RTPFAKETRANS_HEADERSIZE; }
|
||||
|
||||
int Poll();
|
||||
int WaitForIncomingData(const RTPTime &delay,bool *dataavailable = 0);
|
||||
int AbortWait();
|
||||
|
||||
int SendRTPData(const void *data,size_t len);
|
||||
int SendRTCPData(const void *data,size_t len);
|
||||
|
||||
void ResetPacketCount();
|
||||
uint32_t GetNumRTPPacketsSent();
|
||||
uint32_t GetNumRTCPPacketsSent();
|
||||
|
||||
int AddDestination(const RTPAddress &addr);
|
||||
int DeleteDestination(const RTPAddress &addr);
|
||||
void ClearDestinations();
|
||||
|
||||
bool SupportsMulticasting();
|
||||
int JoinMulticastGroup(const RTPAddress &addr);
|
||||
int LeaveMulticastGroup(const RTPAddress &addr);
|
||||
void LeaveAllMulticastGroups();
|
||||
|
||||
int SetReceiveMode(RTPTransmitter::ReceiveMode m);
|
||||
int AddToIgnoreList(const RTPAddress &addr);
|
||||
int DeleteFromIgnoreList(const RTPAddress &addr);
|
||||
void ClearIgnoreList();
|
||||
int AddToAcceptList(const RTPAddress &addr);
|
||||
int DeleteFromAcceptList(const RTPAddress &addr);
|
||||
void ClearAcceptList();
|
||||
int SetMaximumPacketSize(size_t s);
|
||||
|
||||
bool NewDataAvailable();
|
||||
RTPRawPacket *GetNextPacket();
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
int CreateLocalIPList();
|
||||
bool GetLocalIPList_Interfaces();
|
||||
void GetLocalIPList_DNS();
|
||||
void AddLoopbackAddress();
|
||||
void FlushPackets();
|
||||
int FakePoll();
|
||||
int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
|
||||
int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
|
||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||
bool SetMulticastTTL(uint8_t ttl);
|
||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||
bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
|
||||
void ClearAcceptIgnoreInfo();
|
||||
|
||||
RTPFakeTransmissionParams *params;
|
||||
bool init;
|
||||
bool created;
|
||||
bool waitingfordata;
|
||||
std::list<uint32_t> localIPs;
|
||||
uint16_t portbase;
|
||||
uint8_t multicastTTL;
|
||||
RTPTransmitter::ReceiveMode receivemode;
|
||||
|
||||
uint8_t *localhostname;
|
||||
size_t localhostnamelength;
|
||||
|
||||
RTPHashTable<const RTPIPv4Destination,RTPFakeTrans_GetHashIndex_IPv4Dest,RTPFAKETRANS_HASHSIZE> destinations;
|
||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||
// RTPHashTable<const uint32_t,RTPFakeTrans_GetHashIndex_uint32_t,RTPFAKETRANS_HASHSIZE> multicastgroups;
|
||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||
std::list<RTPRawPacket*> rawpacketlist;
|
||||
|
||||
bool supportsmulticasting;
|
||||
size_t maxpacksize;
|
||||
|
||||
class PortInfo
|
||||
{
|
||||
public:
|
||||
PortInfo() { all = false; }
|
||||
|
||||
bool all;
|
||||
std::list<uint16_t> portlist;
|
||||
};
|
||||
|
||||
RTPKeyHashTable<const uint32_t,PortInfo*,RTPFakeTrans_GetHashIndex_uint32_t,RTPFAKETRANS_HASHSIZE> acceptignoreinfo;
|
||||
|
||||
int CreateAbortDescriptors();
|
||||
void DestroyAbortDescriptors();
|
||||
void AbortWaitInternal();
|
||||
#ifdef RTP_SUPPORT_THREAD
|
||||
JMutex mainmutex,waitmutex;
|
||||
int threadsafe;
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
uint32_t rtppackcount,rtcppackcount;
|
||||
};
|
||||
|
||||
#endif // RTPFakeTRANSMITTER_H
|
||||
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of the JThread package, which contains some object-
|
||||
oriented thread wrappers for different thread implementations.
|
||||
|
||||
Copyright (c) 2000-2006 Jori Liesenborgs (jori@lumumba.uhasselt.be)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef JMUTEX_H
|
||||
|
||||
#define JMUTEX_H
|
||||
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#ifndef _WIN32_WCE
|
||||
#include <process.h>
|
||||
#endif // _WIN32_WCE
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
//#define JMUTEX_CRITICALSECTION
|
||||
#else // using pthread
|
||||
#include <pthread.h>
|
||||
#endif // WIN32
|
||||
|
||||
#define ERR_JMUTEX_ALREADYINIT -1
|
||||
#define ERR_JMUTEX_NOTINIT -2
|
||||
#define ERR_JMUTEX_CANTCREATEMUTEX -3
|
||||
|
||||
class JMutex
|
||||
{
|
||||
public:
|
||||
JMutex();
|
||||
~JMutex();
|
||||
int Init();
|
||||
int Lock();
|
||||
int Unlock();
|
||||
bool IsInitialized() { return initialized; }
|
||||
private:
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#ifdef JMUTEX_CRITICALSECTION
|
||||
CRITICAL_SECTION mutex;
|
||||
#else // Use standard mutex
|
||||
HANDLE mutex;
|
||||
#endif // JMUTEX_CRITICALSECTION
|
||||
#else // pthread mutex
|
||||
pthread_mutex_t mutex;
|
||||
#endif // WIN32
|
||||
bool initialized;
|
||||
};
|
||||
|
||||
#endif // JMUTEX_H
|
@ -1,43 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of the JThread package, which contains some object-
|
||||
oriented thread wrappers for different thread implementations.
|
||||
|
||||
Copyright (c) 2000-2006 Jori Liesenborgs (jori@lumumba.uhasselt.be)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef JMUTEXAUTOLOCK_H
|
||||
|
||||
#define JMUTEXAUTOLOCK_H
|
||||
|
||||
#include "jmutex.h"
|
||||
|
||||
class JMutexAutoLock
|
||||
{
|
||||
public:
|
||||
JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); }
|
||||
~JMutexAutoLock() { mutex.Unlock(); }
|
||||
private:
|
||||
JMutex &mutex;
|
||||
};
|
||||
|
||||
#endif // JMUTEXAUTOLOCK_H
|
@ -1,302 +0,0 @@
|
||||
/*
|
||||
* CCRTP4C (A wrapper for ccRTP so you can use it in C programs)
|
||||
* Copyright Anthony Minessale II <anthmct@yahoo.com>
|
||||
*
|
||||
*/
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <jrtp4c.h>
|
||||
|
||||
#ifdef WIN32
|
||||
static int WSOCKON = 0;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef _FORMATBUG
|
||||
}
|
||||
#endif
|
||||
|
||||
struct jrtp4c;
|
||||
|
||||
class JRTP4C: public RTPSession {
|
||||
public:
|
||||
JRTP4C(): RTPSession() { }
|
||||
void OnInvalidRawPacketType(RTPRawPacket *rawpacket, jrtp_socket_t socket);
|
||||
struct jrtp4c *myjrtp4c;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
JF_READY = ( 1 << 0),
|
||||
JF_RUNNING = ( 1 << 1),
|
||||
JF_READ = (1 << 2),
|
||||
JF_WRITE = (1 << 3)
|
||||
} jrtp4cflags;
|
||||
|
||||
struct jrtp4c {
|
||||
JRTP4C *session;
|
||||
RTPUDPv4TransmissionParams *transparams;
|
||||
uint32_t ssrc;
|
||||
int payload;
|
||||
invalid_handler on_invalid;
|
||||
void *private_data;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
void JRTP4C::OnInvalidRawPacketType(RTPRawPacket *rawpacket, jrtp_socket_t socket)
|
||||
{
|
||||
void * data = rawpacket->GetData();
|
||||
unsigned int len = rawpacket->GetDataLength();
|
||||
const RTPAddress *addr = rawpacket->GetSenderAddress();
|
||||
const RTPIPv4Address *Sender = (const RTPIPv4Address *)addr;
|
||||
|
||||
if (myjrtp4c->on_invalid) {
|
||||
myjrtp4c->on_invalid(myjrtp4c, socket, data, len, ntohl(Sender->GetIP()), ntohs(Sender->GetPort()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void jrtp4c_set_private(struct jrtp4c *jrtp4c, void *private_data)
|
||||
{
|
||||
jrtp4c->private_data = private_data;
|
||||
}
|
||||
|
||||
void *jrtp4c_get_private(struct jrtp4c *jrtp4c)
|
||||
{
|
||||
return jrtp4c->private_data;
|
||||
}
|
||||
|
||||
struct jrtp4c *jrtp4c_new(char *rx_ip, int rx_port, char *tx_ip, int tx_port, int payload, int sps, const char **err)
|
||||
{
|
||||
struct jrtp4c *jrtp4c = NULL;
|
||||
uint32_t destip = ntohl(inet_addr(tx_ip));
|
||||
uint32_t srcip;
|
||||
RTPIPv4Address addr(destip, tx_port);
|
||||
RTPSessionParams sessparams;
|
||||
int status;
|
||||
|
||||
#ifdef WIN32
|
||||
if (!WSOCKON) {
|
||||
WSADATA dat;
|
||||
WSAStartup(MAKEWORD(2,2),&dat);
|
||||
WSOCKON = 1;
|
||||
}
|
||||
#endif // WIN32
|
||||
|
||||
sessparams.SetOwnTimestampUnit(1.0/sps);
|
||||
//sessparams.SetAcceptOwnPackets(true);
|
||||
|
||||
if (!(jrtp4c = new struct jrtp4c)) {
|
||||
*err = "Memory Error!\n";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(jrtp4c, 0, sizeof(*jrtp4c));
|
||||
|
||||
if (!(jrtp4c->transparams = new RTPUDPv4TransmissionParams)) {
|
||||
delete jrtp4c;
|
||||
*err = "Memory Error!\n";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (rx_ip) {
|
||||
srcip = ntohl(inet_addr(rx_ip));
|
||||
jrtp4c->transparams->SetBindIP(srcip);
|
||||
}
|
||||
|
||||
jrtp4c->transparams->SetPortbase(rx_port);
|
||||
|
||||
if (!(jrtp4c->session = new JRTP4C)) {
|
||||
*err = "Memory Error!\n";
|
||||
delete jrtp4c->transparams;
|
||||
delete jrtp4c;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((status = jrtp4c->session->Create(sessparams, jrtp4c->transparams)) < 0) {
|
||||
*err = RTPGetErrorString(status).c_str();
|
||||
delete jrtp4c->transparams;
|
||||
delete jrtp4c;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((status = jrtp4c->session->AddDestination(addr)) < 0) {
|
||||
*err = RTPGetErrorString(status).c_str();
|
||||
jrtp4c_destroy(&jrtp4c);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jrtp4c->session->SetDefaultPayloadType(payload);
|
||||
jrtp4c->payload = payload;
|
||||
jrtp4c->session->myjrtp4c = jrtp4c;
|
||||
|
||||
jrtp4c->flags |= JF_READY;
|
||||
|
||||
return jrtp4c;
|
||||
}
|
||||
|
||||
void jrtp4c_destroy(struct jrtp4c **jrtp4c)
|
||||
{
|
||||
jrtp4c_killread(*jrtp4c);
|
||||
|
||||
while (((*jrtp4c)->flags & JF_READ) || ((*jrtp4c)->flags & JF_WRITE)) {
|
||||
#ifdef WIN32
|
||||
Sleep(1);
|
||||
#else
|
||||
usleep(1000);
|
||||
sched_yield();
|
||||
#endif
|
||||
};
|
||||
|
||||
(*jrtp4c)->session->BYEDestroy(RTPTime(10,0),0,0);
|
||||
delete (*jrtp4c)->session;
|
||||
delete (*jrtp4c)->transparams;
|
||||
delete (*jrtp4c);
|
||||
*jrtp4c = NULL;
|
||||
}
|
||||
|
||||
|
||||
void jrtp4c_set_invald_handler(struct jrtp4c *jrtp4c, invalid_handler on_invalid)
|
||||
{
|
||||
jrtp4c->on_invalid = on_invalid;
|
||||
}
|
||||
|
||||
jrtp_socket_t jrtp4c_get_rtp_socket(struct jrtp4c *jrtp4c)
|
||||
{
|
||||
if (!jrtp4c->flags & JF_READY) {
|
||||
return -1;
|
||||
}
|
||||
return jrtp4c->session->GetRTPSocket();
|
||||
}
|
||||
|
||||
void jrtp4c_killread(struct jrtp4c *jrtp4c)
|
||||
{
|
||||
|
||||
jrtp4c->flags &= ~JF_READY;
|
||||
jrtp4c->session->AbortWait();
|
||||
}
|
||||
|
||||
int jrtp4c_read(struct jrtp4c *jrtp4c, void *data, int datalen, int *payload_type)
|
||||
{
|
||||
RTPPacket *pack = NULL;
|
||||
int status, slen = 0;
|
||||
bool hasdata = 0;
|
||||
|
||||
*payload_type = -1;
|
||||
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
jrtp4c->flags |= JF_READ;
|
||||
|
||||
if ((status = jrtp4c->session->Poll()) < 0) {
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return -1;
|
||||
}
|
||||
|
||||
jrtp4c->session->BeginDataAccess();
|
||||
//jrtp4c->session->WaitForIncomingData(RTPTime(.5), &hasdata);
|
||||
|
||||
/*
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
jrtp4c->session->EndDataAccess();
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!hasdata) {
|
||||
jrtp4c->session->EndDataAccess();
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
if (!jrtp4c->session->GotoFirstSourceWithData()) {
|
||||
jrtp4c->session->EndDataAccess();
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if ((pack = jrtp4c->session->GetNextPacket())) {
|
||||
slen = pack->GetPayloadLength();
|
||||
|
||||
if (slen > datalen) {
|
||||
slen = datalen;
|
||||
}
|
||||
|
||||
*payload_type = pack->GetPayloadType();
|
||||
|
||||
memcpy(data, pack->GetPayloadData(), slen);
|
||||
|
||||
delete pack;
|
||||
}
|
||||
jrtp4c->session->EndDataAccess();
|
||||
jrtp4c->flags &= ~JF_READ;
|
||||
return slen;
|
||||
|
||||
}
|
||||
|
||||
int jrtp4c_write(struct jrtp4c *jrtp4c, void *data, int datalen, uint32_t ts)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
jrtp4c->flags |= JF_WRITE;
|
||||
ret = jrtp4c->session->SendPacket(data, datalen, jrtp4c->payload, false, ts);
|
||||
jrtp4c->flags &= ~JF_WRITE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int jrtp4c_write_payload(struct jrtp4c *jrtp4c, void *data, int datalen, int payload, uint32_t ts, uint32_t mseq)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
jrtp4c->flags |= JF_WRITE;
|
||||
ret = jrtp4c->session->SendPacket(data, datalen, payload, false, ts, mseq);
|
||||
jrtp4c->flags &= ~JF_WRITE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint32_t jrtp4c_start(struct jrtp4c *jrtp4c)
|
||||
{
|
||||
jrtp4c->flags |= JF_RUNNING;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t jrtp4c_get_ssrc(struct jrtp4c *jrtp4c)
|
||||
{
|
||||
if (!(jrtp4c->flags & JF_READY)) {
|
||||
return -1;
|
||||
}
|
||||
return jrtp4c->ssrc;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/** EMACS **
|
||||
* Local variables:
|
||||
* mode: c++
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
*/
|
@ -1,80 +0,0 @@
|
||||
/*
|
||||
* CCRTP4C (A wrapper for ccRTP so you can use it in C programs)
|
||||
* Copyright Anthony Minessale II <anthmct@yahoo.com>
|
||||
*
|
||||
*/
|
||||
#ifndef CCRTP4C_H
|
||||
#define CCRTP4C_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <rtpsession.h>
|
||||
#include <rtppacket.h>
|
||||
#include <rtprawpacket.h>
|
||||
#include <rtpudpv4transmitter.h>
|
||||
#include <rtpipv4address.h>
|
||||
#include <rtpsessionparams.h>
|
||||
#include <rtperrors.h>
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
#endif // WIN32
|
||||
#if 0
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifdef _FORMABUG
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
SR,
|
||||
RR,
|
||||
SDES,
|
||||
BYE,
|
||||
APP,
|
||||
UNK
|
||||
} jrtp4c_packet_t;
|
||||
|
||||
#ifndef uint32_t
|
||||
#ifdef WIN32
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
typedef SOCKET jrtp_socket_t;
|
||||
#else
|
||||
typedef int jrtp_socket_t;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
struct jrtp4c;
|
||||
typedef void (*invalid_handler)(struct jrtp4c *jrtp4c, jrtp_socket_t sock, void *data, unsigned int datalen, uint32_t fromip, uint16_t fromport);
|
||||
struct jrtp4c *jrtp4c_new(char *rx_ip, int rx_port, char *tx_ip, int tx_port, int payload, int sps, const char **err);
|
||||
void jrtp4c_destroy(struct jrtp4c **jrtp4c);
|
||||
jrtp_socket_t jrtp4c_get_rtp_socket(struct jrtp4c *jrtp4c);
|
||||
void jrtp4c_set_invald_handler(struct jrtp4c *jrtp4c, invalid_handler on_invalid);
|
||||
int jrtp4c_read(struct jrtp4c *jrtp4c, void *data, int datalen, int *payload_type);
|
||||
int jrtp4c_write(struct jrtp4c *jrtp4c, void *data, int datalen, uint32_t ts);
|
||||
int jrtp4c_write_payload(struct jrtp4c *jrtp4c, void *data, int datalen, int payload, uint32_t ts, uint32_t mseq);
|
||||
uint32_t jrtp4c_start(struct jrtp4c *jrtp4c);
|
||||
uint32_t jrtp4c_get_ssrc(struct jrtp4c *jrtp4c);
|
||||
void jrtp4c_killread(struct jrtp4c *jrtp4c);
|
||||
void jrtp4c_set_private(struct jrtp4c *jrtp4c, void *private_data);
|
||||
void *jrtp4c_get_private(struct jrtp4c *jrtp4c);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of the JThread package, which contains some object-
|
||||
oriented thread wrappers for different thread implementations.
|
||||
|
||||
Copyright (c) 2000-2006 Jori Liesenborgs (jori@lumumba.uhasselt.be)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef JTHREAD_H
|
||||
|
||||
#define JTHREAD_H
|
||||
|
||||
#include "jmutex.h"
|
||||
|
||||
#define ERR_JTHREAD_CANTINITMUTEX -1
|
||||
#define ERR_JTHREAD_CANTSTARTTHREAD -2
|
||||
#define ERR_JTHREAD_THREADFUNCNOTSET -3
|
||||
#define ERR_JTHREAD_NOTRUNNING -4
|
||||
#define ERR_JTHREAD_ALREADYRUNNING -5
|
||||
|
||||
class JThread
|
||||
{
|
||||
public:
|
||||
JThread();
|
||||
virtual ~JThread();
|
||||
int Start();
|
||||
int Kill();
|
||||
virtual void *Thread() = 0;
|
||||
bool IsRunning();
|
||||
void *GetReturnValue();
|
||||
protected:
|
||||
void ThreadStarted();
|
||||
private:
|
||||
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#ifdef _WIN32_WCE
|
||||
DWORD threadid;
|
||||
static DWORD WINAPI TheThread(void *param);
|
||||
#else
|
||||
static UINT __stdcall TheThread(void *param);
|
||||
UINT threadid;
|
||||
#endif // _WIN32_WCE
|
||||
HANDLE threadhandle;
|
||||
#else // pthread type threads
|
||||
static void *TheThread(void *param);
|
||||
|
||||
pthread_t threadid;
|
||||
#endif // WIN32
|
||||
void *retval;
|
||||
bool running;
|
||||
|
||||
JMutex runningmutex;
|
||||
JMutex continuemutex,continuemutex2;
|
||||
bool mutexinit;
|
||||
};
|
||||
|
||||
#endif // JTHREAD_H
|
||||
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of the JThread package, which contains some object-
|
||||
oriented thread wrappers for different thread implementations.
|
||||
|
||||
Copyright (c) 2000-2006 Jori Liesenborgs (jori@lumumba.uhasselt.be)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "jmutex.h"
|
||||
|
||||
JMutex::JMutex()
|
||||
{
|
||||
initialized = false;
|
||||
}
|
||||
|
||||
JMutex::~JMutex()
|
||||
{
|
||||
if (initialized)
|
||||
pthread_mutex_destroy(&mutex);
|
||||
}
|
||||
|
||||
int JMutex::Init()
|
||||
{
|
||||
if (initialized)
|
||||
return ERR_JMUTEX_ALREADYINIT;
|
||||
|
||||
pthread_mutex_init(&mutex,NULL);
|
||||
initialized = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int JMutex::Lock()
|
||||
{
|
||||
if (!initialized)
|
||||
return ERR_JMUTEX_NOTINIT;
|
||||
|
||||
pthread_mutex_lock(&mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int JMutex::Unlock()
|
||||
{
|
||||
if (!initialized)
|
||||
return ERR_JMUTEX_NOTINIT;
|
||||
|
||||
pthread_mutex_unlock(&mutex);
|
||||
return 0;
|
||||
}
|
@ -1,178 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of the JThread package, which contains some object-
|
||||
oriented thread wrappers for different thread implementations.
|
||||
|
||||
Copyright (c) 2000-2006 Jori Liesenborgs (jori@lumumba.uhasselt.be)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "jthread.h"
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
JThread::JThread()
|
||||
{
|
||||
retval = NULL;
|
||||
mutexinit = false;
|
||||
running = false;
|
||||
}
|
||||
|
||||
JThread::~JThread()
|
||||
{
|
||||
Kill();
|
||||
}
|
||||
|
||||
int JThread::Start()
|
||||
{
|
||||
int status;
|
||||
pthread_attr_t attr;
|
||||
|
||||
if (!mutexinit)
|
||||
{
|
||||
if (!runningmutex.IsInitialized())
|
||||
{
|
||||
if (runningmutex.Init() < 0)
|
||||
return ERR_JTHREAD_CANTINITMUTEX;
|
||||
}
|
||||
if (!continuemutex.IsInitialized())
|
||||
{
|
||||
if (continuemutex.Init() < 0)
|
||||
return ERR_JTHREAD_CANTINITMUTEX;
|
||||
}
|
||||
if (!continuemutex2.IsInitialized())
|
||||
{
|
||||
if (continuemutex2.Init() < 0)
|
||||
return ERR_JTHREAD_CANTINITMUTEX;
|
||||
}
|
||||
mutexinit = true;
|
||||
}
|
||||
|
||||
runningmutex.Lock();
|
||||
if (running)
|
||||
{
|
||||
runningmutex.Unlock();
|
||||
return ERR_JTHREAD_ALREADYRUNNING;
|
||||
}
|
||||
runningmutex.Unlock();
|
||||
|
||||
continuemutex.Lock();
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
||||
status = pthread_create(&threadid,&attr,TheThread,this);
|
||||
if (status != 0)
|
||||
{
|
||||
continuemutex.Unlock();
|
||||
return ERR_JTHREAD_CANTSTARTTHREAD;
|
||||
}
|
||||
|
||||
/* Wait until 'running' is set */
|
||||
|
||||
runningmutex.Lock();
|
||||
while (!running)
|
||||
{
|
||||
runningmutex.Unlock();
|
||||
|
||||
struct timespec req,rem;
|
||||
|
||||
req.tv_sec = 0;
|
||||
req.tv_nsec = 1000000;
|
||||
nanosleep(&req,&rem);
|
||||
|
||||
runningmutex.Lock();
|
||||
}
|
||||
runningmutex.Unlock();
|
||||
|
||||
continuemutex.Unlock();
|
||||
|
||||
continuemutex2.Lock();
|
||||
continuemutex2.Unlock();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int JThread::Kill()
|
||||
{
|
||||
runningmutex.Lock();
|
||||
if (!running)
|
||||
{
|
||||
runningmutex.Unlock();
|
||||
return ERR_JTHREAD_NOTRUNNING;
|
||||
}
|
||||
pthread_cancel(threadid);
|
||||
running = false;
|
||||
runningmutex.Unlock();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool JThread::IsRunning()
|
||||
{
|
||||
bool r;
|
||||
|
||||
runningmutex.Lock();
|
||||
r = running;
|
||||
runningmutex.Unlock();
|
||||
return r;
|
||||
}
|
||||
|
||||
void *JThread::GetReturnValue()
|
||||
{
|
||||
void *val;
|
||||
|
||||
runningmutex.Lock();
|
||||
if (running)
|
||||
val = NULL;
|
||||
else
|
||||
val = retval;
|
||||
runningmutex.Unlock();
|
||||
return val;
|
||||
}
|
||||
|
||||
void *JThread::TheThread(void *param)
|
||||
{
|
||||
JThread *jthread;
|
||||
void *ret;
|
||||
|
||||
jthread = (JThread *)param;
|
||||
|
||||
jthread->continuemutex2.Lock();
|
||||
jthread->runningmutex.Lock();
|
||||
jthread->running = true;
|
||||
jthread->runningmutex.Unlock();
|
||||
|
||||
jthread->continuemutex.Lock();
|
||||
jthread->continuemutex.Unlock();
|
||||
|
||||
ret = jthread->Thread();
|
||||
|
||||
jthread->runningmutex.Lock();
|
||||
jthread->running = false;
|
||||
jthread->retval = ret;
|
||||
jthread->runningmutex.Unlock();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void JThread::ThreadStarted()
|
||||
{
|
||||
continuemutex2.Unlock();
|
||||
}
|
||||
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpapppacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPAPPPacket::RTCPAPPPacket(uint8_t *data,size_t datalength)
|
||||
: RTCPPacket(APP,data,datalength)
|
||||
{
|
||||
knownformat = false;
|
||||
|
||||
RTCPCommonHeader *hdr;
|
||||
size_t len = datalength;
|
||||
|
||||
hdr = (RTCPCommonHeader *)data;
|
||||
if (hdr->padding)
|
||||
{
|
||||
uint8_t padcount = data[datalength-1];
|
||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||
return;
|
||||
if (((size_t)padcount) >= len)
|
||||
return;
|
||||
len -= (size_t)padcount;
|
||||
}
|
||||
|
||||
if (len < (sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2))
|
||||
return;
|
||||
len -= (sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2);
|
||||
appdatalen = len;
|
||||
knownformat = true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPAPPPacket::Dump()
|
||||
{
|
||||
RTCPPacket::Dump();
|
||||
if (!IsKnownFormat())
|
||||
{
|
||||
std::cout << " Unknown format!" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << " SSRC: " << GetSSRC() << std::endl;
|
||||
|
||||
char str[5];
|
||||
memcpy(str,GetName(),4);
|
||||
str[4] = 0;
|
||||
std::cout << " Name: " << std::string(str).c_str() << std::endl;
|
||||
std::cout << " Length: " << GetAPPDataLength() << std::endl;
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,106 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPAPPPACKET_H
|
||||
|
||||
#define RTCPAPPPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtpstructs.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPAPPPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
RTCPAPPPacket(uint8_t *data,size_t datalen);
|
||||
~RTCPAPPPacket() { }
|
||||
|
||||
uint8_t GetSubType() const;
|
||||
uint32_t GetSSRC() const;
|
||||
uint8_t *GetName(); // Note that the name always consists of 4 octets and is not null-terminated
|
||||
uint8_t *GetAPPData();
|
||||
size_t GetAPPDataLength() const;
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
size_t appdatalen;
|
||||
};
|
||||
|
||||
inline uint8_t RTCPAPPPacket::GetSubType() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
return hdr->count;
|
||||
}
|
||||
|
||||
inline uint32_t RTCPAPPPacket::GetSSRC() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
|
||||
uint32_t *ssrc = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||
return ntohl(*ssrc);
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPAPPPacket::GetName()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
|
||||
return (data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPAPPPacket::GetAPPData()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (appdatalen == 0)
|
||||
return 0;
|
||||
return (data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2);
|
||||
}
|
||||
|
||||
inline size_t RTCPAPPPacket::GetAPPDataLength() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
return appdatalen;
|
||||
}
|
||||
|
||||
#endif // RTCPAPPPACKET_H
|
||||
|
@ -1,98 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpbyepacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPBYEPacket::RTCPBYEPacket(uint8_t *data,size_t datalength)
|
||||
: RTCPPacket(BYE,data,datalength)
|
||||
{
|
||||
knownformat = false;
|
||||
reasonoffset = 0;
|
||||
|
||||
RTCPCommonHeader *hdr;
|
||||
size_t len = datalength;
|
||||
|
||||
hdr = (RTCPCommonHeader *)data;
|
||||
if (hdr->padding)
|
||||
{
|
||||
uint8_t padcount = data[datalength-1];
|
||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||
return;
|
||||
if (((size_t)padcount) >= len)
|
||||
return;
|
||||
len -= (size_t)padcount;
|
||||
}
|
||||
|
||||
size_t ssrclen = ((size_t)(hdr->count))*sizeof(uint32_t) + sizeof(RTCPCommonHeader);
|
||||
if (ssrclen > len)
|
||||
return;
|
||||
if (ssrclen < len) // there's probably a reason for leaving
|
||||
{
|
||||
uint8_t *reasonlength = (data+ssrclen);
|
||||
size_t reaslen = (size_t)(*reasonlength);
|
||||
if (reaslen > (len-ssrclen-1))
|
||||
return;
|
||||
reasonoffset = ssrclen;
|
||||
}
|
||||
knownformat = true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPBYEPacket::Dump()
|
||||
{
|
||||
RTCPPacket::Dump();
|
||||
if (!IsKnownFormat())
|
||||
{
|
||||
std::cout << " Unknown format" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
int num = GetSSRCCount();
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < num ; i++)
|
||||
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
||||
if (HasReasonForLeaving())
|
||||
{
|
||||
char str[1024];
|
||||
memcpy(str,GetReasonData(),GetReasonLength());
|
||||
str[GetReasonLength()] = 0;
|
||||
std::cout << " Reason: " << str << std::endl;
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,114 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPBYEPACKET_H
|
||||
|
||||
#define RTCPBYEPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtpstructs.h"
|
||||
#if ! (defined(WIN32) || defined (_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPBYEPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
RTCPBYEPacket(uint8_t *data,size_t datalen);
|
||||
~RTCPBYEPacket() { }
|
||||
|
||||
int GetSSRCCount() const;
|
||||
uint32_t GetSSRC(int index) const; // note: no check is performed to see if index is valid!
|
||||
bool HasReasonForLeaving() const;
|
||||
size_t GetReasonLength() const;
|
||||
uint8_t *GetReasonData();
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
size_t reasonoffset;
|
||||
};
|
||||
|
||||
inline int RTCPBYEPacket::GetSSRCCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
return (int)(hdr->count);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPBYEPacket::GetSSRC(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
uint32_t *ssrc = (uint32_t *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*index);
|
||||
return ntohl(*ssrc);
|
||||
}
|
||||
|
||||
inline bool RTCPBYEPacket::HasReasonForLeaving() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return false;
|
||||
if (reasonoffset == 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline size_t RTCPBYEPacket::GetReasonLength() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (reasonoffset == 0)
|
||||
return 0;
|
||||
uint8_t *reasonlen = (data+reasonoffset);
|
||||
return (size_t)(*reasonlen);
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPBYEPacket::GetReasonData()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (reasonoffset == 0)
|
||||
return 0;
|
||||
uint8_t *reasonlen = (data+reasonoffset);
|
||||
if ((*reasonlen) == 0)
|
||||
return 0;
|
||||
return (data+reasonoffset+1);
|
||||
}
|
||||
|
||||
#endif // RTCPBYEPACKET_H
|
||||
|
@ -1,208 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpcompoundpacket.h"
|
||||
#include "rtprawpacket.h"
|
||||
#include "rtperrors.h"
|
||||
#include "rtpstructs.h"
|
||||
#include "rtpdefines.h"
|
||||
#include "rtcpsrpacket.h"
|
||||
#include "rtcprrpacket.h"
|
||||
#include "rtcpsdespacket.h"
|
||||
#include "rtcpbyepacket.h"
|
||||
#include "rtcpapppacket.h"
|
||||
#include "rtcpunknownpacket.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPCompoundPacket::RTCPCompoundPacket(RTPRawPacket &rawpack)
|
||||
{
|
||||
compoundpacket = 0;
|
||||
compoundpacketlength = 0;
|
||||
error = 0;
|
||||
|
||||
if (rawpack.IsRTP())
|
||||
{
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t *data = rawpack.GetData();
|
||||
size_t datalen = rawpack.GetDataLength();
|
||||
bool first;
|
||||
|
||||
if (datalen < sizeof(RTCPCommonHeader))
|
||||
{
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
|
||||
first = true;
|
||||
|
||||
do
|
||||
{
|
||||
RTCPCommonHeader *rtcphdr;
|
||||
size_t length;
|
||||
|
||||
rtcphdr = (RTCPCommonHeader *)data;
|
||||
if (rtcphdr->version != RTP_VERSION) // check version
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
if (first)
|
||||
{
|
||||
// Check if first packet is SR or RR
|
||||
|
||||
first = false;
|
||||
if ( ! (rtcphdr->packettype == RTP_RTCPTYPE_SR || rtcphdr->packettype == RTP_RTCPTYPE_RR))
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
length = (size_t)ntohs(rtcphdr->length);
|
||||
length++;
|
||||
length *= sizeof(uint32_t);
|
||||
|
||||
if (length > datalen) // invalid length field
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
|
||||
if (rtcphdr->padding)
|
||||
{
|
||||
// check if it's the last packet
|
||||
if (length != datalen)
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return; // not last packet
|
||||
}
|
||||
}
|
||||
|
||||
RTCPPacket *p;
|
||||
|
||||
switch (rtcphdr->packettype)
|
||||
{
|
||||
case RTP_RTCPTYPE_SR:
|
||||
p = new RTCPSRPacket(data,length);
|
||||
break;
|
||||
case RTP_RTCPTYPE_RR:
|
||||
p = new RTCPRRPacket(data,length);
|
||||
break;
|
||||
case RTP_RTCPTYPE_SDES:
|
||||
p = new RTCPSDESPacket(data,length);
|
||||
break;
|
||||
case RTP_RTCPTYPE_BYE:
|
||||
p = new RTCPBYEPacket(data,length);
|
||||
break;
|
||||
case RTP_RTCPTYPE_APP:
|
||||
p = new RTCPAPPPacket(data,length);
|
||||
break;
|
||||
default:
|
||||
p = new RTCPUnknownPacket(data,length);
|
||||
}
|
||||
|
||||
if (p == 0)
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_OUTOFMEM;
|
||||
return;
|
||||
}
|
||||
|
||||
rtcppacklist.push_back(p);
|
||||
|
||||
datalen -= length;
|
||||
data += length;
|
||||
} while (datalen >= (size_t)sizeof(RTCPCommonHeader));
|
||||
|
||||
if (datalen != 0) // some remaining bytes
|
||||
{
|
||||
ClearPacketList();
|
||||
error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET;
|
||||
return;
|
||||
}
|
||||
|
||||
compoundpacket = rawpack.GetData();
|
||||
compoundpacketlength = rawpack.GetDataLength();
|
||||
|
||||
rawpack.ZeroData();
|
||||
|
||||
rtcppackit = rtcppacklist.begin();
|
||||
}
|
||||
|
||||
RTCPCompoundPacket::RTCPCompoundPacket()
|
||||
{
|
||||
compoundpacket = 0;
|
||||
compoundpacketlength = 0;
|
||||
error = 0;
|
||||
}
|
||||
|
||||
RTCPCompoundPacket::~RTCPCompoundPacket()
|
||||
{
|
||||
ClearPacketList();
|
||||
if (compoundpacket)
|
||||
delete [] compoundpacket;
|
||||
}
|
||||
|
||||
void RTCPCompoundPacket::ClearPacketList()
|
||||
{
|
||||
std::list<RTCPPacket *>::const_iterator it;
|
||||
|
||||
for (it = rtcppacklist.begin() ; it != rtcppacklist.end() ; it++)
|
||||
delete *it;
|
||||
|
||||
rtcppacklist.clear();
|
||||
rtcppackit = rtcppacklist.begin();
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPCompoundPacket::Dump()
|
||||
{
|
||||
std::list<RTCPPacket *>::const_iterator it;
|
||||
for (it = rtcppacklist.begin() ; it != rtcppacklist.end() ; it++)
|
||||
{
|
||||
RTCPPacket *p = *it;
|
||||
|
||||
p->Dump();
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
@ -1,79 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifndef RTCPCOMPOUNDPACKET_H
|
||||
|
||||
#define RTCPCOMPOUNDPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtptypes.h"
|
||||
#include <list>
|
||||
|
||||
class RTPRawPacket;
|
||||
class RTCPPacket;
|
||||
|
||||
class RTCPCompoundPacket
|
||||
{
|
||||
public:
|
||||
RTCPCompoundPacket(RTPRawPacket &rawpack);
|
||||
protected:
|
||||
RTCPCompoundPacket(); // this is for the compoundpacket builder
|
||||
public:
|
||||
virtual ~RTCPCompoundPacket();
|
||||
int GetCreationError() { return error; }
|
||||
|
||||
uint8_t *GetCompoundPacketData() { return compoundpacket; }
|
||||
size_t GetCompoundPacketLength() { return compoundpacketlength; }
|
||||
|
||||
void GotoFirstPacket() { rtcppackit = rtcppacklist.begin(); }
|
||||
|
||||
// Note: the individual RTCPPackets may NOT be deleted!
|
||||
RTCPPacket *GetNextPacket() { if (rtcppackit == rtcppacklist.end()) return 0; RTCPPacket *p = *rtcppackit; rtcppackit++; return p; }
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
protected:
|
||||
void ClearPacketList();
|
||||
|
||||
int error;
|
||||
|
||||
uint8_t *compoundpacket;
|
||||
size_t compoundpacketlength;
|
||||
|
||||
std::list<RTCPPacket *> rtcppacklist;
|
||||
std::list<RTCPPacket *>::const_iterator rtcppackit;
|
||||
};
|
||||
|
||||
#endif // RTCPCOMPOUNDPACKET_H
|
||||
|
@ -1,672 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpcompoundpacketbuilder.h"
|
||||
#include "rtcpsrpacket.h"
|
||||
#include "rtcprrpacket.h"
|
||||
#include "rtcpsdespacket.h"
|
||||
#include "rtcpbyepacket.h"
|
||||
#include "rtcpapppacket.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPCompoundPacketBuilder::RTCPCompoundPacketBuilder()
|
||||
{
|
||||
byesize = 0;
|
||||
appsize = 0;
|
||||
maximumpacketsize = 0;
|
||||
buffer = 0;
|
||||
external = false;
|
||||
arebuilding = false;
|
||||
}
|
||||
|
||||
RTCPCompoundPacketBuilder::~RTCPCompoundPacketBuilder()
|
||||
{
|
||||
if (external)
|
||||
compoundpacket = 0; // make sure RTCPCompoundPacket doesn't delete the external buffer
|
||||
ClearBuildBuffers();
|
||||
}
|
||||
|
||||
void RTCPCompoundPacketBuilder::ClearBuildBuffers()
|
||||
{
|
||||
report.Clear();
|
||||
sdes.Clear();
|
||||
|
||||
std::list<Buffer>::const_iterator it;
|
||||
for (it = byepackets.begin() ; it != byepackets.end() ; it++)
|
||||
if ((*it).packetdata)
|
||||
delete [] (*it).packetdata;
|
||||
|
||||
for (it = apppackets.begin() ; it != apppackets.end() ; it++)
|
||||
if ((*it).packetdata)
|
||||
delete [] (*it).packetdata;
|
||||
|
||||
byepackets.clear();
|
||||
apppackets.clear();
|
||||
byesize = 0;
|
||||
appsize = 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::InitBuild(size_t maxpacketsize)
|
||||
{
|
||||
if (arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING;
|
||||
if (compoundpacket)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT;
|
||||
|
||||
if (maxpacketsize < RTP_MINPACKETSIZE)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_MAXPACKETSIZETOOSMALL;
|
||||
|
||||
maximumpacketsize = maxpacketsize;
|
||||
buffer = 0;
|
||||
external = false;
|
||||
byesize = 0;
|
||||
appsize = 0;
|
||||
|
||||
arebuilding = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::InitBuild(void *externalbuffer,size_t buffersize)
|
||||
{
|
||||
if (arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING;
|
||||
if (compoundpacket)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT;
|
||||
|
||||
if (buffersize < RTP_MINPACKETSIZE)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL;
|
||||
|
||||
maximumpacketsize = buffersize;
|
||||
buffer = (uint8_t *)externalbuffer;
|
||||
external = true;
|
||||
byesize = 0;
|
||||
appsize = 0;
|
||||
|
||||
arebuilding = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::StartSenderReport(uint32_t senderssrc,const RTPNTPTime &ntptimestamp,uint32_t rtptimestamp,
|
||||
uint32_t packetcount,uint32_t octetcount)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
|
||||
if (report.headerlength != 0)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT;
|
||||
|
||||
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
||||
size_t sizeleft = maximumpacketsize-totalsize;
|
||||
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||
|
||||
if (neededsize > sizeleft)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
// fill in some things
|
||||
|
||||
report.headerlength = sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||
report.isSR = true;
|
||||
|
||||
uint32_t *ssrc = (uint32_t *)report.headerdata;
|
||||
*ssrc = htonl(senderssrc);
|
||||
|
||||
RTCPSenderReport *sr = (RTCPSenderReport *)(report.headerdata + sizeof(uint32_t));
|
||||
sr->ntptime_msw = htonl(ntptimestamp.GetMSW());
|
||||
sr->ntptime_lsw = htonl(ntptimestamp.GetLSW());
|
||||
sr->rtptimestamp = htonl(rtptimestamp);
|
||||
sr->packetcount = htonl(packetcount);
|
||||
sr->octetcount = htonl(octetcount);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::StartReceiverReport(uint32_t senderssrc)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (report.headerlength != 0)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT;
|
||||
|
||||
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
||||
size_t sizeleft = maximumpacketsize-totalsize;
|
||||
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||
|
||||
if (neededsize > sizeleft)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
// fill in some things
|
||||
|
||||
report.headerlength = sizeof(uint32_t);
|
||||
report.isSR = false;
|
||||
|
||||
uint32_t *ssrc = (uint32_t *)report.headerdata;
|
||||
*ssrc = htonl(senderssrc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::AddReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t packetslost,uint32_t exthighestseq,
|
||||
uint32_t jitter,uint32_t lsr,uint32_t dlsr)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (report.headerlength == 0)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_REPORTNOTSTARTED;
|
||||
|
||||
size_t totalothersize = byesize+appsize+sdes.NeededBytes();
|
||||
size_t reportsizewithextrablock = report.NeededBytesWithExtraReportBlock();
|
||||
|
||||
if ((totalothersize+reportsizewithextrablock) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
uint8_t *buf = new uint8_t[sizeof(RTCPReceiverReport)];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
RTCPReceiverReport *rr = (RTCPReceiverReport *)buf;
|
||||
uint32_t *packlost = (uint32_t *)&packetslost;
|
||||
uint32_t packlost2 = (*packlost);
|
||||
|
||||
rr->ssrc = htonl(ssrc);
|
||||
rr->fractionlost = fractionlost;
|
||||
rr->packetslost[2] = (uint8_t)(packlost2&0xFF);
|
||||
rr->packetslost[1] = (uint8_t)((packlost2>>8)&0xFF);
|
||||
rr->packetslost[0] = (uint8_t)((packlost2>>16)&0xFF);
|
||||
rr->exthighseqnr = htonl(exthighestseq);
|
||||
rr->jitter = htonl(jitter);
|
||||
rr->lsr = htonl(lsr);
|
||||
rr->dlsr = htonl(dlsr);
|
||||
|
||||
report.reportblocks.push_back(Buffer(buf,sizeof(RTCPReceiverReport)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::AddSDESSource(uint32_t ssrc)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
|
||||
size_t totalotherbytes = byesize+appsize+report.NeededBytes();
|
||||
size_t sdessizewithextrasource = sdes.NeededBytesWithExtraSource();
|
||||
|
||||
if ((totalotherbytes + sdessizewithextrasource) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
int status;
|
||||
|
||||
if ((status = sdes.AddSSRC(ssrc)) < 0)
|
||||
return status;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,uint8_t itemlength)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (sdes.sdessources.empty())
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
||||
|
||||
uint8_t itemid;
|
||||
|
||||
switch(t)
|
||||
{
|
||||
case RTCPSDESPacket::CNAME:
|
||||
itemid = RTCP_SDES_ID_CNAME;
|
||||
break;
|
||||
case RTCPSDESPacket::NAME:
|
||||
itemid = RTCP_SDES_ID_NAME;
|
||||
break;
|
||||
case RTCPSDESPacket::EMAIL:
|
||||
itemid = RTCP_SDES_ID_EMAIL;
|
||||
break;
|
||||
case RTCPSDESPacket::PHONE:
|
||||
itemid = RTCP_SDES_ID_PHONE;
|
||||
break;
|
||||
case RTCPSDESPacket::LOC:
|
||||
itemid = RTCP_SDES_ID_LOCATION;
|
||||
break;
|
||||
case RTCPSDESPacket::TOOL:
|
||||
itemid = RTCP_SDES_ID_TOOL;
|
||||
break;
|
||||
case RTCPSDESPacket::NOTE:
|
||||
itemid = RTCP_SDES_ID_NOTE;
|
||||
break;
|
||||
default:
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_INVALIDITEMTYPE;
|
||||
}
|
||||
|
||||
size_t totalotherbytes = byesize+appsize+report.NeededBytes();
|
||||
size_t sdessizewithextraitem = sdes.NeededBytesWithExtraItem(itemlength);
|
||||
|
||||
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
uint8_t *buf;
|
||||
size_t len;
|
||||
|
||||
buf = new uint8_t[sizeof(RTCPSDESHeader)+(size_t)itemlength];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
||||
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(buf);
|
||||
|
||||
sdeshdr->sdesid = itemid;
|
||||
sdeshdr->length = itemlength;
|
||||
if (itemlength != 0)
|
||||
memcpy((buf + sizeof(RTCPSDESHeader)),itemdata,(size_t)itemlength);
|
||||
|
||||
sdes.AddItem(buf,len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
int RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,uint8_t prefixlength,const void *valuedata,
|
||||
uint8_t valuelength)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (sdes.sdessources.empty())
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
||||
|
||||
size_t itemlength = ((size_t)prefixlength)+1+((size_t)valuelength);
|
||||
if (itemlength > 255)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_TOTALITEMLENGTHTOOBIG;
|
||||
|
||||
size_t totalotherbytes = byesize+appsize+report.NeededBytes();
|
||||
size_t sdessizewithextraitem = sdes.NeededBytesWithExtraItem(itemlength);
|
||||
|
||||
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
uint8_t *buf;
|
||||
size_t len;
|
||||
|
||||
buf = new uint8_t[sizeof(RTCPSDESHeader)+itemlength];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
||||
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(buf);
|
||||
|
||||
sdeshdr->sdesid = RTCP_SDES_ID_PRIVATE;
|
||||
sdeshdr->length = itemlength;
|
||||
|
||||
buf[sizeof(RTCPSDESHeader)] = prefixlength;
|
||||
if (prefixlength != 0)
|
||||
memcpy((buf+sizeof(RTCPSDESHeader)+1),prefixdata,(size_t)prefixlength);
|
||||
if (valuelength != 0)
|
||||
memcpy((buf+sizeof(RTCPSDESHeader)+1+(size_t)prefixlength),valuedata,(size_t)valuelength);
|
||||
|
||||
sdes.AddItem(buf,len);
|
||||
return 0;
|
||||
}
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
int RTCPCompoundPacketBuilder::AddBYEPacket(uint32_t *ssrcs,uint8_t numssrcs,const void *reasondata,uint8_t reasonlength)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
|
||||
if (numssrcs > 31)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_TOOMANYSSRCS;
|
||||
|
||||
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)*((size_t)numssrcs);
|
||||
size_t zerobytes = 0;
|
||||
|
||||
if (reasonlength > 0)
|
||||
{
|
||||
packsize += 1; // 1 byte for the length;
|
||||
packsize += (size_t)reasonlength;
|
||||
|
||||
size_t r = (packsize&0x03);
|
||||
if (r != 0)
|
||||
{
|
||||
zerobytes = 4-r;
|
||||
packsize += zerobytes;
|
||||
}
|
||||
}
|
||||
|
||||
size_t totalotherbytes = appsize+byesize+sdes.NeededBytes()+report.NeededBytes();
|
||||
|
||||
if ((totalotherbytes + packsize) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
uint8_t *buf;
|
||||
size_t numwords;
|
||||
|
||||
buf = new uint8_t[packsize];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)buf;
|
||||
|
||||
hdr->version = 2;
|
||||
hdr->padding = 0;
|
||||
hdr->count = numssrcs;
|
||||
|
||||
numwords = packsize/sizeof(uint32_t);
|
||||
hdr->length = htons((uint16_t)(numwords-1));
|
||||
hdr->packettype = RTP_RTCPTYPE_BYE;
|
||||
|
||||
uint32_t *sources = (uint32_t *)(buf+sizeof(RTCPCommonHeader));
|
||||
uint8_t srcindex;
|
||||
|
||||
for (srcindex = 0 ; srcindex < numssrcs ; srcindex++)
|
||||
sources[srcindex] = htonl(ssrcs[srcindex]);
|
||||
|
||||
if (reasonlength != 0)
|
||||
{
|
||||
size_t offset = sizeof(RTCPCommonHeader)+((size_t)numssrcs)*sizeof(uint32_t);
|
||||
|
||||
buf[offset] = reasonlength;
|
||||
memcpy((buf+offset+1),reasondata,(size_t)reasonlength);
|
||||
for (size_t i = 0 ; i < zerobytes ; i++)
|
||||
buf[packsize-1-i] = 0;
|
||||
}
|
||||
|
||||
byepackets.push_back(Buffer(buf,packsize));
|
||||
byesize += packsize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::AddAPPPacket(uint8_t subtype,uint32_t ssrc,const uint8_t name[4],const void *appdata,size_t appdatalen)
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (subtype > 31)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALSUBTYPE;
|
||||
if ((appdatalen%4) != 0)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALAPPDATALENGTH;
|
||||
|
||||
size_t appdatawords = appdatalen/4;
|
||||
|
||||
if ((appdatawords+2) > 65535)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_APPDATALENTOOBIG;
|
||||
|
||||
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2+appdatalen;
|
||||
size_t totalotherbytes = appsize+byesize+sdes.NeededBytes()+report.NeededBytes();
|
||||
|
||||
if ((totalotherbytes + packsize) > maximumpacketsize)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||
|
||||
uint8_t *buf;
|
||||
|
||||
buf = new uint8_t[packsize];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)buf;
|
||||
|
||||
hdr->version = 2;
|
||||
hdr->padding = 0;
|
||||
hdr->count = subtype;
|
||||
|
||||
hdr->length = htons((uint16_t)(appdatawords+2));
|
||||
hdr->packettype = RTP_RTCPTYPE_APP;
|
||||
|
||||
uint32_t *source = (uint32_t *)(buf+sizeof(RTCPCommonHeader));
|
||||
*source = htonl(ssrc);
|
||||
|
||||
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+0] = name[0];
|
||||
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+1] = name[1];
|
||||
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+2] = name[2];
|
||||
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+3] = name[3];
|
||||
|
||||
if (appdatalen > 0)
|
||||
memcpy((buf+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2),appdata,appdatalen);
|
||||
|
||||
apppackets.push_back(Buffer(buf,packsize));
|
||||
appsize += packsize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPCompoundPacketBuilder::EndBuild()
|
||||
{
|
||||
if (!arebuilding)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||
if (report.headerlength == 0)
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOREPORTPRESENT;
|
||||
|
||||
uint8_t *buf;
|
||||
size_t len;
|
||||
|
||||
len = appsize+byesize+report.NeededBytes()+sdes.NeededBytes();
|
||||
|
||||
if (!external)
|
||||
{
|
||||
buf = new uint8_t[len];
|
||||
if (buf == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
else
|
||||
buf = buffer;
|
||||
|
||||
uint8_t *curbuf = buf;
|
||||
RTCPPacket *p;
|
||||
|
||||
// first, we'll add all report info
|
||||
|
||||
{
|
||||
bool firstpacket = true;
|
||||
bool done = false;
|
||||
std::list<Buffer>::const_iterator it = report.reportblocks.begin();
|
||||
do
|
||||
{
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)curbuf;
|
||||
size_t offset;
|
||||
|
||||
hdr->version = 2;
|
||||
hdr->padding = 0;
|
||||
|
||||
if (firstpacket && report.isSR)
|
||||
{
|
||||
hdr->packettype = RTP_RTCPTYPE_SR;
|
||||
memcpy((curbuf+sizeof(RTCPCommonHeader)),report.headerdata,report.headerlength);
|
||||
offset = sizeof(RTCPCommonHeader)+report.headerlength;
|
||||
}
|
||||
else
|
||||
{
|
||||
hdr->packettype = RTP_RTCPTYPE_RR;
|
||||
memcpy((curbuf+sizeof(RTCPCommonHeader)),report.headerdata,sizeof(uint32_t));
|
||||
offset = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||
}
|
||||
firstpacket = false;
|
||||
|
||||
uint8_t count = 0;
|
||||
|
||||
while (it != report.reportblocks.end() && count < 31)
|
||||
{
|
||||
memcpy(curbuf+offset,(*it).packetdata,(*it).packetlength);
|
||||
offset += (*it).packetlength;
|
||||
count++;
|
||||
it++;
|
||||
}
|
||||
|
||||
size_t numwords = offset/sizeof(uint32_t);
|
||||
|
||||
hdr->length = htons((uint16_t)(numwords-1));
|
||||
hdr->count = count;
|
||||
|
||||
// add entry in parent's list
|
||||
if (hdr->packettype == RTP_RTCPTYPE_SR)
|
||||
p = new RTCPSRPacket(curbuf,offset);
|
||||
else
|
||||
p = new RTCPRRPacket(curbuf,offset);
|
||||
if (p == 0)
|
||||
{
|
||||
if (!external)
|
||||
delete [] buf;
|
||||
ClearPacketList();
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
rtcppacklist.push_back(p);
|
||||
|
||||
curbuf += offset;
|
||||
if (it == report.reportblocks.end())
|
||||
done = true;
|
||||
} while (!done);
|
||||
}
|
||||
|
||||
// then, we'll add the sdes info
|
||||
|
||||
if (!sdes.sdessources.empty())
|
||||
{
|
||||
bool done = false;
|
||||
std::list<SDESSource *>::const_iterator sourceit = sdes.sdessources.begin();
|
||||
|
||||
do
|
||||
{
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)curbuf;
|
||||
size_t offset = sizeof(RTCPCommonHeader);
|
||||
|
||||
hdr->version = 2;
|
||||
hdr->padding = 0;
|
||||
hdr->packettype = RTP_RTCPTYPE_SDES;
|
||||
|
||||
uint8_t sourcecount = 0;
|
||||
|
||||
while (sourceit != sdes.sdessources.end() && sourcecount < 31)
|
||||
{
|
||||
uint32_t *ssrc = (uint32_t *)(curbuf+offset);
|
||||
*ssrc = htonl((*sourceit)->ssrc);
|
||||
offset += sizeof(uint32_t);
|
||||
|
||||
std::list<Buffer>::const_iterator itemit,itemend;
|
||||
|
||||
itemit = (*sourceit)->items.begin();
|
||||
itemend = (*sourceit)->items.end();
|
||||
while (itemit != itemend)
|
||||
{
|
||||
memcpy(curbuf+offset,(*itemit).packetdata,(*itemit).packetlength);
|
||||
offset += (*itemit).packetlength;
|
||||
itemit++;
|
||||
}
|
||||
|
||||
curbuf[offset] = 0; // end of item list;
|
||||
offset++;
|
||||
|
||||
size_t r = offset&0x03;
|
||||
if (r != 0) // align to 32 bit boundary
|
||||
{
|
||||
size_t num = 4-r;
|
||||
size_t i;
|
||||
|
||||
for (i = 0 ; i < num ; i++)
|
||||
curbuf[offset+i] = 0;
|
||||
offset += num;
|
||||
}
|
||||
|
||||
sourceit++;
|
||||
sourcecount++;
|
||||
}
|
||||
|
||||
size_t numwords = offset/4;
|
||||
|
||||
hdr->count = sourcecount;
|
||||
hdr->length = htons((uint16_t)(numwords-1));
|
||||
|
||||
p = new RTCPSDESPacket(curbuf,offset);
|
||||
if (p == 0)
|
||||
{
|
||||
if (!external)
|
||||
delete [] buf;
|
||||
ClearPacketList();
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
rtcppacklist.push_back(p);
|
||||
|
||||
curbuf += offset;
|
||||
if (sourceit == sdes.sdessources.end())
|
||||
done = true;
|
||||
} while (!done);
|
||||
}
|
||||
|
||||
// adding the app data
|
||||
|
||||
{
|
||||
std::list<Buffer>::const_iterator it;
|
||||
|
||||
for (it = apppackets.begin() ; it != apppackets.end() ; it++)
|
||||
{
|
||||
memcpy(curbuf,(*it).packetdata,(*it).packetlength);
|
||||
|
||||
p = new RTCPAPPPacket(curbuf,(*it).packetlength);
|
||||
if (p == 0)
|
||||
{
|
||||
if (!external)
|
||||
delete [] buf;
|
||||
ClearPacketList();
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
rtcppacklist.push_back(p);
|
||||
|
||||
curbuf += (*it).packetlength;
|
||||
}
|
||||
}
|
||||
|
||||
// adding bye packets
|
||||
|
||||
{
|
||||
std::list<Buffer>::const_iterator it;
|
||||
|
||||
for (it = byepackets.begin() ; it != byepackets.end() ; it++)
|
||||
{
|
||||
memcpy(curbuf,(*it).packetdata,(*it).packetlength);
|
||||
|
||||
p = new RTCPBYEPacket(curbuf,(*it).packetlength);
|
||||
if (p == 0)
|
||||
{
|
||||
if (!external)
|
||||
delete [] buf;
|
||||
ClearPacketList();
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
rtcppacklist.push_back(p);
|
||||
|
||||
curbuf += (*it).packetlength;
|
||||
}
|
||||
}
|
||||
|
||||
compoundpacket = buf;
|
||||
compoundpacketlength = len;
|
||||
arebuilding = false;
|
||||
ClearBuildBuffers();
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,317 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPCOMPOUNDPACKETBUILDER_H
|
||||
|
||||
#define RTCPCOMPOUNDPACKETBUILDER_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcpcompoundpacket.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include "rtcpsdespacket.h"
|
||||
#include "rtperrors.h"
|
||||
#include <list>
|
||||
|
||||
class RTCPCompoundPacketBuilder : public RTCPCompoundPacket
|
||||
{
|
||||
public:
|
||||
RTCPCompoundPacketBuilder();
|
||||
~RTCPCompoundPacketBuilder();
|
||||
|
||||
int InitBuild(size_t maxpacketsize);
|
||||
int InitBuild(void *externalbuffer,size_t buffersize);
|
||||
|
||||
int StartSenderReport(uint32_t senderssrc,const RTPNTPTime &ntptimestamp,uint32_t rtptimestamp,
|
||||
uint32_t packetcount,uint32_t octetcount);
|
||||
int StartReceiverReport(uint32_t senderssrc);
|
||||
int AddReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t packetslost,uint32_t exthighestseq,
|
||||
uint32_t jitter,uint32_t lsr,uint32_t dlsr);
|
||||
|
||||
int AddSDESSource(uint32_t ssrc);
|
||||
int AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,uint8_t itemlength);
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
int AddSDESPrivateItem(const void *prefixdata,uint8_t prefixlength,const void *valuedata,
|
||||
uint8_t valuelength);
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
int AddBYEPacket(uint32_t *ssrcs,uint8_t numssrcs,const void *reasondata,uint8_t reasonlength);
|
||||
|
||||
// note: appdatalen must be a multiple of 4 (32 bits) !
|
||||
int AddAPPPacket(uint8_t subtype,uint32_t ssrc,const uint8_t name[4],const void *appdata,size_t appdatalen);
|
||||
|
||||
int EndBuild();
|
||||
private:
|
||||
class Buffer
|
||||
{
|
||||
public:
|
||||
Buffer():packetdata(0),packetlength(0) { }
|
||||
Buffer(uint8_t *data,size_t len):packetdata(data),packetlength(len) { }
|
||||
|
||||
uint8_t *packetdata;
|
||||
size_t packetlength;
|
||||
};
|
||||
|
||||
class Report
|
||||
{
|
||||
public:
|
||||
Report() { headerdata = (uint8_t *)headerdata32; isSR = false; headerlength = 0; }
|
||||
~Report() { Clear(); }
|
||||
|
||||
void Clear()
|
||||
{
|
||||
std::list<Buffer>::const_iterator it;
|
||||
for (it = reportblocks.begin() ; it != reportblocks.end() ; it++)
|
||||
if ((*it).packetdata)
|
||||
delete [] (*it).packetdata;
|
||||
reportblocks.clear();
|
||||
isSR = false;
|
||||
headerlength = 0;
|
||||
}
|
||||
|
||||
size_t NeededBytes()
|
||||
{
|
||||
size_t x,n,d,r;
|
||||
n = reportblocks.size();
|
||||
if (n == 0)
|
||||
{
|
||||
if (headerlength == 0)
|
||||
return 0;
|
||||
x = sizeof(RTCPCommonHeader)+headerlength;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = n*sizeof(RTCPReceiverReport);
|
||||
d = n/31; // max 31 reportblocks per report
|
||||
r = n%31;
|
||||
if (r != 0)
|
||||
d++;
|
||||
x += d*(sizeof(RTCPCommonHeader)+sizeof(uint32_t)); /* header and SSRC */
|
||||
if (isSR)
|
||||
x += sizeof(RTCPSenderReport);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
size_t NeededBytesWithExtraReportBlock()
|
||||
{
|
||||
size_t x,n,d,r;
|
||||
n = reportblocks.size() + 1; // +1 for the extra block
|
||||
x = n*sizeof(RTCPReceiverReport);
|
||||
d = n/31; // max 31 reportblocks per report
|
||||
r = n%31;
|
||||
if (r != 0)
|
||||
d++;
|
||||
x += d*(sizeof(RTCPCommonHeader)+sizeof(uint32_t)); /* header and SSRC */
|
||||
if (isSR)
|
||||
x += sizeof(RTCPSenderReport);
|
||||
return x;
|
||||
}
|
||||
|
||||
bool isSR;
|
||||
|
||||
uint8_t *headerdata;
|
||||
uint32_t headerdata32[(sizeof(uint32_t)+sizeof(RTCPSenderReport))/sizeof(uint32_t)]; // either for ssrc and sender info or just ssrc
|
||||
size_t headerlength;
|
||||
std::list<Buffer> reportblocks;
|
||||
};
|
||||
|
||||
class SDESSource
|
||||
{
|
||||
public:
|
||||
SDESSource(uint32_t s) : ssrc(s),totalitemsize(0) { }
|
||||
~SDESSource()
|
||||
{
|
||||
std::list<Buffer>::const_iterator it;
|
||||
for (it = items.begin() ; it != items.end() ; it++)
|
||||
if ((*it).packetdata)
|
||||
delete [] (*it).packetdata;
|
||||
items.clear();
|
||||
}
|
||||
|
||||
size_t NeededBytes()
|
||||
{
|
||||
size_t x,r;
|
||||
x = totalitemsize + 1; // +1 for the 0 byte which terminates the item list
|
||||
r = x%sizeof(uint32_t);
|
||||
if (r != 0)
|
||||
x += (sizeof(uint32_t)-r); // make sure it ends on a 32 bit boundary
|
||||
x += sizeof(uint32_t); // for ssrc
|
||||
return x;
|
||||
}
|
||||
|
||||
size_t NeededBytesWithExtraItem(uint8_t itemdatalength)
|
||||
{
|
||||
size_t x,r;
|
||||
x = totalitemsize + sizeof(RTCPSDESHeader) + (size_t)itemdatalength + 1;
|
||||
r = x%sizeof(uint32_t);
|
||||
if (r != 0)
|
||||
x += (sizeof(uint32_t)-r); // make sure it ends on a 32 bit boundary
|
||||
x += sizeof(uint32_t); // for ssrc
|
||||
return x;
|
||||
}
|
||||
|
||||
void AddItem(uint8_t *buf,size_t len)
|
||||
{
|
||||
Buffer b(buf,len);
|
||||
totalitemsize += len;
|
||||
items.push_back(b);
|
||||
}
|
||||
|
||||
uint32_t ssrc;
|
||||
std::list<Buffer> items;
|
||||
private:
|
||||
size_t totalitemsize;
|
||||
};
|
||||
|
||||
class SDES
|
||||
{
|
||||
public:
|
||||
SDES() { sdesit = sdessources.end(); }
|
||||
~SDES() { Clear(); }
|
||||
|
||||
void Clear()
|
||||
{
|
||||
std::list<SDESSource *>::const_iterator it;
|
||||
|
||||
for (it = sdessources.begin() ; it != sdessources.end() ; it++)
|
||||
delete (*it);
|
||||
sdessources.clear();
|
||||
}
|
||||
|
||||
int AddSSRC(uint32_t ssrc)
|
||||
{
|
||||
SDESSource *s = new SDESSource(ssrc);
|
||||
if (s == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
sdessources.push_back(s);
|
||||
sdesit = sdessources.end();
|
||||
sdesit--;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int AddItem(uint8_t *buf,size_t len)
|
||||
{
|
||||
if (sdessources.empty())
|
||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
||||
(*sdesit)->AddItem(buf,len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t NeededBytes()
|
||||
{
|
||||
std::list<SDESSource *>::const_iterator it;
|
||||
size_t x = 0;
|
||||
size_t n,d,r;
|
||||
|
||||
if (sdessources.empty())
|
||||
return 0;
|
||||
|
||||
for (it = sdessources.begin() ; it != sdessources.end() ; it++)
|
||||
x += (*it)->NeededBytes();
|
||||
n = sdessources.size();
|
||||
d = n/31;
|
||||
r = n%31;
|
||||
if (r != 0)
|
||||
d++;
|
||||
x += d*sizeof(RTCPCommonHeader);
|
||||
return x;
|
||||
}
|
||||
|
||||
size_t NeededBytesWithExtraItem(uint8_t itemdatalength)
|
||||
{
|
||||
std::list<SDESSource *>::const_iterator it;
|
||||
size_t x = 0;
|
||||
size_t n,d,r;
|
||||
|
||||
if (sdessources.empty())
|
||||
return 0;
|
||||
|
||||
for (it = sdessources.begin() ; it != sdesit ; it++)
|
||||
x += (*it)->NeededBytes();
|
||||
x += (*sdesit)->NeededBytesWithExtraItem(itemdatalength);
|
||||
n = sdessources.size();
|
||||
d = n/31;
|
||||
r = n%31;
|
||||
if (r != 0)
|
||||
d++;
|
||||
x += d*sizeof(RTCPCommonHeader);
|
||||
return x;
|
||||
}
|
||||
|
||||
size_t NeededBytesWithExtraSource()
|
||||
{
|
||||
std::list<SDESSource *>::const_iterator it;
|
||||
size_t x = 0;
|
||||
size_t n,d,r;
|
||||
|
||||
if (sdessources.empty())
|
||||
return 0;
|
||||
|
||||
for (it = sdessources.begin() ; it != sdessources.end() ; it++)
|
||||
x += (*it)->NeededBytes();
|
||||
|
||||
// for the extra source we'll need at least 8 bytes (ssrc and four 0 bytes)
|
||||
x += sizeof(uint32_t)*2;
|
||||
|
||||
n = sdessources.size() + 1; // also, the number of sources will increase
|
||||
d = n/31;
|
||||
r = n%31;
|
||||
if (r != 0)
|
||||
d++;
|
||||
x += d*sizeof(RTCPCommonHeader);
|
||||
return x;
|
||||
}
|
||||
|
||||
std::list<SDESSource *> sdessources;
|
||||
private:
|
||||
std::list<SDESSource *>::const_iterator sdesit;
|
||||
};
|
||||
|
||||
size_t maximumpacketsize;
|
||||
uint8_t *buffer;
|
||||
bool external;
|
||||
bool arebuilding;
|
||||
|
||||
Report report;
|
||||
SDES sdes;
|
||||
|
||||
std::list<Buffer> byepackets;
|
||||
size_t byesize;
|
||||
|
||||
std::list<Buffer> apppackets;
|
||||
size_t appsize;
|
||||
|
||||
void ClearBuildBuffers();
|
||||
};
|
||||
|
||||
#endif // RTCPCOMPOUNDPACKETBUILDER_H
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcppacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
|
||||
void RTCPPacket::Dump()
|
||||
{
|
||||
switch(packettype)
|
||||
{
|
||||
case SR:
|
||||
std::cout << "RTCP Sender Report ";
|
||||
break;
|
||||
case RR:
|
||||
std::cout << "RTCP Receiver Report ";
|
||||
break;
|
||||
case SDES:
|
||||
std::cout << "RTCP Source Description ";
|
||||
break;
|
||||
case APP:
|
||||
std::cout << "RTCP APP Packet ";
|
||||
break;
|
||||
case BYE:
|
||||
std::cout << "RTCP Bye Packet ";
|
||||
break;
|
||||
case Unknown:
|
||||
std::cout << "Unknown RTCP Packet ";
|
||||
break;
|
||||
default:
|
||||
std::cout << "ERROR: Invalid packet type!" << std::endl;
|
||||
}
|
||||
std::cout << "Length: " << datalen;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
#endif // RTPDEBUG
|
@ -1,69 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPPACKET_H
|
||||
|
||||
#define RTCPPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtptypes.h"
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPPacket
|
||||
{
|
||||
public:
|
||||
enum PacketType { SR,RR,SDES,BYE,APP,Unknown };
|
||||
protected:
|
||||
RTCPPacket(PacketType t,uint8_t *d,size_t dlen) : data(d),datalen(dlen),packettype(t) { knownformat = false; }
|
||||
public:
|
||||
virtual ~RTCPPacket() { }
|
||||
|
||||
bool IsKnownFormat() const { return knownformat; }
|
||||
|
||||
PacketType GetPacketType() const { return packettype; }
|
||||
uint8_t *GetPacketData() { return data; }
|
||||
size_t GetPacketLength() const { return datalen; }
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
virtual void Dump();
|
||||
#endif // RTPDEBUG
|
||||
protected:
|
||||
uint8_t *data;
|
||||
size_t datalen;
|
||||
bool knownformat;
|
||||
private:
|
||||
const PacketType packettype;
|
||||
};
|
||||
|
||||
#endif // RTCPPACKET_H
|
||||
|
@ -1,735 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcppacketbuilder.h"
|
||||
#include "rtpsources.h"
|
||||
#include "rtppacketbuilder.h"
|
||||
#include "rtcpscheduler.h"
|
||||
#include "rtpsourcedata.h"
|
||||
#include "rtcpcompoundpacketbuilder.h"
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPPacketBuilder::RTCPPacketBuilder(RTPSources &s,RTPPacketBuilder &pb)
|
||||
: sources(s),rtppacketbuilder(pb),prevbuildtime(0,0),transmissiondelay(0,0)
|
||||
{
|
||||
init = false;
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
timeinit.Dummy();
|
||||
#endif // WIN32 || _WIN32_WCE
|
||||
}
|
||||
|
||||
RTCPPacketBuilder::~RTCPPacketBuilder()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
int RTCPPacketBuilder::Init(size_t maxpacksize,double tsunit,const void *cname,size_t cnamelen)
|
||||
{
|
||||
if (init)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_ALREADYINIT;
|
||||
if (maxpacksize < RTP_MINPACKETSIZE)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE;
|
||||
if (tsunit < 0.0)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT;
|
||||
|
||||
if (cnamelen>255)
|
||||
cnamelen = 255;
|
||||
|
||||
maxpacketsize = maxpacksize;
|
||||
timestampunit = tsunit;
|
||||
|
||||
int status;
|
||||
|
||||
if ((status = ownsdesinfo.SetCNAME((const uint8_t *)cname,cnamelen)) < 0)
|
||||
return status;
|
||||
|
||||
ClearAllSourceFlags();
|
||||
|
||||
interval_name = -1;
|
||||
interval_email = -1;
|
||||
interval_location = -1;
|
||||
interval_phone = -1;
|
||||
interval_tool = -1;
|
||||
interval_note = -1;
|
||||
|
||||
sdesbuildcount = 0;
|
||||
transmissiondelay = RTPTime(0,0);
|
||||
|
||||
firstpacket = true;
|
||||
processingsdes = false;
|
||||
init = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RTCPPacketBuilder::Destroy()
|
||||
{
|
||||
if (!init)
|
||||
return;
|
||||
ownsdesinfo.Clear();
|
||||
init = false;
|
||||
}
|
||||
|
||||
int RTCPPacketBuilder::BuildNextPacket(RTCPCompoundPacket **pack)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_NOTINIT;
|
||||
|
||||
RTCPCompoundPacketBuilder *rtcpcomppack;
|
||||
int status;
|
||||
bool sender = false;
|
||||
RTPSourceData *srcdat;
|
||||
|
||||
*pack = 0;
|
||||
|
||||
rtcpcomppack = new RTCPCompoundPacketBuilder();
|
||||
if (rtcpcomppack == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
if ((status = rtcpcomppack->InitBuild(maxpacketsize)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
if ((srcdat = sources.GetOwnSourceInfo()) != 0)
|
||||
{
|
||||
if (srcdat->IsSender())
|
||||
sender = true;
|
||||
}
|
||||
|
||||
uint32_t ssrc = rtppacketbuilder.GetSSRC();
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
|
||||
if (sender)
|
||||
{
|
||||
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
||||
uint32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
||||
uint32_t packcount = rtppacketbuilder.GetPacketCount();
|
||||
uint32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
||||
RTPTime diff = curtime;
|
||||
diff -= rtppacktime;
|
||||
diff += transmissiondelay; // the sample being sampled at this very instant will need a larger timestamp
|
||||
|
||||
uint32_t tsdiff = (uint32_t)((diff.GetDouble()/timestampunit)+0.5);
|
||||
uint32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
||||
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
||||
|
||||
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((status = rtcpcomppack->StartReceiverReport(ssrc)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *owncname;
|
||||
size_t owncnamelen;
|
||||
|
||||
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
||||
|
||||
if ((status = rtcpcomppack->AddSDESSource(ssrc)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::CNAME,owncname,owncnamelen)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (!processingsdes)
|
||||
{
|
||||
int added,skipped;
|
||||
bool full,atendoflist;
|
||||
|
||||
if ((status = FillInReportBlocks(rtcpcomppack,curtime,sources.GetTotalCount(),&full,&added,&skipped,&atendoflist)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (full && added == 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
}
|
||||
|
||||
if (!full)
|
||||
{
|
||||
processingsdes = true;
|
||||
sdesbuildcount++;
|
||||
|
||||
ClearAllSourceFlags();
|
||||
|
||||
doname = false;
|
||||
doemail = false;
|
||||
doloc = false;
|
||||
dophone = false;
|
||||
dotool = false;
|
||||
donote = false;
|
||||
if (interval_name > 0 && ((sdesbuildcount%interval_name) == 0)) doname = true;
|
||||
if (interval_email > 0 && ((sdesbuildcount%interval_email) == 0)) doemail = true;
|
||||
if (interval_location > 0 && ((sdesbuildcount%interval_location) == 0)) doloc = true;
|
||||
if (interval_phone > 0 && ((sdesbuildcount%interval_phone) == 0)) dophone = true;
|
||||
if (interval_tool > 0 && ((sdesbuildcount%interval_tool) == 0)) dotool = true;
|
||||
if (interval_note > 0 && ((sdesbuildcount%interval_note) == 0)) donote = true;
|
||||
|
||||
bool processedall;
|
||||
int itemcount;
|
||||
|
||||
if ((status = FillInSDES(rtcpcomppack,&full,&processedall,&itemcount)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (processedall)
|
||||
{
|
||||
processingsdes = false;
|
||||
ClearAllSDESFlags();
|
||||
if (!full && skipped > 0)
|
||||
{
|
||||
// if the packet isn't full and we skipped some
|
||||
// sources that we already got in a previous packet,
|
||||
// we can add some of them now
|
||||
|
||||
bool atendoflist;
|
||||
|
||||
if ((status = FillInReportBlocks(rtcpcomppack,curtime,skipped,&full,&added,&skipped,&atendoflist)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else // previous sdes processing wasn't finished
|
||||
{
|
||||
bool processedall;
|
||||
int itemcount;
|
||||
bool full;
|
||||
|
||||
if ((status = FillInSDES(rtcpcomppack,&full,&processedall,&itemcount)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (itemcount == 0) // Big problem: packet size is too small to let any progress happen
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
}
|
||||
|
||||
if (processedall)
|
||||
{
|
||||
processingsdes = false;
|
||||
ClearAllSDESFlags();
|
||||
if (!full)
|
||||
{
|
||||
// if the packet isn't full and we skipped some
|
||||
// we can add some report blocks
|
||||
|
||||
int added,skipped;
|
||||
bool atendoflist;
|
||||
|
||||
if ((status = FillInReportBlocks(rtcpcomppack,curtime,sources.GetTotalCount(),&full,&added,&skipped,&atendoflist)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
if (atendoflist) // filled in all possible sources
|
||||
ClearAllSourceFlags();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((status = rtcpcomppack->EndBuild()) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
*pack = rtcpcomppack;
|
||||
firstpacket = false;
|
||||
prevbuildtime = curtime;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RTCPPacketBuilder::ClearAllSourceFlags()
|
||||
{
|
||||
if (sources.GotoFirstSource())
|
||||
{
|
||||
do
|
||||
{
|
||||
RTPSourceData *srcdat = sources.GetCurrentSourceInfo();
|
||||
srcdat->SetProcessedInRTCP(false);
|
||||
} while (sources.GotoNextSource());
|
||||
}
|
||||
}
|
||||
|
||||
int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist)
|
||||
{
|
||||
RTPSourceData *srcdat;
|
||||
int addedcount = 0;
|
||||
int skippedcount = 0;
|
||||
bool done = false;
|
||||
bool filled = false;
|
||||
bool atend = false;
|
||||
int status;
|
||||
|
||||
if (sources.GotoFirstSource())
|
||||
{
|
||||
do
|
||||
{
|
||||
bool shouldprocess = false;
|
||||
|
||||
srcdat = sources.GetCurrentSourceInfo();
|
||||
if (!srcdat->IsOwnSSRC()) // don't send to ourselves
|
||||
{
|
||||
if (!srcdat->IsCSRC()) // p 35: no reports should go to CSRCs
|
||||
{
|
||||
if (srcdat->INF_HasSentData()) // if this isn't true, INF_GetLastRTPPacketTime() won't make any sense
|
||||
{
|
||||
if (firstpacket)
|
||||
shouldprocess = true;
|
||||
else
|
||||
{
|
||||
// p 35: only if rtp packets were received since the last RTP packet, a report block
|
||||
// should be added
|
||||
|
||||
RTPTime lastrtptime = srcdat->INF_GetLastRTPPacketTime();
|
||||
|
||||
if (lastrtptime > prevbuildtime)
|
||||
shouldprocess = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldprocess)
|
||||
{
|
||||
if (srcdat->IsProcessedInRTCP()) // already covered this one
|
||||
{
|
||||
skippedcount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t rr_ssrc = srcdat->GetSSRC();
|
||||
uint32_t num = srcdat->INF_GetNumPacketsReceivedInInterval();
|
||||
uint32_t prevseq = srcdat->INF_GetSavedExtendedSequenceNumber();
|
||||
uint32_t curseq = srcdat->INF_GetExtendedHighestSequenceNumber();
|
||||
uint32_t expected = curseq-prevseq;
|
||||
uint8_t fraclost;
|
||||
|
||||
if (expected < num) // got duplicates
|
||||
fraclost = 0;
|
||||
else
|
||||
{
|
||||
double lost = (double)(expected-num);
|
||||
double frac = lost/((double)expected);
|
||||
fraclost = (uint8_t)(frac*256.0);
|
||||
}
|
||||
|
||||
expected = curseq-srcdat->INF_GetBaseSequenceNumber();
|
||||
num = srcdat->INF_GetNumPacketsReceived();
|
||||
|
||||
uint32_t diff = expected-num;
|
||||
int32_t *packlost = (int32_t *)&diff;
|
||||
|
||||
uint32_t jitter = srcdat->INF_GetJitter();
|
||||
uint32_t lsr;
|
||||
uint32_t dlsr;
|
||||
|
||||
if (!srcdat->SR_HasInfo())
|
||||
{
|
||||
lsr = 0;
|
||||
dlsr = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
RTPNTPTime srtime = srcdat->SR_GetNTPTimestamp();
|
||||
uint32_t m = (srtime.GetMSW()&0xFFFF);
|
||||
uint32_t l = ((srtime.GetLSW()>>16)&0xFFFF);
|
||||
lsr = ((m<<16)|l);
|
||||
|
||||
RTPTime diff = curtime;
|
||||
diff -= srcdat->SR_GetReceiveTime();
|
||||
double diff2 = diff.GetDouble();
|
||||
diff2 *= 65536.0;
|
||||
dlsr = (uint32_t)diff2;
|
||||
}
|
||||
|
||||
status = rtcpcomppack->AddReportBlock(rr_ssrc,fraclost,*packlost,curseq,jitter,lsr,dlsr);
|
||||
if (status < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
done = true;
|
||||
filled = true;
|
||||
}
|
||||
else
|
||||
return status;
|
||||
}
|
||||
else
|
||||
{
|
||||
addedcount++;
|
||||
if (addedcount >= maxcount)
|
||||
{
|
||||
done = true;
|
||||
if (!sources.GotoNextSource())
|
||||
atend = true;
|
||||
}
|
||||
srcdat->INF_StartNewInterval();
|
||||
srcdat->SetProcessedInRTCP(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!done)
|
||||
{
|
||||
if (!sources.GotoNextSource())
|
||||
{
|
||||
atend = true;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
} while (!done);
|
||||
}
|
||||
|
||||
*added = addedcount;
|
||||
*skipped = skippedcount;
|
||||
*full = filled;
|
||||
|
||||
if (!atend) // search for available sources
|
||||
{
|
||||
bool shouldprocess = false;
|
||||
|
||||
do
|
||||
{
|
||||
srcdat = sources.GetCurrentSourceInfo();
|
||||
if (!srcdat->IsOwnSSRC()) // don't send to ourselves
|
||||
{
|
||||
if (!srcdat->IsCSRC()) // p 35: no reports should go to CSRCs
|
||||
{
|
||||
if (srcdat->INF_HasSentData()) // if this isn't true, INF_GetLastRTPPacketTime() won't make any sense
|
||||
{
|
||||
if (firstpacket)
|
||||
shouldprocess = true;
|
||||
else
|
||||
{
|
||||
// p 35: only if rtp packets were received since the last RTP packet, a report block
|
||||
// should be added
|
||||
|
||||
RTPTime lastrtptime = srcdat->INF_GetLastRTPPacketTime();
|
||||
|
||||
if (lastrtptime > prevbuildtime)
|
||||
shouldprocess = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldprocess)
|
||||
{
|
||||
if (srcdat->IsProcessedInRTCP())
|
||||
shouldprocess = false;
|
||||
}
|
||||
|
||||
if (!shouldprocess)
|
||||
{
|
||||
if (!sources.GotoNextSource())
|
||||
atend = true;
|
||||
}
|
||||
|
||||
} while (!atend && !shouldprocess);
|
||||
}
|
||||
|
||||
*atendoflist = atend;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPPacketBuilder::FillInSDES(RTCPCompoundPacketBuilder *rtcpcomppack,bool *full,bool *processedall,int *added)
|
||||
{
|
||||
int status;
|
||||
uint8_t *data;
|
||||
size_t datalen;
|
||||
|
||||
*full = false;
|
||||
*processedall = false;
|
||||
*added = 0;
|
||||
|
||||
// We don't need to add a SSRC for our own data, this is still set
|
||||
// from adding the CNAME
|
||||
if (doname)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedName())
|
||||
{
|
||||
data = ownsdesinfo.GetName(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::NAME,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedName(true);
|
||||
}
|
||||
}
|
||||
if (doemail)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedEMail())
|
||||
{
|
||||
data = ownsdesinfo.GetEMail(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::EMAIL,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedEMail(true);
|
||||
}
|
||||
}
|
||||
if (doloc)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedLocation())
|
||||
{
|
||||
data = ownsdesinfo.GetLocation(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::LOC,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedLocation(true);
|
||||
}
|
||||
}
|
||||
if (dophone)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedPhone())
|
||||
{
|
||||
data = ownsdesinfo.GetPhone(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::PHONE,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedPhone(true);
|
||||
}
|
||||
}
|
||||
if (dotool)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedTool())
|
||||
{
|
||||
data = ownsdesinfo.GetTool(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::TOOL,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedTool(true);
|
||||
}
|
||||
}
|
||||
if (donote)
|
||||
{
|
||||
if (!ownsdesinfo.ProcessedNote())
|
||||
{
|
||||
data = ownsdesinfo.GetNote(&datalen);
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::NOTE,data,datalen)) < 0)
|
||||
{
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
{
|
||||
*full = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
(*added)++;
|
||||
ownsdesinfo.SetProcessedNote(true);
|
||||
}
|
||||
}
|
||||
|
||||
*processedall = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RTCPPacketBuilder::ClearAllSDESFlags()
|
||||
{
|
||||
ownsdesinfo.ClearFlags();
|
||||
}
|
||||
|
||||
int RTCPPacketBuilder::BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_NOTINIT;
|
||||
|
||||
RTCPCompoundPacketBuilder *rtcpcomppack;
|
||||
int status;
|
||||
|
||||
if (reasonlength > 255)
|
||||
reasonlength = 255;
|
||||
|
||||
*pack = 0;
|
||||
|
||||
rtcpcomppack = new RTCPCompoundPacketBuilder();
|
||||
if (rtcpcomppack == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
if ((status = rtcpcomppack->InitBuild(maxpacketsize)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
uint32_t ssrc = rtppacketbuilder.GetSSRC();
|
||||
bool useSR = false;
|
||||
|
||||
if (useSRifpossible)
|
||||
{
|
||||
RTPSourceData *srcdat;
|
||||
|
||||
if ((srcdat = sources.GetOwnSourceInfo()) != 0)
|
||||
{
|
||||
if (srcdat->IsSender())
|
||||
useSR = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (useSR)
|
||||
{
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
||||
uint32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
||||
uint32_t packcount = rtppacketbuilder.GetPacketCount();
|
||||
uint32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
||||
RTPTime diff = curtime;
|
||||
diff -= rtppacktime;
|
||||
|
||||
uint32_t tsdiff = (uint32_t)((diff.GetDouble()/timestampunit)+0.5);
|
||||
uint32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
||||
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
||||
|
||||
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((status = rtcpcomppack->StartReceiverReport(ssrc)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *owncname;
|
||||
size_t owncnamelen;
|
||||
|
||||
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
||||
|
||||
if ((status = rtcpcomppack->AddSDESSource(ssrc)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::CNAME,owncname,owncnamelen)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
|
||||
uint32_t ssrcs[1];
|
||||
|
||||
ssrcs[0] = ssrc;
|
||||
|
||||
if ((status = rtcpcomppack->AddBYEPacket(ssrcs,1,(const uint8_t *)reason,reasonlength)) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||
return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;
|
||||
return status;
|
||||
}
|
||||
|
||||
if ((status = rtcpcomppack->EndBuild()) < 0)
|
||||
{
|
||||
delete rtcpcomppack;
|
||||
return status;
|
||||
}
|
||||
|
||||
*pack = rtcpcomppack;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,123 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPPACKETBUILDER_H
|
||||
|
||||
#define RTCPPACKETBUILDER_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtptypes.h"
|
||||
#include "rtperrors.h"
|
||||
#include "rtcpsdesinfo.h"
|
||||
#include "rtptimeutilities.h"
|
||||
|
||||
class RTPSources;
|
||||
class RTPPacketBuilder;
|
||||
class RTCPScheduler;
|
||||
class RTCPCompoundPacket;
|
||||
class RTCPCompoundPacketBuilder;
|
||||
|
||||
class RTCPPacketBuilder
|
||||
{
|
||||
public:
|
||||
RTCPPacketBuilder(RTPSources &sources,RTPPacketBuilder &rtppackbuilder);
|
||||
~RTCPPacketBuilder();
|
||||
|
||||
int Init(size_t maxpacksize,double timestampunit,const void *cname,size_t cnamelen);
|
||||
void Destroy();
|
||||
|
||||
int SetTimestampUnit(double tsunit) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (tsunit < 0) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT; timestampunit = tsunit; return 0; }
|
||||
int SetMaximumPacketSize(size_t maxpacksize) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (maxpacksize < RTP_MINPACKETSIZE) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE; maxpacketsize = maxpacksize; return 0; }
|
||||
int SetPreTransmissionDelay(const RTPTime &delay) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; transmissiondelay = delay; return 0; }
|
||||
|
||||
int BuildNextPacket(RTCPCompoundPacket **pack);
|
||||
int BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible = true);
|
||||
|
||||
void SetNameInterval(int count) { if (!init) return; interval_name = count; }
|
||||
void SetEMailInterval(int count) { if (!init) return; interval_email = count; }
|
||||
void SetLocationInterval(int count) { if (!init) return; interval_location = count; }
|
||||
void SetPhoneInterval(int count) { if (!init) return; interval_phone = count; }
|
||||
void SetToolInterval(int count) { if (!init) return; interval_tool = count; }
|
||||
void SetNoteInterval(int count) { if (!init) return; interval_note = count; }
|
||||
int SetLocalName(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetName((const uint8_t *)s,len); }
|
||||
int SetLocalEMail(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetEMail((const uint8_t *)s,len); }
|
||||
int SetLocalLocation(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetLocation((const uint8_t *)s,len); }
|
||||
int SetLocalPhone(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetPhone((const uint8_t *)s,len); }
|
||||
int SetLocalTool(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetTool((const uint8_t *)s,len); }
|
||||
int SetLocalNote(const void *s,size_t len) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; return ownsdesinfo.SetNote((const uint8_t *)s,len); }
|
||||
private:
|
||||
void ClearAllSourceFlags();
|
||||
int FillInReportBlocks(RTCPCompoundPacketBuilder *pack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist);
|
||||
int FillInSDES(RTCPCompoundPacketBuilder *pack,bool *full,bool *processedall,int *added);
|
||||
void ClearAllSDESFlags();
|
||||
|
||||
RTPSources &sources;
|
||||
RTPPacketBuilder &rtppacketbuilder;
|
||||
|
||||
bool init;
|
||||
size_t maxpacketsize;
|
||||
double timestampunit;
|
||||
bool firstpacket;
|
||||
RTPTime prevbuildtime,transmissiondelay;
|
||||
|
||||
class RTCPSDESInfoInternal : public RTCPSDESInfo
|
||||
{
|
||||
public:
|
||||
RTCPSDESInfoInternal() { ClearFlags(); }
|
||||
void ClearFlags() { pname = false; pemail = false; plocation = false; pphone = false; ptool = false; pnote = false; }
|
||||
bool ProcessedName() const { return pname; }
|
||||
bool ProcessedEMail() const { return pemail; }
|
||||
bool ProcessedLocation() const { return plocation; }
|
||||
bool ProcessedPhone() const { return pphone; }
|
||||
bool ProcessedTool() const { return ptool; }
|
||||
bool ProcessedNote() const { return pnote; }
|
||||
void SetProcessedName(bool v) { pname = v; }
|
||||
void SetProcessedEMail(bool v) { pemail = v; }
|
||||
void SetProcessedLocation(bool v) { plocation = v; }
|
||||
void SetProcessedPhone(bool v) { pphone = v; }
|
||||
void SetProcessedTool(bool v) { ptool = v; }
|
||||
void SetProcessedNote(bool v) { pnote = v; }
|
||||
private:
|
||||
bool pname,pemail,plocation,pphone,ptool,pnote;
|
||||
};
|
||||
|
||||
RTCPSDESInfoInternal ownsdesinfo;
|
||||
int interval_name,interval_email,interval_location;
|
||||
int interval_phone,interval_tool,interval_note;
|
||||
bool doname,doemail,doloc,dophone,dotool,donote;
|
||||
bool processingsdes;
|
||||
|
||||
int sdesbuildcount;
|
||||
};
|
||||
|
||||
#endif // RTCPPACKETBUILDER_H
|
||||
|
@ -1,94 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcprrpacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPRRPacket::RTCPRRPacket(uint8_t *data,size_t datalength)
|
||||
: RTCPPacket(RR,data,datalength)
|
||||
{
|
||||
knownformat = false;
|
||||
|
||||
RTCPCommonHeader *hdr;
|
||||
size_t len = datalength;
|
||||
size_t expectedlength;
|
||||
|
||||
hdr = (RTCPCommonHeader *)data;
|
||||
if (hdr->padding)
|
||||
{
|
||||
uint8_t padcount = data[datalength-1];
|
||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||
return;
|
||||
if (((size_t)padcount) >= len)
|
||||
return;
|
||||
len -= (size_t)padcount;
|
||||
}
|
||||
|
||||
expectedlength = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
||||
|
||||
if (expectedlength != len)
|
||||
return;
|
||||
|
||||
knownformat = true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPRRPacket::Dump()
|
||||
{
|
||||
RTCPPacket::Dump();
|
||||
if (!IsKnownFormat())
|
||||
std::cout << " Unknown format" << std::endl;
|
||||
else
|
||||
{
|
||||
int num = GetReceptionReportCount();
|
||||
int i;
|
||||
|
||||
std::cout << " SSRC of sender: " << GetSenderSSRC() << std::endl;
|
||||
for (i = 0 ; i < num ; i++)
|
||||
{
|
||||
std::cout << " Report block " << i << std::endl;
|
||||
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
||||
std::cout << " Fraction lost: " << (uint32_t)GetFractionLost(i) << std::endl;
|
||||
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
||||
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
||||
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
||||
std::cout << " LSR: " << GetLSR(i) << std::endl;
|
||||
std::cout << " DLSR: " << GetDLSR(i) << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
@ -1,158 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPRRPACKET_H
|
||||
|
||||
#define RTCPRRPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtpstructs.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPRRPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
RTCPRRPacket(uint8_t *data,size_t datalen);
|
||||
~RTCPRRPacket() { }
|
||||
|
||||
// Sender info
|
||||
|
||||
uint32_t GetSenderSSRC() const;
|
||||
|
||||
// Reportblocks
|
||||
|
||||
int GetReceptionReportCount() const;
|
||||
// Note: the validity of index is NOT checked!
|
||||
uint32_t GetSSRC(int index) const;
|
||||
uint8_t GetFractionLost(int index) const;
|
||||
int32_t GetLostPacketCount(int index) const;
|
||||
uint32_t GetExtendedHighestSequenceNumber(int index) const;
|
||||
uint32_t GetJitter(int index) const;
|
||||
uint32_t GetLSR(int index) const;
|
||||
uint32_t GetDLSR(int index) const;
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
RTCPReceiverReport *GotoReport(int index) const;
|
||||
};
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetSenderSSRC() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
|
||||
uint32_t *ssrcptr = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||
return ntohl(*ssrcptr);
|
||||
}
|
||||
inline int RTCPRRPacket::GetReceptionReportCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
return ((int)hdr->count);
|
||||
}
|
||||
|
||||
inline RTCPReceiverReport *RTCPRRPacket::GotoReport(int index) const
|
||||
{
|
||||
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)+index*sizeof(RTCPReceiverReport));
|
||||
return r;
|
||||
}
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetSSRC(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->ssrc);
|
||||
}
|
||||
|
||||
inline uint8_t RTCPRRPacket::GetFractionLost(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return r->fractionlost;
|
||||
}
|
||||
|
||||
inline int32_t RTCPRRPacket::GetLostPacketCount(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
uint32_t count = ((uint32_t)r->packetslost[2])|(((uint32_t)r->packetslost[1])<<8)|(((uint32_t)r->packetslost[0])<<16);
|
||||
if ((count&0x00800000) != 0) // test for negative number
|
||||
count |= 0xFF000000;
|
||||
int32_t *count2 = (int32_t *)(&count);
|
||||
return (*count2);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetExtendedHighestSequenceNumber(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->exthighseqnr);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetJitter(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->jitter);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetLSR(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->lsr);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPRRPacket::GetDLSR(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->dlsr);
|
||||
}
|
||||
|
||||
#endif // RTCPRRPACKET_H
|
||||
|
@ -1,416 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpscheduler.h"
|
||||
#include "rtpsources.h"
|
||||
#include "rtpdefines.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtppacket.h"
|
||||
#include "rtcpcompoundpacket.h"
|
||||
#include "rtpsourcedata.h"
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
#define RTCPSCHED_MININTERVAL 1.0
|
||||
|
||||
RTCPSchedulerParams::RTCPSchedulerParams() : mininterval(RTCP_DEFAULTMININTERVAL)
|
||||
{
|
||||
bandwidth = 1000; // TODO What is a good value here?
|
||||
senderfraction = RTCP_DEFAULTSENDERFRACTION;
|
||||
usehalfatstartup = RTCP_DEFAULTHALFATSTARTUP;
|
||||
immediatebye = RTCP_DEFAULTIMMEDIATEBYE;
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
timeinit.Dummy();
|
||||
#endif // WIN32 || _WIN32_WCE
|
||||
}
|
||||
|
||||
RTCPSchedulerParams::~RTCPSchedulerParams()
|
||||
{
|
||||
}
|
||||
|
||||
int RTCPSchedulerParams::SetRTCPBandwidth(double bw)
|
||||
{
|
||||
if (bw < 0.0)
|
||||
return ERR_RTP_SCHEDPARAMS_INVALIDBANDWIDTH;
|
||||
bandwidth = bw;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPSchedulerParams::SetSenderBandwidthFraction(double fraction)
|
||||
{
|
||||
if (fraction < 0.0 || fraction > 1.0)
|
||||
return ERR_RTP_SCHEDPARAMS_BADFRACTION;
|
||||
senderfraction = fraction;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTCPSchedulerParams::SetMinimumTransmissionInterval(const RTPTime &t)
|
||||
{
|
||||
double t2 = t.GetDouble();
|
||||
|
||||
if (t2 < RTCPSCHED_MININTERVAL)
|
||||
return ERR_RTP_SCHEDPARAMS_BADMINIMUMINTERVAL;
|
||||
|
||||
mininterval = t;
|
||||
return 0;
|
||||
}
|
||||
|
||||
RTCPScheduler::RTCPScheduler(RTPSources &s) : sources(s),nextrtcptime(0,0),prevrtcptime(0,0)
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
RTCPScheduler::~RTCPScheduler()
|
||||
{
|
||||
}
|
||||
|
||||
void RTCPScheduler::Reset()
|
||||
{
|
||||
headeroverhead = 0; // user has to set this to an appropriate value
|
||||
hassentrtcp = false;
|
||||
firstcall = true;
|
||||
avgrtcppacksize = 1000; // TODO: what is a good value for this?
|
||||
byescheduled = false;
|
||||
sendbyenow = false;
|
||||
}
|
||||
|
||||
void RTCPScheduler::AnalyseIncoming(RTCPCompoundPacket &rtcpcomppack)
|
||||
{
|
||||
bool isbye = false;
|
||||
RTCPPacket *p;
|
||||
|
||||
rtcpcomppack.GotoFirstPacket();
|
||||
while (!isbye && ((p = rtcpcomppack.GetNextPacket()) != 0))
|
||||
{
|
||||
if (p->GetPacketType() == RTCPPacket::BYE)
|
||||
isbye = true;
|
||||
}
|
||||
|
||||
if (!isbye)
|
||||
{
|
||||
size_t packsize = headeroverhead+rtcpcomppack.GetCompoundPacketLength();
|
||||
avgrtcppacksize = (size_t)((1.0/16.0)*((double)packsize)+(15.0/16.0)*((double)avgrtcppacksize));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (byescheduled)
|
||||
{
|
||||
size_t packsize = headeroverhead+rtcpcomppack.GetCompoundPacketLength();
|
||||
avgbyepacketsize = (size_t)((1.0/16.0)*((double)packsize)+(15.0/16.0)*((double)avgbyepacketsize));
|
||||
byemembers++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RTCPScheduler::AnalyseOutgoing(RTCPCompoundPacket &rtcpcomppack)
|
||||
{
|
||||
bool isbye = false;
|
||||
RTCPPacket *p;
|
||||
|
||||
rtcpcomppack.GotoFirstPacket();
|
||||
while (!isbye && ((p = rtcpcomppack.GetNextPacket()) != 0))
|
||||
{
|
||||
if (p->GetPacketType() == RTCPPacket::BYE)
|
||||
isbye = true;
|
||||
}
|
||||
|
||||
if (!isbye)
|
||||
{
|
||||
size_t packsize = headeroverhead+rtcpcomppack.GetCompoundPacketLength();
|
||||
avgrtcppacksize = (size_t)((1.0/16.0)*((double)packsize)+(15.0/16.0)*((double)avgrtcppacksize));
|
||||
}
|
||||
|
||||
hassentrtcp = true;
|
||||
}
|
||||
|
||||
RTPTime RTCPScheduler::GetTransmissionDelay()
|
||||
{
|
||||
if (firstcall)
|
||||
{
|
||||
firstcall = false;
|
||||
prevrtcptime = RTPTime::CurrentTime();
|
||||
pmembers = sources.GetActiveMemberCount();
|
||||
CalculateNextRTCPTime();
|
||||
}
|
||||
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
|
||||
if (curtime > nextrtcptime) // packet should be sent
|
||||
return RTPTime(0,0);
|
||||
|
||||
RTPTime diff = nextrtcptime;
|
||||
diff -= curtime;
|
||||
|
||||
return diff;
|
||||
}
|
||||
|
||||
bool RTCPScheduler::IsTime()
|
||||
{
|
||||
if (firstcall)
|
||||
{
|
||||
firstcall = false;
|
||||
prevrtcptime = RTPTime::CurrentTime();
|
||||
pmembers = sources.GetActiveMemberCount();
|
||||
CalculateNextRTCPTime();
|
||||
return false;
|
||||
}
|
||||
|
||||
RTPTime currenttime = RTPTime::CurrentTime();
|
||||
|
||||
// // TODO: for debugging
|
||||
// double diff = nextrtcptime.GetDouble() - currenttime.GetDouble();
|
||||
//
|
||||
// std::cout << "Delay till next RTCP interval: " << diff << std::endl;
|
||||
|
||||
if (currenttime < nextrtcptime) // timer has not yet expired
|
||||
return false;
|
||||
|
||||
RTPTime checktime(0,0);
|
||||
|
||||
if (!byescheduled)
|
||||
{
|
||||
bool aresender = false;
|
||||
RTPSourceData *srcdat;
|
||||
|
||||
if ((srcdat = sources.GetOwnSourceInfo()) != 0)
|
||||
aresender = srcdat->IsSender();
|
||||
|
||||
checktime = CalculateTransmissionInterval(aresender);
|
||||
}
|
||||
else
|
||||
checktime = CalculateBYETransmissionInterval();
|
||||
|
||||
// std::cout << "Calculated checktime: " << checktime.GetDouble() << std::endl;
|
||||
|
||||
checktime += prevrtcptime;
|
||||
|
||||
if (checktime <= currenttime) // Okay
|
||||
{
|
||||
byescheduled = false;
|
||||
prevrtcptime = currenttime;
|
||||
pmembers = sources.GetActiveMemberCount();
|
||||
CalculateNextRTCPTime();
|
||||
return true;
|
||||
}
|
||||
|
||||
// std::cout << "New delay: " << nextrtcptime.GetDouble() - currenttime.GetDouble() << std::endl;
|
||||
|
||||
nextrtcptime = checktime;
|
||||
pmembers = sources.GetActiveMemberCount();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void RTCPScheduler::CalculateNextRTCPTime()
|
||||
{
|
||||
bool aresender = false;
|
||||
RTPSourceData *srcdat;
|
||||
|
||||
if ((srcdat = sources.GetOwnSourceInfo()) != 0)
|
||||
aresender = srcdat->IsSender();
|
||||
|
||||
nextrtcptime = RTPTime::CurrentTime();
|
||||
nextrtcptime += CalculateTransmissionInterval(aresender);
|
||||
}
|
||||
|
||||
RTPTime RTCPScheduler::CalculateDeterministicInterval(bool sender /* = false */)
|
||||
{
|
||||
int numsenders = sources.GetSenderCount();
|
||||
int numtotal = sources.GetActiveMemberCount();
|
||||
|
||||
// std::cout << "CalculateDeterministicInterval" << std::endl;
|
||||
// std::cout << " numsenders: " << numsenders << std::endl;
|
||||
// std::cout << " numtotal: " << numtotal << std::endl;
|
||||
|
||||
// Try to avoid division by zero:
|
||||
if (numtotal == 0)
|
||||
numtotal++;
|
||||
|
||||
double sfraction = ((double)numsenders)/((double)numtotal);
|
||||
double C,n;
|
||||
|
||||
if (sfraction <= schedparams.GetSenderBandwidthFraction())
|
||||
{
|
||||
if (sender)
|
||||
{
|
||||
C = ((double)avgrtcppacksize)/(schedparams.GetSenderBandwidthFraction()*schedparams.GetRTCPBandwidth());
|
||||
n = (double)numsenders;
|
||||
}
|
||||
else
|
||||
{
|
||||
C = ((double)avgrtcppacksize)/((1.0-schedparams.GetSenderBandwidthFraction())*schedparams.GetRTCPBandwidth());
|
||||
n = (double)(numtotal-numsenders);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
C = ((double)avgrtcppacksize)/schedparams.GetRTCPBandwidth();
|
||||
n = (double)numtotal;
|
||||
}
|
||||
|
||||
RTPTime Tmin = schedparams.GetMinimumTransmissionInterval();
|
||||
double tmin = Tmin.GetDouble();
|
||||
|
||||
if (!hassentrtcp && schedparams.GetUseHalfAtStartup())
|
||||
tmin /= 2.0;
|
||||
|
||||
double ntimesC = n*C;
|
||||
double Td = (tmin>ntimesC)?tmin:ntimesC;
|
||||
|
||||
// TODO: for debugging
|
||||
// std::cout << " Td: " << Td << std::endl;
|
||||
|
||||
return RTPTime(Td);
|
||||
}
|
||||
|
||||
RTPTime RTCPScheduler::CalculateTransmissionInterval(bool sender)
|
||||
{
|
||||
RTPTime Td = CalculateDeterministicInterval(sender);
|
||||
double td,mul,T;
|
||||
|
||||
// std::cout << "CalculateTransmissionInterval" << std::endl;
|
||||
|
||||
td = Td.GetDouble();
|
||||
mul = rtprand.GetRandomDouble()+0.5; // gives random value between 0.5 and 1.5
|
||||
T = (td*mul)/1.21828; // see RFC 3550 p 30
|
||||
|
||||
// std::cout << " Td: " << td << std::endl;
|
||||
// std::cout << " mul: " << mul << std::endl;
|
||||
// std::cout << " T: " << T << std::endl;
|
||||
|
||||
return RTPTime(T);
|
||||
}
|
||||
|
||||
void RTCPScheduler::PerformReverseReconsideration()
|
||||
{
|
||||
if (firstcall)
|
||||
return;
|
||||
|
||||
double diff1,diff2;
|
||||
int members = sources.GetActiveMemberCount();
|
||||
|
||||
RTPTime tc = RTPTime::CurrentTime();
|
||||
RTPTime tn_min_tc = nextrtcptime;
|
||||
|
||||
if (tn_min_tc > tc)
|
||||
tn_min_tc -= tc;
|
||||
else
|
||||
tn_min_tc = RTPTime(0,0);
|
||||
|
||||
// std::cout << "+tn_min_tc0 " << nextrtcptime.GetDouble()-tc.GetDouble() << std::endl;
|
||||
// std::cout << "-tn_min_tc0 " << -nextrtcptime.GetDouble()+tc.GetDouble() << std::endl;
|
||||
// std::cout << "tn_min_tc " << tn_min_tc.GetDouble() << std::endl;
|
||||
|
||||
RTPTime tc_min_tp = tc;
|
||||
|
||||
if (tc_min_tp > prevrtcptime)
|
||||
tc_min_tp -= prevrtcptime;
|
||||
else
|
||||
tc_min_tp = 0;
|
||||
|
||||
if (pmembers == 0) // avoid division by zero
|
||||
pmembers++;
|
||||
|
||||
diff1 = (((double)members)/((double)pmembers))*tn_min_tc.GetDouble();
|
||||
diff2 = (((double)members)/((double)pmembers))*tc_min_tp.GetDouble();
|
||||
|
||||
nextrtcptime = tc;
|
||||
prevrtcptime = tc;
|
||||
nextrtcptime += RTPTime(diff1);
|
||||
prevrtcptime -= RTPTime(diff2);
|
||||
|
||||
pmembers = members;
|
||||
}
|
||||
|
||||
void RTCPScheduler::ScheduleBYEPacket(size_t packetsize)
|
||||
{
|
||||
if (byescheduled)
|
||||
return;
|
||||
|
||||
if (firstcall)
|
||||
{
|
||||
firstcall = false;
|
||||
pmembers = sources.GetActiveMemberCount();
|
||||
}
|
||||
|
||||
byescheduled = true;
|
||||
avgbyepacketsize = packetsize+headeroverhead;
|
||||
|
||||
// For now, we will always use the BYE backoff algorithm as described in rfc 3550 p 33
|
||||
|
||||
byemembers = 1;
|
||||
pbyemembers = 1;
|
||||
|
||||
if (schedparams.GetRequestImmediateBYE() && sources.GetActiveMemberCount() < 50) // p 34 (top)
|
||||
sendbyenow = true;
|
||||
else
|
||||
sendbyenow = false;
|
||||
|
||||
prevrtcptime = RTPTime::CurrentTime();
|
||||
nextrtcptime = prevrtcptime;
|
||||
nextrtcptime += CalculateBYETransmissionInterval();
|
||||
}
|
||||
|
||||
void RTCPScheduler::ActiveMemberDecrease()
|
||||
{
|
||||
if (sources.GetActiveMemberCount() < pmembers)
|
||||
PerformReverseReconsideration();
|
||||
}
|
||||
|
||||
RTPTime RTCPScheduler::CalculateBYETransmissionInterval()
|
||||
{
|
||||
if (!byescheduled)
|
||||
return RTPTime(0,0);
|
||||
|
||||
if (sendbyenow)
|
||||
return RTPTime(0,0);
|
||||
|
||||
double C,n;
|
||||
|
||||
C = ((double)avgbyepacketsize)/((1.0-schedparams.GetSenderBandwidthFraction())*schedparams.GetRTCPBandwidth());
|
||||
n = (double)byemembers;
|
||||
|
||||
RTPTime Tmin = schedparams.GetMinimumTransmissionInterval();
|
||||
double tmin = Tmin.GetDouble();
|
||||
|
||||
if (schedparams.GetUseHalfAtStartup())
|
||||
tmin /= 2.0;
|
||||
|
||||
double ntimesC = n*C;
|
||||
double Td = (tmin>ntimesC)?tmin:ntimesC;
|
||||
|
||||
double mul = rtprand.GetRandomDouble()+0.5; // gives random value between 0.5 and 1.5
|
||||
double T = (Td*mul)/1.21828; // see RFC 3550 p 30
|
||||
|
||||
return RTPTime(T);
|
||||
}
|
||||
|
@ -1,122 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPSCHEDULER_H
|
||||
|
||||
#define RTCPSCHEDULER_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include "rtprandom.h"
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
class RTPPacket;
|
||||
class RTPSources;
|
||||
|
||||
class RTCPSchedulerParams
|
||||
{
|
||||
public:
|
||||
RTCPSchedulerParams();
|
||||
~RTCPSchedulerParams();
|
||||
int SetRTCPBandwidth(double bw); // bandwidth is in bytes per second
|
||||
double GetRTCPBandwidth() const { return bandwidth; }
|
||||
int SetSenderBandwidthFraction(double fraction);
|
||||
double GetSenderBandwidthFraction() const { return senderfraction; }
|
||||
int SetMinimumTransmissionInterval(const RTPTime &t);
|
||||
RTPTime GetMinimumTransmissionInterval() const { return mininterval; }
|
||||
void SetUseHalfAtStartup(bool usehalf) { usehalfatstartup = usehalf; }
|
||||
bool GetUseHalfAtStartup() const { return usehalfatstartup; }
|
||||
void SetRequestImmediateBYE(bool v) { immediatebye = v; }
|
||||
bool GetRequestImmediateBYE() const { return immediatebye; }
|
||||
private:
|
||||
double bandwidth;
|
||||
double senderfraction;
|
||||
RTPTime mininterval;
|
||||
bool usehalfatstartup;
|
||||
bool immediatebye;
|
||||
};
|
||||
|
||||
class RTCPScheduler
|
||||
{
|
||||
public:
|
||||
RTCPScheduler(RTPSources &sources);
|
||||
~RTCPScheduler();
|
||||
void Reset();
|
||||
|
||||
void SetParameters(const RTCPSchedulerParams ¶ms) { schedparams = params; }
|
||||
RTCPSchedulerParams GetParameters() const { return schedparams; }
|
||||
|
||||
void SetHeaderOverhead(size_t numbytes) { headeroverhead = numbytes; }
|
||||
size_t GetHeaderOverhead() const { return headeroverhead; }
|
||||
|
||||
void AnalyseIncoming(RTCPCompoundPacket &rtcpcomppack);
|
||||
void AnalyseOutgoing(RTCPCompoundPacket &rtcpcomppack);
|
||||
|
||||
// is to be called when a source times out or when a bye packet was received
|
||||
void ActiveMemberDecrease();
|
||||
void ScheduleBYEPacket(size_t packetsize);
|
||||
|
||||
RTPTime GetTransmissionDelay();
|
||||
|
||||
// Returns true is it is time to send a packet and then recalculates the next rtcp time
|
||||
// So, if the function would be called immediately after it returned true, it would then
|
||||
// return false
|
||||
bool IsTime();
|
||||
|
||||
RTPTime CalculateDeterministicInterval(bool sender = false);
|
||||
private:
|
||||
void CalculateNextRTCPTime();
|
||||
void PerformReverseReconsideration();
|
||||
RTPTime CalculateBYETransmissionInterval();
|
||||
RTPTime CalculateTransmissionInterval(bool sender);
|
||||
|
||||
RTPSources &sources;
|
||||
RTCPSchedulerParams schedparams;
|
||||
size_t headeroverhead;
|
||||
size_t avgrtcppacksize;
|
||||
bool hassentrtcp;
|
||||
bool firstcall;
|
||||
RTPTime nextrtcptime;
|
||||
RTPTime prevrtcptime;
|
||||
int pmembers;
|
||||
|
||||
// for BYE packet scheduling
|
||||
bool byescheduled;
|
||||
int byemembers,pbyemembers;
|
||||
size_t avgbyepacketsize;
|
||||
bool sendbyenow;
|
||||
|
||||
RTPRandom rtprand;
|
||||
};
|
||||
|
||||
#endif // RTCPSCHEDULER_H
|
||||
|
@ -1,177 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpsdesinfo.h"
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
void RTCPSDESInfo::Clear()
|
||||
{
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
std::list<SDESPrivateItem *>::const_iterator it;
|
||||
|
||||
for (it = privitems.begin() ; it != privitems.end() ; ++it)
|
||||
delete *it;
|
||||
privitems.clear();
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
}
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
int RTCPSDESInfo::SetPrivateValue(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen)
|
||||
{
|
||||
std::list<SDESPrivateItem *>::const_iterator it;
|
||||
bool found;
|
||||
|
||||
found = false;
|
||||
it = privitems.begin();
|
||||
while (!found && it != privitems.end())
|
||||
{
|
||||
uint8_t *p;
|
||||
size_t l;
|
||||
|
||||
p = (*it)->GetPrefix(&l);
|
||||
if (l == prefixlen)
|
||||
{
|
||||
if (l <= 0)
|
||||
found = true;
|
||||
else if (memcmp(prefix,p,l) == 0)
|
||||
found = true;
|
||||
else
|
||||
++it;
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
|
||||
SDESPrivateItem *item;
|
||||
|
||||
if (found) // replace the value for this entry
|
||||
item = *it;
|
||||
else // no entry for this prefix found... add it
|
||||
{
|
||||
if (privitems.size() >= RTP_MAXPRIVITEMS) // too many items present, just ignore it
|
||||
return ERR_RTP_SDES_MAXPRIVITEMS;
|
||||
|
||||
int status;
|
||||
|
||||
item = new SDESPrivateItem();
|
||||
if (item == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
if ((status = item->SetPrefix(prefix,prefixlen)) < 0)
|
||||
{
|
||||
delete item;
|
||||
return status;
|
||||
}
|
||||
privitems.push_front(item);
|
||||
}
|
||||
return item->SetInfo(value,valuelen);
|
||||
}
|
||||
|
||||
int RTCPSDESInfo::DeletePrivatePrefix(const uint8_t *prefix,size_t prefixlen)
|
||||
{
|
||||
std::list<SDESPrivateItem *>::iterator it;
|
||||
bool found;
|
||||
|
||||
found = false;
|
||||
it = privitems.begin();
|
||||
while (!found && it != privitems.end())
|
||||
{
|
||||
uint8_t *p;
|
||||
size_t l;
|
||||
|
||||
p = (*it)->GetPrefix(&l);
|
||||
if (l == prefixlen)
|
||||
{
|
||||
if (l <= 0)
|
||||
found = true;
|
||||
else if (memcmp(prefix,p,l) == 0)
|
||||
found = true;
|
||||
else
|
||||
++it;
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
if (!found)
|
||||
return ERR_RTP_SDES_PREFIXNOTFOUND;
|
||||
|
||||
delete (*it);
|
||||
privitems.erase(it);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RTCPSDESInfo::GotoFirstPrivateValue()
|
||||
{
|
||||
curitem = privitems.begin();
|
||||
}
|
||||
|
||||
bool RTCPSDESInfo::GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen)
|
||||
{
|
||||
if (curitem == privitems.end())
|
||||
return false;
|
||||
*prefix = (*curitem)->GetPrefix(prefixlen);
|
||||
*value = (*curitem)->GetInfo(valuelen);
|
||||
++curitem;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RTCPSDESInfo::GetPrivateValue(const uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const
|
||||
{
|
||||
std::list<SDESPrivateItem *>::const_iterator it;
|
||||
bool found;
|
||||
|
||||
found = false;
|
||||
it = privitems.begin();
|
||||
while (!found && it != privitems.end())
|
||||
{
|
||||
uint8_t *p;
|
||||
size_t l;
|
||||
|
||||
p = (*it)->GetPrefix(&l);
|
||||
if (l == prefixlen)
|
||||
{
|
||||
if (l <= 0)
|
||||
found = true;
|
||||
else if (memcmp(prefix,p,l) == 0)
|
||||
found = true;
|
||||
else
|
||||
++it;
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
if (found)
|
||||
*value = (*it)->GetInfo(valuelen);
|
||||
return found;
|
||||
}
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
@ -1,138 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPSDESINFO_H
|
||||
|
||||
#define RTCPSDESINFO_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtperrors.h"
|
||||
#include "rtpdefines.h"
|
||||
#include "rtptypes.h"
|
||||
#include <string.h>
|
||||
#include <list>
|
||||
|
||||
class RTCPSDESInfo
|
||||
{
|
||||
public:
|
||||
RTCPSDESInfo() { }
|
||||
virtual ~RTCPSDESInfo() { Clear(); }
|
||||
void Clear();
|
||||
|
||||
int SetCNAME(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_CNAME-1,s,l); }
|
||||
int SetName(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_NAME-1,s,l); }
|
||||
int SetEMail(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,s,l); }
|
||||
int SetPhone(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_PHONE-1,s,l); }
|
||||
int SetLocation(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,s,l); }
|
||||
int SetTool(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_TOOL-1,s,l); }
|
||||
int SetNote(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_NOTE-1,s,l); }
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
int SetPrivateValue(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen);
|
||||
int DeletePrivatePrefix(const uint8_t *s,size_t len);
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
uint8_t *GetCNAME(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_CNAME-1,len); }
|
||||
uint8_t *GetName(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NAME-1,len); }
|
||||
uint8_t *GetEMail(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,len); }
|
||||
uint8_t *GetPhone(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_PHONE-1,len); }
|
||||
uint8_t *GetLocation(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,len); }
|
||||
uint8_t *GetTool(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_TOOL-1,len); }
|
||||
uint8_t *GetNote(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NOTE-1,len); }
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
void GotoFirstPrivateValue();
|
||||
bool GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen);
|
||||
bool GetPrivateValue(const uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const;
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
private:
|
||||
int SetNonPrivateItem(int itemno,const uint8_t *s,size_t l) { if (l > RTCP_SDES_MAXITEMLENGTH) return ERR_RTP_SDES_LENGTHTOOBIG; return nonprivateitems[itemno].SetInfo(s,l); }
|
||||
uint8_t *GetNonPrivateItem(int itemno,size_t *len) const { return nonprivateitems[itemno].GetInfo(len); }
|
||||
|
||||
class SDESItem
|
||||
{
|
||||
public:
|
||||
SDESItem() { str = 0; length = 0; }
|
||||
~SDESItem() { if (str) delete [] str; }
|
||||
uint8_t *GetInfo(size_t *len) const { *len = length; return str; }
|
||||
int SetInfo(const uint8_t *s,size_t len) { return SetString(&str,&length,s,len); }
|
||||
protected:
|
||||
static int SetString(uint8_t **dest,size_t *destlen,const uint8_t *s,size_t len)
|
||||
{
|
||||
if (len <= 0)
|
||||
{
|
||||
if (*dest)
|
||||
delete [] (*dest);
|
||||
*dest = 0;
|
||||
*destlen = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = (len>RTCP_SDES_MAXITEMLENGTH)?RTCP_SDES_MAXITEMLENGTH:len;
|
||||
uint8_t *str2 = new uint8_t[len];
|
||||
if (str2 == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
memcpy(str2,s,len);
|
||||
*destlen = len;
|
||||
if (*dest)
|
||||
delete [] (*dest);
|
||||
*dest = str2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
private:
|
||||
uint8_t *str;
|
||||
size_t length;
|
||||
};
|
||||
|
||||
SDESItem nonprivateitems[RTCP_SDES_NUMITEMS_NONPRIVATE];
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
class SDESPrivateItem : public SDESItem
|
||||
{
|
||||
public:
|
||||
SDESPrivateItem() { prefixlen = 0; prefix = 0; }
|
||||
~SDESPrivateItem() { if (prefix) delete [] prefix; }
|
||||
uint8_t *GetPrefix(size_t *len) const { *len = prefixlen; return prefix; }
|
||||
int SetPrefix(const uint8_t *s,size_t len) { return SetString(&prefix,&prefixlen,s,len); }
|
||||
private:
|
||||
uint8_t *prefix;
|
||||
size_t prefixlen;
|
||||
};
|
||||
|
||||
std::list<SDESPrivateItem *> privitems;
|
||||
std::list<SDESPrivateItem *>::const_iterator curitem;
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
};
|
||||
|
||||
#endif // RTCPSDESINFO_H
|
||||
|
@ -1,230 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpsdespacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPSDESPacket::RTCPSDESPacket(uint8_t *data,size_t datalength)
|
||||
: RTCPPacket(SDES,data,datalength)
|
||||
{
|
||||
knownformat = false;
|
||||
currentchunk = 0;
|
||||
itemoffset = 0;
|
||||
curchunknum = 0;
|
||||
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
size_t len = datalength;
|
||||
|
||||
if (hdr->padding)
|
||||
{
|
||||
uint8_t padcount = data[datalength-1];
|
||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||
return;
|
||||
if (((size_t)padcount) >= len)
|
||||
return;
|
||||
len -= (size_t)padcount;
|
||||
}
|
||||
|
||||
if (hdr->count == 0)
|
||||
{
|
||||
if (len != sizeof(RTCPCommonHeader))
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
int ssrccount = (int)(hdr->count);
|
||||
uint8_t *chunk;
|
||||
int chunkoffset;
|
||||
|
||||
if (len < sizeof(RTCPCommonHeader))
|
||||
return;
|
||||
|
||||
len -= sizeof(RTCPCommonHeader);
|
||||
chunk = data+sizeof(RTCPCommonHeader);
|
||||
|
||||
while ((ssrccount > 0) && (len > 0))
|
||||
{
|
||||
chunkoffset = 0;
|
||||
|
||||
if (len < (sizeof(uint32_t)*2)) // chunk must contain at least a SSRC identifier
|
||||
return; // and a (possibly empty) item
|
||||
|
||||
len -= sizeof(uint32_t);
|
||||
chunkoffset = sizeof(uint32_t);
|
||||
|
||||
bool done = false;
|
||||
while (!done)
|
||||
{
|
||||
if (len < 1) // at least a zero byte (end of item list) should be there
|
||||
return;
|
||||
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(chunk+chunkoffset);
|
||||
if (sdeshdr->sdesid == 0) // end of item list
|
||||
{
|
||||
len--;
|
||||
chunkoffset++;
|
||||
|
||||
size_t r = (chunkoffset&0x03);
|
||||
if (r != 0)
|
||||
{
|
||||
size_t addoffset = 4-r;
|
||||
|
||||
if (addoffset > len)
|
||||
return;
|
||||
len -= addoffset;
|
||||
chunkoffset += addoffset;
|
||||
}
|
||||
done = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (len < sizeof(RTCPSDESHeader))
|
||||
return;
|
||||
|
||||
len -= sizeof(RTCPSDESHeader);
|
||||
chunkoffset += sizeof(RTCPSDESHeader);
|
||||
|
||||
size_t itemlen = (size_t)(sdeshdr->length);
|
||||
if (itemlen > len)
|
||||
return;
|
||||
|
||||
len -= itemlen;
|
||||
chunkoffset += itemlen;
|
||||
}
|
||||
}
|
||||
|
||||
ssrccount--;
|
||||
chunk += chunkoffset;
|
||||
}
|
||||
|
||||
// check for remaining bytes
|
||||
if (len > 0)
|
||||
return;
|
||||
if (ssrccount > 0)
|
||||
return;
|
||||
}
|
||||
|
||||
knownformat = true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPSDESPacket::Dump()
|
||||
{
|
||||
RTCPPacket::Dump();
|
||||
if (!IsKnownFormat())
|
||||
{
|
||||
std::cout << " Unknown format" << std::endl;
|
||||
return;
|
||||
}
|
||||
if (!GotoFirstChunk())
|
||||
{
|
||||
std::cout << " No chunks present" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
std::cout << " SDES Chunk for SSRC: " << GetChunkSSRC() << std::endl;
|
||||
if (!GotoFirstItem())
|
||||
std::cout << " No items found" << std::endl;
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
std::cout << " ";
|
||||
switch (GetItemType())
|
||||
{
|
||||
case None:
|
||||
std::cout << "None ";
|
||||
break;
|
||||
case CNAME:
|
||||
std::cout << "CNAME ";
|
||||
break;
|
||||
case NAME:
|
||||
std::cout << "NAME ";
|
||||
break;
|
||||
case EMAIL:
|
||||
std::cout << "EMAIL ";
|
||||
break;
|
||||
case PHONE:
|
||||
std::cout << "PHONE ";
|
||||
break;
|
||||
case LOC:
|
||||
std::cout << "LOC ";
|
||||
break;
|
||||
case TOOL:
|
||||
std::cout << "TOOL ";
|
||||
break;
|
||||
case NOTE:
|
||||
std::cout << "NOTE ";
|
||||
break;
|
||||
case PRIV:
|
||||
std::cout << "PRIV ";
|
||||
break;
|
||||
case Unknown:
|
||||
default:
|
||||
std::cout << "Unknown ";
|
||||
}
|
||||
|
||||
std::cout << "Length: " << GetItemLength() << std::endl;
|
||||
|
||||
if (GetItemType() != PRIV)
|
||||
{
|
||||
char str[1024];
|
||||
memcpy(str,GetItemData(),GetItemLength());
|
||||
str[GetItemLength()] = 0;
|
||||
std::cout << " Value: " << str << std::endl;
|
||||
}
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
else // PRIV item
|
||||
{
|
||||
char str[1024];
|
||||
memcpy(str,GetPRIVPrefixData(),GetPRIVPrefixLength());
|
||||
str[GetPRIVPrefixLength()] = 0;
|
||||
std::cout << " Prefix: " << str << std::endl;
|
||||
std::cout << " Length: " << GetPRIVPrefixLength() << std::endl;
|
||||
memcpy(str,GetPRIVValueData(),GetPRIVValueLength());
|
||||
str[GetPRIVValueLength()] = 0;
|
||||
std::cout << " Value: " << str << std::endl;
|
||||
std::cout << " Length: " << GetPRIVValueLength() << std::endl;
|
||||
}
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
} while (GotoNextItem());
|
||||
}
|
||||
} while (GotoNextChunk());
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,314 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPSDESPACKET_H
|
||||
|
||||
#define RTCPSDESPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtpstructs.h"
|
||||
#include "rtpdefines.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPSDESPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
enum ItemType { None,CNAME,NAME,EMAIL,PHONE,LOC,TOOL,NOTE,PRIV,Unknown };
|
||||
|
||||
RTCPSDESPacket(uint8_t *data,size_t datalen);
|
||||
~RTCPSDESPacket() { }
|
||||
|
||||
int GetChunkCount() const;
|
||||
|
||||
bool GotoFirstChunk();
|
||||
bool GotoNextChunk();
|
||||
|
||||
uint32_t GetChunkSSRC() const;
|
||||
bool GotoFirstItem();
|
||||
bool GotoNextItem();
|
||||
|
||||
ItemType GetItemType() const;
|
||||
size_t GetItemLength() const;
|
||||
uint8_t *GetItemData();
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
size_t GetPRIVPrefixLength() const;
|
||||
uint8_t *GetPRIVPrefixData();
|
||||
size_t GetPRIVValueLength() const;
|
||||
uint8_t *GetPRIVValueData();
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
uint8_t *currentchunk;
|
||||
int curchunknum;
|
||||
size_t itemoffset;
|
||||
};
|
||||
|
||||
inline int RTCPSDESPacket::GetChunkCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
return ((int)hdr->count);
|
||||
}
|
||||
|
||||
inline bool RTCPSDESPacket::GotoFirstChunk()
|
||||
{
|
||||
if (GetChunkCount() == 0)
|
||||
{
|
||||
currentchunk = 0;
|
||||
return false;
|
||||
}
|
||||
currentchunk = data+sizeof(RTCPCommonHeader);
|
||||
curchunknum = 1;
|
||||
itemoffset = sizeof(uint32_t);
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool RTCPSDESPacket::GotoNextChunk()
|
||||
{
|
||||
if (!knownformat)
|
||||
return false;
|
||||
if (currentchunk == 0)
|
||||
return false;
|
||||
if (curchunknum == GetChunkCount())
|
||||
return false;
|
||||
|
||||
size_t offset = sizeof(uint32_t);
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+sizeof(uint32_t));
|
||||
|
||||
while (sdeshdr->sdesid != 0)
|
||||
{
|
||||
offset += sizeof(RTCPSDESHeader);
|
||||
offset += (size_t)(sdeshdr->length);
|
||||
sdeshdr = (RTCPSDESHeader *)(currentchunk+offset);
|
||||
}
|
||||
offset++; // for the zero byte
|
||||
if ((offset&0x03) != 0)
|
||||
offset += (4-(offset&0x03));
|
||||
currentchunk += offset;
|
||||
curchunknum++;
|
||||
itemoffset = sizeof(uint32_t);
|
||||
return true;
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSDESPacket::GetChunkSSRC() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
uint32_t *ssrc = (uint32_t *)currentchunk;
|
||||
return ntohl(*ssrc);
|
||||
}
|
||||
|
||||
inline bool RTCPSDESPacket::GotoFirstItem()
|
||||
{
|
||||
if (!knownformat)
|
||||
return false;
|
||||
if (currentchunk == 0)
|
||||
return false;
|
||||
itemoffset = sizeof(uint32_t);
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid == 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline bool RTCPSDESPacket::GotoNextItem()
|
||||
{
|
||||
if (!knownformat)
|
||||
return false;
|
||||
if (currentchunk == 0)
|
||||
return false;
|
||||
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid == 0)
|
||||
return false;
|
||||
|
||||
size_t offset = itemoffset;
|
||||
offset += sizeof(RTCPSDESHeader);
|
||||
offset += (size_t)(sdeshdr->length);
|
||||
sdeshdr = (RTCPSDESHeader *)(currentchunk+offset);
|
||||
if (sdeshdr->sdesid == 0)
|
||||
return false;
|
||||
itemoffset = offset;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline RTCPSDESPacket::ItemType RTCPSDESPacket::GetItemType() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return None;
|
||||
if (currentchunk == 0)
|
||||
return None;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
switch (sdeshdr->sdesid)
|
||||
{
|
||||
case 0:
|
||||
return None;
|
||||
case RTCP_SDES_ID_CNAME:
|
||||
return CNAME;
|
||||
case RTCP_SDES_ID_NAME:
|
||||
return NAME;
|
||||
case RTCP_SDES_ID_EMAIL:
|
||||
return EMAIL;
|
||||
case RTCP_SDES_ID_PHONE:
|
||||
return PHONE;
|
||||
case RTCP_SDES_ID_LOCATION:
|
||||
return LOC;
|
||||
case RTCP_SDES_ID_TOOL:
|
||||
return TOOL;
|
||||
case RTCP_SDES_ID_NOTE:
|
||||
return NOTE;
|
||||
case RTCP_SDES_ID_PRIVATE:
|
||||
return PRIV;
|
||||
default:
|
||||
return Unknown;
|
||||
}
|
||||
return Unknown;
|
||||
}
|
||||
|
||||
inline size_t RTCPSDESPacket::GetItemLength() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return None;
|
||||
if (currentchunk == 0)
|
||||
return None;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid == 0)
|
||||
return 0;
|
||||
return (size_t)(sdeshdr->length);
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPSDESPacket::GetItemData()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid == 0)
|
||||
return 0;
|
||||
return (currentchunk+itemoffset+sizeof(RTCPSDESHeader));
|
||||
}
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
inline size_t RTCPSDESPacket::GetPRIVPrefixLength() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid != RTCP_SDES_ID_PRIVATE)
|
||||
return 0;
|
||||
if (sdeshdr->length == 0)
|
||||
return 0;
|
||||
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||
size_t prefixlength = (size_t)(*preflen);
|
||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||
return 0;
|
||||
return prefixlength;
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPSDESPacket::GetPRIVPrefixData()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid != RTCP_SDES_ID_PRIVATE)
|
||||
return 0;
|
||||
if (sdeshdr->length == 0)
|
||||
return 0;
|
||||
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||
size_t prefixlength = (size_t)(*preflen);
|
||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||
return 0;
|
||||
if (prefixlength == 0)
|
||||
return 0;
|
||||
return (currentchunk+itemoffset+sizeof(RTCPSDESHeader)+1);
|
||||
}
|
||||
|
||||
inline size_t RTCPSDESPacket::GetPRIVValueLength() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid != RTCP_SDES_ID_PRIVATE)
|
||||
return 0;
|
||||
if (sdeshdr->length == 0)
|
||||
return 0;
|
||||
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||
size_t prefixlength = (size_t)(*preflen);
|
||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||
return 0;
|
||||
return ((size_t)(sdeshdr->length))-prefixlength-1;
|
||||
}
|
||||
|
||||
inline uint8_t *RTCPSDESPacket::GetPRIVValueData()
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
if (currentchunk == 0)
|
||||
return 0;
|
||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||
if (sdeshdr->sdesid != RTCP_SDES_ID_PRIVATE)
|
||||
return 0;
|
||||
if (sdeshdr->length == 0)
|
||||
return 0;
|
||||
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||
size_t prefixlength = (size_t)(*preflen);
|
||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||
return 0;
|
||||
size_t valuelen = ((size_t)(sdeshdr->length))-prefixlength-1;
|
||||
if (valuelen == 0)
|
||||
return 0;
|
||||
return (currentchunk+itemoffset+sizeof(RTCPSDESHeader)+1+prefixlength);
|
||||
}
|
||||
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
#endif // RTCPSDESPACKET_H
|
||||
|
@ -1,101 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtcpsrpacket.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTCPSRPacket::RTCPSRPacket(uint8_t *data,size_t datalength)
|
||||
: RTCPPacket(SR,data,datalength)
|
||||
{
|
||||
knownformat = false;
|
||||
|
||||
RTCPCommonHeader *hdr;
|
||||
size_t len = datalength;
|
||||
size_t expectedlength;
|
||||
|
||||
hdr = (RTCPCommonHeader *)data;
|
||||
if (hdr->padding)
|
||||
{
|
||||
uint8_t padcount = data[datalength-1];
|
||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||
return;
|
||||
if (((size_t)padcount) >= len)
|
||||
return;
|
||||
len -= (size_t)padcount;
|
||||
}
|
||||
|
||||
expectedlength = sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
||||
|
||||
if (expectedlength != len)
|
||||
return;
|
||||
|
||||
knownformat = true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTCPSRPacket::Dump()
|
||||
{
|
||||
RTCPPacket::Dump();
|
||||
if (!IsKnownFormat())
|
||||
std::cout << " Unknown format" << std::endl;
|
||||
else
|
||||
{
|
||||
int num = GetReceptionReportCount();
|
||||
int i;
|
||||
RTPNTPTime t = GetNTPTimestamp();
|
||||
|
||||
std::cout << " SSRC of sender: " << GetSenderSSRC() << std::endl;
|
||||
std::cout << " Sender info:" << std::endl;
|
||||
std::cout << " NTP timestamp: " << t.GetMSW() << ":" << t.GetLSW() << std::endl;
|
||||
std::cout << " RTP timestamp: " << GetRTPTimestamp() << std::endl;
|
||||
std::cout << " Packet count: " << GetSenderPacketCount() << std::endl;
|
||||
std::cout << " Octet count: " << GetSenderOctetCount() << std::endl;
|
||||
for (i = 0 ; i < num ; i++)
|
||||
{
|
||||
std::cout << " Report block " << i << std::endl;
|
||||
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
||||
std::cout << " Fraction lost: " << (uint32_t)GetFractionLost(i) << std::endl;
|
||||
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
||||
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
||||
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
||||
std::cout << " LSR: " << GetLSR(i) << std::endl;
|
||||
std::cout << " DLSR: " << GetDLSR(i) << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,197 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPSRPACKET_H
|
||||
|
||||
#define RTCPSRPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include "rtpstructs.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPSRPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
RTCPSRPacket(uint8_t *data,size_t datalength);
|
||||
~RTCPSRPacket() { }
|
||||
|
||||
// Sender info
|
||||
|
||||
uint32_t GetSenderSSRC() const;
|
||||
RTPNTPTime GetNTPTimestamp() const;
|
||||
uint32_t GetRTPTimestamp() const;
|
||||
uint32_t GetSenderPacketCount() const;
|
||||
uint32_t GetSenderOctetCount() const;
|
||||
|
||||
// Reportblocks
|
||||
|
||||
int GetReceptionReportCount() const;
|
||||
// Note: the validity of index is NOT checked!
|
||||
uint32_t GetSSRC(int index) const;
|
||||
uint8_t GetFractionLost(int index) const;
|
||||
int32_t GetLostPacketCount(int index) const;
|
||||
uint32_t GetExtendedHighestSequenceNumber(int index) const;
|
||||
uint32_t GetJitter(int index) const;
|
||||
uint32_t GetLSR(int index) const;
|
||||
uint32_t GetDLSR(int index) const;
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
RTCPReceiverReport *GotoReport(int index) const;
|
||||
};
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetSenderSSRC() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
|
||||
uint32_t *ssrcptr = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||
return ntohl(*ssrcptr);
|
||||
}
|
||||
|
||||
inline RTPNTPTime RTCPSRPacket::GetNTPTimestamp() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return RTPNTPTime(0,0);
|
||||
|
||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||
return RTPNTPTime(ntohl(sr->ntptime_msw),ntohl(sr->ntptime_lsw));
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetRTPTimestamp() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||
return ntohl(sr->rtptimestamp);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetSenderPacketCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||
return ntohl(sr->packetcount);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetSenderOctetCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||
return ntohl(sr->octetcount);
|
||||
}
|
||||
|
||||
inline int RTCPSRPacket::GetReceptionReportCount() const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPCommonHeader *hdr = (RTCPCommonHeader *)data;
|
||||
return ((int)hdr->count);
|
||||
}
|
||||
|
||||
inline RTCPReceiverReport *RTCPSRPacket::GotoReport(int index) const
|
||||
{
|
||||
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport)+index*sizeof(RTCPReceiverReport));
|
||||
return r;
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetSSRC(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->ssrc);
|
||||
}
|
||||
|
||||
inline uint8_t RTCPSRPacket::GetFractionLost(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return r->fractionlost;
|
||||
}
|
||||
|
||||
inline int32_t RTCPSRPacket::GetLostPacketCount(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
uint32_t count = ((uint32_t)r->packetslost[2])|(((uint32_t)r->packetslost[1])<<8)|(((uint32_t)r->packetslost[0])<<16);
|
||||
if ((count&0x00800000) != 0) // test for negative number
|
||||
count |= 0xFF000000;
|
||||
int32_t *count2 = (int32_t *)(&count);
|
||||
return (*count2);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetExtendedHighestSequenceNumber(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->exthighseqnr);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetJitter(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->jitter);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetLSR(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->lsr);
|
||||
}
|
||||
|
||||
inline uint32_t RTCPSRPacket::GetDLSR(int index) const
|
||||
{
|
||||
if (!knownformat)
|
||||
return 0;
|
||||
RTCPReceiverReport *r = GotoReport(index);
|
||||
return ntohl(r->dlsr);
|
||||
}
|
||||
|
||||
#endif // RTCPSRPACKET_H
|
||||
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTCPUNKNOWNPACKET_H
|
||||
|
||||
#define RTCPUNKNOWNPACKET_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtcppacket.h"
|
||||
|
||||
class RTCPCompoundPacket;
|
||||
|
||||
class RTCPUnknownPacket : public RTCPPacket
|
||||
{
|
||||
public:
|
||||
RTCPUnknownPacket(uint8_t *data,size_t datalen) :
|
||||
RTCPPacket(Unknown,data,datalen)
|
||||
{
|
||||
// Since we don't expect a format, we'll trivially put knownformat = true
|
||||
knownformat = true;
|
||||
}
|
||||
~RTCPUnknownPacket() { }
|
||||
};
|
||||
|
||||
#endif // RTCPUNKNOWNPACKET_H
|
||||
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPADDRESS_H
|
||||
|
||||
#define RTPADDRESS_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include <string>
|
||||
|
||||
class RTPAddress
|
||||
{
|
||||
public:
|
||||
enum AddressType { IPv4Address, IPv6Address, UserDefinedAddress };
|
||||
AddressType GetAddressType() const { return addresstype; }
|
||||
|
||||
virtual RTPAddress *CreateCopy() const = 0;
|
||||
|
||||
// note: these functions should be able to handle a NULL argument
|
||||
virtual bool IsSameAddress(const RTPAddress *addr) const = 0;
|
||||
virtual bool IsFromSameHost(const RTPAddress *addr) const = 0;
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
virtual std::string GetAddressString() const = 0;
|
||||
#endif // RTPDEBUG
|
||||
|
||||
virtual ~RTPAddress() { }
|
||||
protected:
|
||||
RTPAddress(const AddressType t) : addresstype(t) { } // only allow subclasses to be created
|
||||
private:
|
||||
const AddressType addresstype;
|
||||
};
|
||||
|
||||
#endif // RTPADDRESS_H
|
||||
|
@ -1,124 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtpcollisionlist.h"
|
||||
#include "rtperrors.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTPCollisionList::RTPCollisionList()
|
||||
{
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
timeinit.Dummy();
|
||||
#endif // WIN32 || _WIN32_WCE
|
||||
}
|
||||
|
||||
void RTPCollisionList::Clear()
|
||||
{
|
||||
std::list<AddressAndTime>::iterator it;
|
||||
|
||||
for (it = addresslist.begin() ; it != addresslist.end() ; it++)
|
||||
delete (*it).addr;
|
||||
addresslist.clear();
|
||||
}
|
||||
|
||||
int RTPCollisionList::UpdateAddress(const RTPAddress *addr,const RTPTime &receivetime,bool *created)
|
||||
{
|
||||
if (addr == 0)
|
||||
return ERR_RTP_COLLISIONLIST_BADADDRESS;
|
||||
|
||||
std::list<AddressAndTime>::iterator it;
|
||||
|
||||
for (it = addresslist.begin() ; it != addresslist.end() ; it++)
|
||||
{
|
||||
if (((*it).addr)->IsSameAddress(addr))
|
||||
{
|
||||
(*it).recvtime = receivetime;
|
||||
*created = false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
RTPAddress *newaddr = addr->CreateCopy();
|
||||
if (newaddr == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
addresslist.push_back(AddressAndTime(newaddr,receivetime));
|
||||
*created = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool RTPCollisionList::HasAddress(const RTPAddress *addr) const
|
||||
{
|
||||
std::list<AddressAndTime>::const_iterator it;
|
||||
|
||||
for (it = addresslist.begin() ; it != addresslist.end() ; it++)
|
||||
{
|
||||
if (((*it).addr)->IsSameAddress(addr))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void RTPCollisionList::Timeout(const RTPTime ¤ttime,const RTPTime &timeoutdelay)
|
||||
{
|
||||
std::list<AddressAndTime>::iterator it;
|
||||
RTPTime checktime = currenttime;
|
||||
checktime -= timeoutdelay;
|
||||
|
||||
it = addresslist.begin();
|
||||
while(it != addresslist.end())
|
||||
{
|
||||
if ((*it).recvtime < checktime) // timeout
|
||||
{
|
||||
delete (*it).addr;
|
||||
it = addresslist.erase(it);
|
||||
}
|
||||
else
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void RTPCollisionList::Dump()
|
||||
{
|
||||
std::list<AddressAndTime>::const_iterator it;
|
||||
|
||||
for (it = addresslist.begin() ; it != addresslist.end() ; it++)
|
||||
std::cout << "Address: " << ((*it).addr)->GetAddressString() << "\tTime: " << (*it).recvtime.GetSeconds() << std::endl;
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPCOLLISIONLIST_H
|
||||
|
||||
#define RTPCOLLISIONLIST_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtpaddress.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include <list>
|
||||
|
||||
class RTPAddress;
|
||||
|
||||
class RTPCollisionList
|
||||
{
|
||||
public:
|
||||
RTPCollisionList();
|
||||
~RTPCollisionList() { Clear(); }
|
||||
void Clear();
|
||||
int UpdateAddress(const RTPAddress *addr,const RTPTime &receivetime,bool *created);
|
||||
bool HasAddress(const RTPAddress *addr) const;
|
||||
void Timeout(const RTPTime ¤ttime,const RTPTime &timeoutdelay);
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
class AddressAndTime
|
||||
{
|
||||
public:
|
||||
AddressAndTime(RTPAddress *a,const RTPTime &t) : addr(a),recvtime(t) { }
|
||||
|
||||
RTPAddress *addr;
|
||||
RTPTime recvtime;
|
||||
};
|
||||
|
||||
std::list<AddressAndTime> addresslist;
|
||||
};
|
||||
|
||||
#endif // RTPCOLLISIONLIST_H
|
||||
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPCONFIG_H
|
||||
|
||||
#define RTPCONFIG_H
|
||||
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include "rtpconfig_win.h"
|
||||
#else
|
||||
#include "rtpconfig_unix.h"
|
||||
#endif // WIN32
|
||||
|
||||
//#define RTPDEBUG
|
||||
|
||||
#endif // RTPCONFIG_H
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPCONFIG_UNIX_H
|
||||
|
||||
#define RTPCONFIG_UNIX_H
|
||||
|
||||
@RTP_FILIO@
|
||||
|
||||
@RTP_SOCKIO@
|
||||
|
||||
@RTP_ENDIAN@
|
||||
|
||||
@RTP_SOCKLENTYPE_UINT@
|
||||
|
||||
@RTP_HAVE_SOCKADDR_LEN@
|
||||
|
||||
@RTP_SUPPORT_IPV4MULTICAST@
|
||||
|
||||
@RTP_SUPPORT_THREAD@
|
||||
|
||||
@RTP_SUPPORT_SDESPRIV@
|
||||
|
||||
@RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||
|
||||
@RTP_SUPPORT_PROBATION@
|
||||
|
||||
@RTP_SUPPORT_GNUDRAND@
|
||||
|
||||
@RTP_SUPPORT_RANDR@
|
||||
|
||||
@RTP_SUPPORT_GETLOGINR@
|
||||
|
||||
@RTP_SUPPORT_IPV6@
|
||||
|
||||
@RTP_SUPPORT_IPV6MULTICAST@
|
||||
|
||||
@RTP_SUPPORT_IFADDRS@
|
||||
|
||||
#endif // RTPCONFIG_UNIX_H
|
||||
|
@ -1,49 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPCONFIG_WIN_H
|
||||
|
||||
#define RTPCONFIG_WIN_H
|
||||
|
||||
#define RTP_SUPPORT_IPV4MULTICAST
|
||||
|
||||
//#define RTP_SUPPORT_THREAD
|
||||
|
||||
#define RTP_SUPPORT_PROBATION
|
||||
|
||||
#define RTP_SUPPORT_SDESPRIV
|
||||
|
||||
//#define RTP_SUPPORT_IPV6
|
||||
|
||||
//#define RTP_SUPPORT_IPV6MULTICAST
|
||||
|
||||
#endif // RTPCONFIG_WIN_H
|
@ -1,178 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtpconfig.h"
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
|
||||
#include "rtptypes.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
struct MemoryInfo
|
||||
{
|
||||
void *ptr;
|
||||
size_t size;
|
||||
int lineno;
|
||||
char *filename;
|
||||
|
||||
MemoryInfo *next;
|
||||
};
|
||||
|
||||
class MemoryTracker
|
||||
{
|
||||
public:
|
||||
MemoryTracker() { firstblock = NULL; }
|
||||
~MemoryTracker()
|
||||
{
|
||||
MemoryInfo *tmp;
|
||||
int count = 0;
|
||||
|
||||
printf("Checking for memory leaks...\n");fflush(stdout);
|
||||
while(firstblock)
|
||||
{
|
||||
count++;
|
||||
printf("Unfreed block %p of %d bytes (file '%s', line %d)\n",firstblock->ptr,(int)firstblock->size,firstblock->filename,firstblock->lineno);;
|
||||
|
||||
tmp = firstblock->next;
|
||||
|
||||
free(firstblock->ptr);
|
||||
if (firstblock->filename)
|
||||
free(firstblock->filename);
|
||||
free(firstblock);
|
||||
firstblock = tmp;
|
||||
}
|
||||
if (count == 0)
|
||||
printf("No memory leaks found\n");
|
||||
else
|
||||
printf("%d leaks found\n",count);
|
||||
}
|
||||
|
||||
MemoryInfo *firstblock;
|
||||
};
|
||||
|
||||
static MemoryTracker memtrack;
|
||||
|
||||
void *donew(size_t s,char filename[],int line)
|
||||
{
|
||||
void *p;
|
||||
MemoryInfo *meminf;
|
||||
|
||||
p = malloc(s);
|
||||
meminf = (MemoryInfo *)malloc(sizeof(MemoryInfo));
|
||||
|
||||
meminf->ptr = p;
|
||||
meminf->size = s;
|
||||
meminf->lineno = line;
|
||||
meminf->filename = (char *)malloc(strlen(filename)+1);
|
||||
strcpy(meminf->filename,filename);
|
||||
meminf->next = memtrack.firstblock;
|
||||
|
||||
memtrack.firstblock = meminf;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void dodelete(void *p)
|
||||
{
|
||||
MemoryInfo *tmp,*tmpprev;
|
||||
bool found;
|
||||
|
||||
tmpprev = NULL;
|
||||
tmp = memtrack.firstblock;
|
||||
found = false;
|
||||
while (tmp != NULL && !found)
|
||||
{
|
||||
if (tmp->ptr == p)
|
||||
found = true;
|
||||
else
|
||||
{
|
||||
tmpprev = tmp;
|
||||
tmp = tmp->next;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
printf("Couldn't free block %p!\n",p);
|
||||
fflush(stdout);
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryInfo *n;
|
||||
|
||||
fflush(stdout);
|
||||
n = tmp->next;
|
||||
free(tmp->ptr);
|
||||
if (tmp->filename)
|
||||
free(tmp->filename);
|
||||
free(tmp);
|
||||
|
||||
if (tmpprev)
|
||||
tmpprev->next = n;
|
||||
else
|
||||
memtrack.firstblock = n;
|
||||
}
|
||||
}
|
||||
|
||||
void *operator new(size_t s)
|
||||
{
|
||||
return donew(s,"UNKNOWN FILE",0);
|
||||
}
|
||||
|
||||
void *operator new[](size_t s)
|
||||
{
|
||||
return donew(s,"UNKNOWN FILE",0);
|
||||
}
|
||||
|
||||
void *operator new(size_t s,char filename[],int line)
|
||||
{
|
||||
return donew(s,filename,line);
|
||||
}
|
||||
|
||||
void *operator new[](size_t s,char filename[],int line)
|
||||
{
|
||||
return donew(s,filename,line);
|
||||
}
|
||||
|
||||
void operator delete(void *p)
|
||||
{
|
||||
dodelete(p);
|
||||
}
|
||||
|
||||
void operator delete[](void *p)
|
||||
{
|
||||
dodelete(p);
|
||||
}
|
||||
|
||||
#endif // RTPDEBUG
|
||||
|
@ -1,52 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPDEBUG_H
|
||||
|
||||
#define RTPDEBUG_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
#include "rtptypes.h"
|
||||
|
||||
void *operator new(size_t s,char filename[],int line);
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
void *operator new[](size_t s,char filename[],int line);
|
||||
#define new new (__FILE__,__LINE__)
|
||||
#else
|
||||
#define new new (__FILE__,__LINE__)
|
||||
#endif // WIN32
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#endif // RTPDEBUG_H
|
||||
|
@ -1,86 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPDEFINES_H
|
||||
|
||||
#define RTPDEFINES_H
|
||||
|
||||
#define RTP_VERSION 2
|
||||
#define RTP_MAXCSRCS 15
|
||||
#define RTP_MINPACKETSIZE 600
|
||||
#define RTP_DEFAULTPACKETSIZE 1400
|
||||
#define RTP_PROBATIONCOUNT 2
|
||||
#define RTP_MAXPRIVITEMS 256
|
||||
#define RTP_SENDERTIMEOUTMULTIPLIER 2
|
||||
#define RTP_BYETIMEOUTMULTIPLIER 1
|
||||
#define RTP_MEMBERTIMEOUTMULTIPLIER 5
|
||||
#define RTP_COLLISIONTIMEOUTMULTIPLIER 10
|
||||
#define RTP_NOTETTIMEOUTMULTIPLIER 25
|
||||
#define RTP_DEFAULTSESSIONBANDWIDTH 10000.0
|
||||
|
||||
#define RTP_RTCPTYPE_SR 200
|
||||
#define RTP_RTCPTYPE_RR 201
|
||||
#define RTP_RTCPTYPE_SDES 202
|
||||
#define RTP_RTCPTYPE_BYE 203
|
||||
#define RTP_RTCPTYPE_APP 204
|
||||
|
||||
#define RTCP_SDES_ID_CNAME 1
|
||||
#define RTCP_SDES_ID_NAME 2
|
||||
#define RTCP_SDES_ID_EMAIL 3
|
||||
#define RTCP_SDES_ID_PHONE 4
|
||||
#define RTCP_SDES_ID_LOCATION 5
|
||||
#define RTCP_SDES_ID_TOOL 6
|
||||
#define RTCP_SDES_ID_NOTE 7
|
||||
#define RTCP_SDES_ID_PRIVATE 8
|
||||
#define RTCP_SDES_NUMITEMS_NONPRIVATE 7
|
||||
#define RTCP_SDES_MAXITEMLENGTH 255
|
||||
|
||||
#define RTCP_BYE_MAXREASONLENGTH 255
|
||||
#define RTCP_DEFAULTMININTERVAL 5.0
|
||||
#define RTCP_DEFAULTBANDWIDTHFRACTION 0.05
|
||||
#define RTCP_DEFAULTSENDERFRACTION 0.25
|
||||
#define RTCP_DEFAULTHALFATSTARTUP true
|
||||
#define RTCP_DEFAULTIMMEDIATEBYE true
|
||||
#define RTCP_DEFAULTSRBYE true
|
||||
|
||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#if (!defined(_WIN32_WCE)) && (defined(_MSC_VER) && _MSC_VER >= 1400 )
|
||||
#define RTP_SNPRINTF _snprintf_s
|
||||
#else
|
||||
#define RTP_SNPRINTF _snprintf
|
||||
#endif
|
||||
#else
|
||||
#define RTP_SNPRINTF snprintf
|
||||
#endif // WIN32 || _WIN32_WCE
|
||||
|
||||
#endif // RTPDEFINES_H
|
||||
|
@ -1,230 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtperrors.h"
|
||||
#include "rtpdefines.h"
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
struct RTPErrorInfo
|
||||
{
|
||||
int code;
|
||||
char *description;
|
||||
};
|
||||
|
||||
static RTPErrorInfo ErrorDescriptions[]=
|
||||
{
|
||||
{ ERR_RTP_OUTOFMEM,"Out of memory" },
|
||||
{ ERR_RTP_NOTHREADSUPPORT, "No JThread support was compiled in"},
|
||||
{ ERR_RTP_COLLISIONLIST_BADADDRESS, "Passed invalid address (null) to collision list"},
|
||||
{ ERR_RTP_HASHTABLE_ELEMENTALREADYEXISTS, "Element already exists in hash table"},
|
||||
{ ERR_RTP_HASHTABLE_ELEMENTNOTFOUND, "Element not found in hash table"},
|
||||
{ ERR_RTP_HASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX, "Function returned an illegal hash index"},
|
||||
{ ERR_RTP_HASHTABLE_NOCURRENTELEMENT, "No current element selected in hash table"},
|
||||
{ ERR_RTP_KEYHASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX, "Function returned an illegal hash index"},
|
||||
{ ERR_RTP_KEYHASHTABLE_KEYALREADYEXISTS, "Key value already exists in key hash table"},
|
||||
{ ERR_RTP_KEYHASHTABLE_KEYNOTFOUND, "Key value not found in key hash table"},
|
||||
{ ERR_RTP_KEYHASHTABLE_NOCURRENTELEMENT, "No current element selected in key hash table"},
|
||||
{ ERR_RTP_PACKBUILD_ALREADYINIT, "RTP packet builder is already initialized"},
|
||||
{ ERR_RTP_PACKBUILD_CSRCALREADYINLIST, "The specified CSRC is already in the RTP packet builder's CSRC list"},
|
||||
{ ERR_RTP_PACKBUILD_CSRCLISTFULL, "The RTP packet builder's CSRC list already contains 15 entries"},
|
||||
{ ERR_RTP_PACKBUILD_CSRCNOTINLIST, "The specified CSRC was not found in the RTP packet builder's CSRC list"},
|
||||
{ ERR_RTP_PACKBUILD_DEFAULTMARKNOTSET, "The RTP packet builder's default mark flag is not set"},
|
||||
{ ERR_RTP_PACKBUILD_DEFAULTPAYLOADTYPENOTSET, "The RTP packet builder's default payload type is not set"},
|
||||
{ ERR_RTP_PACKBUILD_DEFAULTTSINCNOTSET, "The RTP packet builder's default timestamp increment is not set"},
|
||||
{ ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE, "The specified maximum packet size for the RTP packet builder is invalid"},
|
||||
{ ERR_RTP_PACKBUILD_NOTINIT, "The RTP packet builder is not initialized"},
|
||||
{ ERR_RTP_PACKET_BADPAYLOADTYPE, "Invalid payload type"},
|
||||
{ ERR_RTP_PACKET_DATAEXCEEDSMAXSIZE, "Tried to create an RTP packet which whould exceed the specified maximum packet size"},
|
||||
{ ERR_RTP_PACKET_EXTERNALBUFFERNULL, "Illegal value (null) passed as external buffer for the RTP packet"},
|
||||
{ ERR_RTP_PACKET_ILLEGALBUFFERSIZE, "Illegal buffer size specified for the RTP packet"},
|
||||
{ ERR_RTP_PACKET_INVALIDPACKET, "Invalid RTP packet format"},
|
||||
{ ERR_RTP_PACKET_TOOMANYCSRCS, "More than 15 CSRCs specified for the RTP packet"},
|
||||
{ ERR_RTP_POLLTHREAD_ALREADYRUNNING, "Poll thread is already running"},
|
||||
{ ERR_RTP_POLLTHREAD_CANTINITMUTEX, "Can't initialize a mutex for the poll thread"},
|
||||
{ ERR_RTP_POLLTHREAD_CANTSTARTTHREAD, "Can't start the poll thread"},
|
||||
{ ERR_RTP_RTCPCOMPOUND_INVALIDPACKET, "Invalid RTCP compound packet format"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING, "Already building this RTCP compound packet"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT, "This RTCP compound packet is already built"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT, "There's already a SR or RR in this RTCP compound packet"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_APPDATALENTOOBIG, "The specified APP data length for the RTCP compound packet is too big"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL, "The specified buffer size for the RTCP comound packet is too small"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALAPPDATALENGTH, "The APP data length must be a multiple of four"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALSUBTYPE, "The APP packet subtype must be smaller than 32"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_INVALIDITEMTYPE, "Invalid SDES item type specified for the RTCP compound packet"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_MAXPACKETSIZETOOSMALL, "The specified maximum packet size for the RTCP compound packet is too small"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE, "Tried to add an SDES item to the RTCP compound packet when no SSRC was present"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_NOREPORTPRESENT, "An RTCP compound packet must contain a SR or RR"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING, "The RTCP compound packet builder is not initialized"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT, "Adding this data would exceed the specified maximum RTCP compound packet size"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_REPORTNOTSTARTED, "Tried to add a report block to the RTCP compound packet when no SR or RR was started"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_TOOMANYSSRCS, "Only 31 SSRCs will fit into a BYE packet for the RTCP compound packet"},
|
||||
{ ERR_RTP_RTCPCOMPPACKBUILDER_TOTALITEMLENGTHTOOBIG, "The total data for the SDES PRIV item exceeds the maximum size (255 bytes) of an SDES item"},
|
||||
{ ERR_RTP_RTCPPACKETBUILDER_ALREADYINIT, "The RTCP packet builder is already initialized"},
|
||||
{ ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE, "The specified maximum packet size for the RTCP packet builder is too small"},
|
||||
{ ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT, "Speficied an illegal timestamp unit for the the RTCP packet builder"},
|
||||
{ ERR_RTP_RTCPPACKETBUILDER_NOTINIT, "The RTCP packet builder was not initialized"},
|
||||
{ ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON, "The RTCP compound packet filled sooner than expected"},
|
||||
{ ERR_RTP_SCHEDPARAMS_BADFRACTION, "Illegal sender bandwidth fraction specified"},
|
||||
{ ERR_RTP_SCHEDPARAMS_BADMINIMUMINTERVAL, "The minimum RTCP interval specified for the scheduler is too small"},
|
||||
{ ERR_RTP_SCHEDPARAMS_INVALIDBANDWIDTH, "Invalid RTCP bandwidth specified for the RTCP scheduler"},
|
||||
{ ERR_RTP_SDES_LENGTHTOOBIG, "Specified size for the SDES item exceeds 255 bytes"},
|
||||
{ ERR_RTP_SDES_PREFIXNOTFOUND, "The specified SDES PRIV prefix was not found"},
|
||||
{ ERR_RTP_SESSION_ALREADYCREATED, "The session is already created"},
|
||||
{ ERR_RTP_SESSION_CANTGETLOGINNAME, "Can't retrieve login name"},
|
||||
{ ERR_RTP_SESSION_CANTINITMUTEX, "A mutex for the RTP session couldn't be initialized"},
|
||||
{ ERR_RTP_SESSION_MAXPACKETSIZETOOSMALL, "The maximum packet size specified for the RTP session is too small"},
|
||||
{ ERR_RTP_SESSION_NOTCREATED, "The RTP session was not created"},
|
||||
{ ERR_RTP_SESSION_UNSUPPORTEDTRANSMISSIONPROTOCOL, "The requested transmission protocol for the RTP session is not supported"},
|
||||
{ ERR_RTP_SESSION_USINGPOLLTHREAD, "This function is not available when using the RTP poll thread feature"},
|
||||
{ ERR_RTP_SESSION_USERDEFINEDTRANSMITTERNULL, "A user-defined transmitter was requested but the supplied transmitter component is NULL"},
|
||||
{ ERR_RTP_SOURCES_ALREADYHAVEOWNSSRC, "Only one source can be marked as own SSRC in the source table"},
|
||||
{ ERR_RTP_SOURCES_DONTHAVEOWNSSRC, "No source was marked as own SSRC in the source table"},
|
||||
{ ERR_RTP_SOURCES_ILLEGALSDESTYPE, "Illegal SDES type specified for processing into the source table"},
|
||||
{ ERR_RTP_SOURCES_SSRCEXISTS, "Can't create own SSRC because this SSRC identifier is already in the source table"},
|
||||
{ ERR_RTP_UDPV4TRANS_ALREADYCREATED, "The transmitter was already created"},
|
||||
{ ERR_RTP_UDPV4TRANS_ALREADYINIT, "The transmitter was already initialize"},
|
||||
{ ERR_RTP_UDPV4TRANS_ALREADYWAITING, "The transmitter is already waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTBINDRTCPSOCKET, "The 'bind' call for the RTCP socket failed"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTBINDRTPSOCKET, "The 'bind' call for the RTP socket failed"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTCALCULATELOCALIP, "The local IP addresses could not be determined"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTCREATEABORTDESCRIPTORS, "Couldn't create the sockets used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTCREATEPIPE, "Couldn't create the pipe used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTCREATESOCKET, "Couldn't create the RTP or RTCP socket"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTINITMUTEX, "Failed to initialize a mutex used by the transmitter"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTSETRTCPRECEIVEBUF, "Couldn't set the receive buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTSETRTCPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTSETRTPRECEIVEBUF, "Couldn't set the receive buffer size for the RTP socket"},
|
||||
{ ERR_RTP_UDPV4TRANS_CANTSETRTPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTP socket"},
|
||||
{ ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP, "Unable to join the specified multicast group"},
|
||||
{ ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE, "The function called doens't match the current receive mode"},
|
||||
{ ERR_RTP_UDPV4TRANS_ERRORINSELECT, "Error in the transmitter's 'select' call"},
|
||||
{ ERR_RTP_UDPV4TRANS_ILLEGALPARAMETERS, "Illegal parameters type passed to the transmitter"},
|
||||
{ ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE, "Specified address type isn't compatible with this transmitter"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOLOCALIPS, "Couldn't determine the local host name since the local IP list is empty"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOMULTICASTSUPPORT, "Multicast support is not available"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOSUCHENTRY, "Specified entry could not be found"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS, "The specified address is not a multicast address"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOTCREATED, "The 'Create' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOTINIT, "The 'Init' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_UDPV4TRANS_NOTWAITING, "The transmitter is not waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV4TRANS_PORTBASENOTEVEN, "The specified port base is not an even number"},
|
||||
{ ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG, "The maximum packet size is too big for this transmitter"},
|
||||
{ ERR_RTP_UDPV6TRANS_ALREADYCREATED, "The transmitter was already created"},
|
||||
{ ERR_RTP_UDPV6TRANS_ALREADYINIT, "The transmitter was already initialize"},
|
||||
{ ERR_RTP_UDPV6TRANS_ALREADYWAITING, "The transmitter is already waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTBINDRTCPSOCKET, "The 'bind' call for the RTCP socket failed"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTBINDRTPSOCKET, "The 'bind' call for the RTP socket failed"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTCALCULATELOCALIP, "The local IP addresses could not be determined"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTCREATEABORTDESCRIPTORS, "Couldn't create the sockets used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTCREATEPIPE, "Couldn't create the pipe used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTCREATESOCKET, "Couldn't create the RTP or RTCP socket"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTINITMUTEX, "Failed to initialize a mutex used by the transmitter"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTSETRTCPRECEIVEBUF, "Couldn't set the receive buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTSETRTCPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTSETRTPRECEIVEBUF, "Couldn't set the receive buffer size for the RTP socket"},
|
||||
{ ERR_RTP_UDPV6TRANS_CANTSETRTPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTP socket"},
|
||||
{ ERR_RTP_UDPV6TRANS_COULDNTJOINMULTICASTGROUP, "Unable to join the specified multicast group"},
|
||||
{ ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE, "The function called doens't match the current receive mode"},
|
||||
{ ERR_RTP_UDPV6TRANS_ERRORINSELECT, "Error in the transmitter's 'select' call"},
|
||||
{ ERR_RTP_UDPV6TRANS_ILLEGALPARAMETERS, "Illegal parameters type passed to the transmitter"},
|
||||
{ ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE, "Specified address type isn't compatible with this transmitter"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOLOCALIPS, "Couldn't determine the local host name since the local IP list is empty"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOMULTICASTSUPPORT, "Multicast support is not available"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOSUCHENTRY, "Specified entry could not be found"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOTAMULTICASTADDRESS, "The specified address is not a multicast address"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOTCREATED, "The 'Create' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOTINIT, "The 'Init' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_UDPV6TRANS_NOTWAITING, "The transmitter is not waiting for incoming data"},
|
||||
{ ERR_RTP_UDPV6TRANS_PORTBASENOTEVEN, "The specified port base is not an even number"},
|
||||
{ ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG, "The maximum packet size is too big for this transmitter"},
|
||||
{ ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL,"The hostname is larger than the specified buffer size"},
|
||||
{ ERR_RTP_SDES_MAXPRIVITEMS,"The maximum number of SDES private item prefixes was reached"},
|
||||
{ ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE,"An invalid probation type was specified"},
|
||||
{ ERR_RTP_FAKETRANS_ALREADYCREATED, "The transmitter was already created"},
|
||||
{ ERR_RTP_FAKETRANS_ALREADYINIT, "The transmitter was already initialize"},
|
||||
{ ERR_RTP_FAKETRANS_ALREADYWAITING, "The transmitter is already waiting for incoming data"},
|
||||
{ ERR_RTP_FAKETRANS_CANTBINDRTCPSOCKET, "The 'bind' call for the RTCP socket failed"},
|
||||
{ ERR_RTP_FAKETRANS_CANTBINDRTPSOCKET, "The 'bind' call for the RTP socket failed"},
|
||||
{ ERR_RTP_FAKETRANS_CANTCALCULATELOCALIP, "The local IP addresses could not be determined"},
|
||||
{ ERR_RTP_FAKETRANS_CANTCREATEABORTDESCRIPTORS, "Couldn't create the sockets used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_FAKETRANS_CANTCREATEPIPE, "Couldn't create the pipe used to abort waiting for incoming data"},
|
||||
{ ERR_RTP_FAKETRANS_CANTCREATESOCKET, "Couldn't create the RTP or RTCP socket"},
|
||||
{ ERR_RTP_FAKETRANS_CANTINITMUTEX, "Failed to initialize a mutex used by the transmitter"},
|
||||
{ ERR_RTP_FAKETRANS_CANTSETRTCPRECEIVEBUF, "Couldn't set the receive buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_FAKETRANS_CANTSETRTCPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTCP socket"},
|
||||
{ ERR_RTP_FAKETRANS_CANTSETRTPRECEIVEBUF, "Couldn't set the receive buffer size for the RTP socket"},
|
||||
{ ERR_RTP_FAKETRANS_CANTSETRTPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTP socket"},
|
||||
{ ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP, "Unable to join the specified multicast group"},
|
||||
{ ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE, "The function called doens't match the current receive mode"},
|
||||
{ ERR_RTP_FAKETRANS_ERRORINSELECT, "Error in the transmitter's 'select' call"},
|
||||
{ ERR_RTP_FAKETRANS_ILLEGALPARAMETERS, "Illegal parameters type passed to the transmitter"},
|
||||
{ ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE, "Specified address type isn't compatible with this transmitter"},
|
||||
{ ERR_RTP_FAKETRANS_NOLOCALIPS, "Couldn't determine the local host name since the local IP list is empty"},
|
||||
{ ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT, "Multicast support is not available"},
|
||||
{ ERR_RTP_FAKETRANS_NOSUCHENTRY, "Specified entry could not be found"},
|
||||
{ ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS, "The specified address is not a multicast address"},
|
||||
{ ERR_RTP_FAKETRANS_NOTCREATED, "The 'Create' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_FAKETRANS_NOTINIT, "The 'Init' call for this transmitter has not been called"},
|
||||
{ ERR_RTP_FAKETRANS_NOTWAITING, "The transmitter is not waiting for incoming data"},
|
||||
{ ERR_RTP_FAKETRANS_PORTBASENOTEVEN, "The specified port base is not an even number"},
|
||||
{ ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG, "The maximum packet size is too big for this transmitter"},
|
||||
{ ERR_RTP_FAKETRANS_INVALIDEVENT, "Expecting UNKNOWN_EVENT to set source address but got another type of event"},
|
||||
{ ERR_RTP_FAKETRANS_SRCADDRNOTSET, "Got packet but src address information was not set, returning"},
|
||||
{ ERR_RTP_FAKETRANS_NOTNETBUFFER, "Received buffer is not a GstNetBuffer"},
|
||||
{ ERR_RTP_FAKETRANS_WAITNOTIMPLEMENTED, "The WaitForIncomingData is not implemented in the Gst transmitter"},
|
||||
{ ERR_RTP_INVALID_PACKET_VERISON, "The packet is not the correct version of RTP"},
|
||||
{ 0,0 }
|
||||
};
|
||||
|
||||
std::string RTPGetErrorString(int errcode)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (errcode >= 0)
|
||||
return std::string("No error");
|
||||
|
||||
i = 0;
|
||||
while (ErrorDescriptions[i].code != 0)
|
||||
{
|
||||
if (ErrorDescriptions[i].code == errcode)
|
||||
return std::string(ErrorDescriptions[i].description);
|
||||
i++;
|
||||
}
|
||||
|
||||
char str[16];
|
||||
|
||||
RTP_SNPRINTF(str,16,"(%d)",errcode);
|
||||
|
||||
return std::string("Unknown error code") + std::string(str);
|
||||
}
|
||||
|
@ -1,204 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPERRORS_H
|
||||
|
||||
#define RTPERRORS_H
|
||||
|
||||
#include <string>
|
||||
|
||||
std::string RTPGetErrorString(int errcode);
|
||||
|
||||
#define ERR_RTP_OUTOFMEM -1
|
||||
#define ERR_RTP_NOTHREADSUPPORT -2
|
||||
#define ERR_RTP_COLLISIONLIST_BADADDRESS -3
|
||||
#define ERR_RTP_HASHTABLE_ELEMENTALREADYEXISTS -4
|
||||
#define ERR_RTP_HASHTABLE_ELEMENTNOTFOUND -5
|
||||
#define ERR_RTP_HASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX -6
|
||||
#define ERR_RTP_HASHTABLE_NOCURRENTELEMENT -7
|
||||
#define ERR_RTP_KEYHASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX -8
|
||||
#define ERR_RTP_KEYHASHTABLE_KEYALREADYEXISTS -9
|
||||
#define ERR_RTP_KEYHASHTABLE_KEYNOTFOUND -10
|
||||
#define ERR_RTP_KEYHASHTABLE_NOCURRENTELEMENT -11
|
||||
#define ERR_RTP_PACKBUILD_ALREADYINIT -12
|
||||
#define ERR_RTP_PACKBUILD_CSRCALREADYINLIST -13
|
||||
#define ERR_RTP_PACKBUILD_CSRCLISTFULL -14
|
||||
#define ERR_RTP_PACKBUILD_CSRCNOTINLIST -15
|
||||
#define ERR_RTP_PACKBUILD_DEFAULTMARKNOTSET -16
|
||||
#define ERR_RTP_PACKBUILD_DEFAULTPAYLOADTYPENOTSET -17
|
||||
#define ERR_RTP_PACKBUILD_DEFAULTTSINCNOTSET -18
|
||||
#define ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE -19
|
||||
#define ERR_RTP_PACKBUILD_NOTINIT -20
|
||||
#define ERR_RTP_PACKET_BADPAYLOADTYPE -21
|
||||
#define ERR_RTP_PACKET_DATAEXCEEDSMAXSIZE -22
|
||||
#define ERR_RTP_PACKET_EXTERNALBUFFERNULL -23
|
||||
#define ERR_RTP_PACKET_ILLEGALBUFFERSIZE -24
|
||||
#define ERR_RTP_PACKET_INVALIDPACKET -25
|
||||
#define ERR_RTP_PACKET_TOOMANYCSRCS -26
|
||||
#define ERR_RTP_POLLTHREAD_ALREADYRUNNING -27
|
||||
#define ERR_RTP_POLLTHREAD_CANTINITMUTEX -28
|
||||
#define ERR_RTP_POLLTHREAD_CANTSTARTTHREAD -29
|
||||
#define ERR_RTP_RTCPCOMPOUND_INVALIDPACKET -30
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILDING -31
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYBUILT -32
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_ALREADYGOTREPORT -33
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_APPDATALENTOOBIG -34
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL -35
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALAPPDATALENGTH -36
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_ILLEGALSUBTYPE -37
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_INVALIDITEMTYPE -38
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_MAXPACKETSIZETOOSMALL -39
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE -40
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_NOREPORTPRESENT -41
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING -42
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT -43
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_REPORTNOTSTARTED -44
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_TOOMANYSSRCS -45
|
||||
#define ERR_RTP_RTCPCOMPPACKBUILDER_TOTALITEMLENGTHTOOBIG -46
|
||||
#define ERR_RTP_RTCPPACKETBUILDER_ALREADYINIT -47
|
||||
#define ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE -48
|
||||
#define ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT -49
|
||||
#define ERR_RTP_RTCPPACKETBUILDER_NOTINIT -50
|
||||
#define ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON -51
|
||||
#define ERR_RTP_SCHEDPARAMS_BADFRACTION -52
|
||||
#define ERR_RTP_SCHEDPARAMS_BADMINIMUMINTERVAL -53
|
||||
#define ERR_RTP_SCHEDPARAMS_INVALIDBANDWIDTH -54
|
||||
#define ERR_RTP_SDES_LENGTHTOOBIG -55
|
||||
#define ERR_RTP_SDES_MAXPRIVITEMS -56
|
||||
#define ERR_RTP_SDES_PREFIXNOTFOUND -57
|
||||
#define ERR_RTP_SESSION_ALREADYCREATED -58
|
||||
#define ERR_RTP_SESSION_CANTGETLOGINNAME -59
|
||||
#define ERR_RTP_SESSION_CANTINITMUTEX -60
|
||||
#define ERR_RTP_SESSION_MAXPACKETSIZETOOSMALL -61
|
||||
#define ERR_RTP_SESSION_NOTCREATED -62
|
||||
#define ERR_RTP_SESSION_UNSUPPORTEDTRANSMISSIONPROTOCOL -63
|
||||
#define ERR_RTP_SESSION_USINGPOLLTHREAD -64
|
||||
#define ERR_RTP_SOURCES_ALREADYHAVEOWNSSRC -65
|
||||
#define ERR_RTP_SOURCES_DONTHAVEOWNSSRC -66
|
||||
#define ERR_RTP_SOURCES_ILLEGALSDESTYPE -67
|
||||
#define ERR_RTP_SOURCES_SSRCEXISTS -68
|
||||
#define ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL -69
|
||||
#define ERR_RTP_UDPV4TRANS_ALREADYCREATED -70
|
||||
#define ERR_RTP_UDPV4TRANS_ALREADYINIT -71
|
||||
#define ERR_RTP_UDPV4TRANS_ALREADYWAITING -72
|
||||
#define ERR_RTP_UDPV4TRANS_CANTBINDRTCPSOCKET -73
|
||||
#define ERR_RTP_UDPV4TRANS_CANTBINDRTPSOCKET -74
|
||||
#define ERR_RTP_UDPV4TRANS_CANTCALCULATELOCALIP -75
|
||||
#define ERR_RTP_UDPV4TRANS_CANTCREATEABORTDESCRIPTORS -76
|
||||
#define ERR_RTP_UDPV4TRANS_CANTCREATEPIPE -77
|
||||
#define ERR_RTP_UDPV4TRANS_CANTCREATESOCKET -78
|
||||
#define ERR_RTP_UDPV4TRANS_CANTINITMUTEX -79
|
||||
#define ERR_RTP_UDPV4TRANS_CANTSETRTCPRECEIVEBUF -80
|
||||
#define ERR_RTP_UDPV4TRANS_CANTSETRTCPTRANSMITBUF -81
|
||||
#define ERR_RTP_UDPV4TRANS_CANTSETRTPRECEIVEBUF -82
|
||||
#define ERR_RTP_UDPV4TRANS_CANTSETRTPTRANSMITBUF -83
|
||||
#define ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP -84
|
||||
#define ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE -85
|
||||
#define ERR_RTP_UDPV4TRANS_ERRORINSELECT -86
|
||||
#define ERR_RTP_UDPV4TRANS_ILLEGALPARAMETERS -87
|
||||
#define ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE -88
|
||||
#define ERR_RTP_UDPV4TRANS_NOLOCALIPS -89
|
||||
#define ERR_RTP_UDPV4TRANS_NOMULTICASTSUPPORT -90
|
||||
#define ERR_RTP_UDPV4TRANS_NOSUCHENTRY -91
|
||||
#define ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS -92
|
||||
#define ERR_RTP_UDPV4TRANS_NOTCREATED -93
|
||||
#define ERR_RTP_UDPV4TRANS_NOTINIT -94
|
||||
#define ERR_RTP_UDPV4TRANS_NOTWAITING -95
|
||||
#define ERR_RTP_UDPV4TRANS_PORTBASENOTEVEN -96
|
||||
#define ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG -97
|
||||
#define ERR_RTP_UDPV6TRANS_ALREADYCREATED -98
|
||||
#define ERR_RTP_UDPV6TRANS_ALREADYINIT -99
|
||||
#define ERR_RTP_UDPV6TRANS_ALREADYWAITING -100
|
||||
#define ERR_RTP_UDPV6TRANS_CANTBINDRTCPSOCKET -101
|
||||
#define ERR_RTP_UDPV6TRANS_CANTBINDRTPSOCKET -102
|
||||
#define ERR_RTP_UDPV6TRANS_CANTCALCULATELOCALIP -103
|
||||
#define ERR_RTP_UDPV6TRANS_CANTCREATEABORTDESCRIPTORS -104
|
||||
#define ERR_RTP_UDPV6TRANS_CANTCREATEPIPE -105
|
||||
#define ERR_RTP_UDPV6TRANS_CANTCREATESOCKET -106
|
||||
#define ERR_RTP_UDPV6TRANS_CANTINITMUTEX -107
|
||||
#define ERR_RTP_UDPV6TRANS_CANTSETRTCPRECEIVEBUF -108
|
||||
#define ERR_RTP_UDPV6TRANS_CANTSETRTCPTRANSMITBUF -109
|
||||
#define ERR_RTP_UDPV6TRANS_CANTSETRTPRECEIVEBUF -110
|
||||
#define ERR_RTP_UDPV6TRANS_CANTSETRTPTRANSMITBUF -111
|
||||
#define ERR_RTP_UDPV6TRANS_COULDNTJOINMULTICASTGROUP -112
|
||||
#define ERR_RTP_UDPV6TRANS_DIFFERENTRECEIVEMODE -113
|
||||
#define ERR_RTP_UDPV6TRANS_ERRORINSELECT -114
|
||||
#define ERR_RTP_UDPV6TRANS_ILLEGALPARAMETERS -115
|
||||
#define ERR_RTP_UDPV6TRANS_INVALIDADDRESSTYPE -116
|
||||
#define ERR_RTP_UDPV6TRANS_NOLOCALIPS -117
|
||||
#define ERR_RTP_UDPV6TRANS_NOMULTICASTSUPPORT -118
|
||||
#define ERR_RTP_UDPV6TRANS_NOSUCHENTRY -119
|
||||
#define ERR_RTP_UDPV6TRANS_NOTAMULTICASTADDRESS -120
|
||||
#define ERR_RTP_UDPV6TRANS_NOTCREATED -121
|
||||
#define ERR_RTP_UDPV6TRANS_NOTINIT -122
|
||||
#define ERR_RTP_UDPV6TRANS_NOTWAITING -123
|
||||
#define ERR_RTP_UDPV6TRANS_PORTBASENOTEVEN -124
|
||||
#define ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG -125
|
||||
#define ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE -126
|
||||
#define ERR_RTP_SESSION_USERDEFINEDTRANSMITTERNULL -127
|
||||
#define ERR_RTP_FAKETRANS_ALREADYCREATED -128
|
||||
#define ERR_RTP_FAKETRANS_ALREADYINIT -129
|
||||
#define ERR_RTP_FAKETRANS_ALREADYWAITING -130
|
||||
#define ERR_RTP_FAKETRANS_CANTBINDRTCPSOCKET -131
|
||||
#define ERR_RTP_FAKETRANS_CANTBINDRTPSOCKET -132
|
||||
#define ERR_RTP_FAKETRANS_CANTCALCULATELOCALIP -133
|
||||
#define ERR_RTP_FAKETRANS_CANTCREATEABORTDESCRIPTORS -134
|
||||
#define ERR_RTP_FAKETRANS_CANTCREATEPIPE -135
|
||||
#define ERR_RTP_FAKETRANS_CANTCREATESOCKET -136
|
||||
#define ERR_RTP_FAKETRANS_CANTINITMUTEX -137
|
||||
#define ERR_RTP_FAKETRANS_CANTSETRTCPRECEIVEBUF -138
|
||||
#define ERR_RTP_FAKETRANS_CANTSETRTCPTRANSMITBUF -139
|
||||
#define ERR_RTP_FAKETRANS_CANTSETRTPRECEIVEBUF -140
|
||||
#define ERR_RTP_FAKETRANS_CANTSETRTPTRANSMITBUF -141
|
||||
#define ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP -142
|
||||
#define ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE -143
|
||||
#define ERR_RTP_FAKETRANS_ERRORINSELECT -144
|
||||
#define ERR_RTP_FAKETRANS_ILLEGALPARAMETERS -145
|
||||
#define ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE -146
|
||||
#define ERR_RTP_FAKETRANS_NOLOCALIPS -147
|
||||
#define ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT -148
|
||||
#define ERR_RTP_FAKETRANS_NOSUCHENTRY -149
|
||||
#define ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS -150
|
||||
#define ERR_RTP_FAKETRANS_NOTCREATED -151
|
||||
#define ERR_RTP_FAKETRANS_NOTINIT -152
|
||||
#define ERR_RTP_FAKETRANS_NOTWAITING -153
|
||||
#define ERR_RTP_FAKETRANS_PORTBASENOTEVEN -154
|
||||
#define ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG -155
|
||||
#define ERR_RTP_FAKETRANS_INVALIDEVENT -156
|
||||
#define ERR_RTP_FAKETRANS_SRCADDRNOTSET -157
|
||||
#define ERR_RTP_FAKETRANS_NOTNETBUFFER -158
|
||||
#define ERR_RTP_FAKETRANS_WAITNOTIMPLEMENTED -159
|
||||
#define ERR_RTP_INVALID_PACKET_VERISON -160
|
||||
|
||||
|
||||
#endif // RTPERRORS_H
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,234 +0,0 @@
|
||||
/*
|
||||
|
||||
This class allows for jrtp to send GstBuffers. Allows for integration of RTP
|
||||
into gstreamer.
|
||||
Copyright (c) 2005 Philippe Khalaf <burger@speedy.org>
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2004 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.luc.ac.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.luc.ac.be), a research center of the "Limburgs Universitair
|
||||
Centrum" (http://www.luc.ac.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPGSTV4TRANSMITTER_H
|
||||
|
||||
#define RTPGSTV4TRANSMITTER_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
|
||||
#ifdef RTP_SUPPORT_GST
|
||||
|
||||
#include "rtptransmitter.h"
|
||||
#include "rtpipv4destination.h"
|
||||
#include "rtphashtable.h"
|
||||
#include "rtpkeyhashtable.h"
|
||||
#include <list>
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/net/gstnetbuffer.h>
|
||||
|
||||
#ifdef RTP_SUPPORT_THREAD
|
||||
#include <jmutex.h>
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
#define RTPGSTv4TRANS_HASHSIZE 8317
|
||||
#define RTPGSTv4TRANS_DEFAULTPORTBASE 5000
|
||||
|
||||
class RTPGSTv4TransmissionParams : public RTPTransmissionParams
|
||||
{
|
||||
public:
|
||||
RTPGSTv4TransmissionParams():RTPTransmissionParams(RTPTransmitter::IPv4GSTProto) { portbase = RTPGSTv4TRANS_DEFAULTPORTBASE; bindIP = 0; multicastTTL = 1; rtpsrcpad = NULL, rtcpsrcpad = NULL; currentdata = NULL;}
|
||||
void SetBindIP(u_int32_t ip) { bindIP = ip; }
|
||||
void SetPortbase(u_int16_t pbase) { portbase = pbase; }
|
||||
void SetMulticastTTL(u_int8_t mcastTTL) { multicastTTL = mcastTTL; }
|
||||
void SetLocalIPList(std::list<u_int32_t> &iplist) { localIPs = iplist; }
|
||||
void ClearLocalIPList() { localIPs.clear(); }
|
||||
void SetGstRTPSrc(GstPad *src) { rtpsrcpad = src; }
|
||||
void SetGstRTCPSrc(GstPad *src) { rtcpsrcpad = src; }
|
||||
void SetCurrentData(GstNetBuffer *data) { currentdata = data; }
|
||||
void SetCurrentDataType(bool type) { currentdatatype = type; }
|
||||
u_int32_t GetBindIP() const { return bindIP; }
|
||||
u_int16_t GetPortbase() const { return portbase; }
|
||||
u_int8_t GetMulticastTTL() const { return multicastTTL; }
|
||||
const std::list<u_int32_t> &GetLocalIPList() const { return localIPs; }
|
||||
GstPad* GetGstRTPSrc() const { return rtpsrcpad; }
|
||||
GstPad* GetGstRTCPSrc() const { return rtcpsrcpad; }
|
||||
GstNetBuffer* GetCurrentData() const { return currentdata; }
|
||||
bool GetCurrentDataType() const { return currentdatatype; }
|
||||
private:
|
||||
u_int16_t portbase;
|
||||
u_int32_t bindIP;
|
||||
std::list<u_int32_t> localIPs;
|
||||
u_int8_t multicastTTL;
|
||||
GstPad *rtpsrcpad;
|
||||
GstPad *rtcpsrcpad;
|
||||
bool currentdatatype;
|
||||
GstNetBuffer* currentdata;
|
||||
};
|
||||
|
||||
class RTPGSTv4TransmissionInfo : public RTPTransmissionInfo
|
||||
{
|
||||
public:
|
||||
RTPGSTv4TransmissionInfo(std::list<u_int32_t> iplist,
|
||||
GstPad* rtpsrc, GstPad* rtcpsrc, RTPGSTv4TransmissionParams *transparams) :
|
||||
RTPTransmissionInfo(RTPTransmitter::IPv4GSTProto)
|
||||
{ localIPlist = iplist; rtpsrcpad = rtpsrc;
|
||||
rtcpsrcpad = rtcpsrc; params = transparams; }
|
||||
|
||||
~RTPGSTv4TransmissionInfo() { }
|
||||
std::list<u_int32_t> GetLocalIPList() const { return localIPlist; }
|
||||
GstPad* GetGstRTPSrc() { return rtpsrcpad; }
|
||||
GstPad* GetGstRTCPSrc() { return rtcpsrcpad; }
|
||||
RTPGSTv4TransmissionParams* GetTransParams() { return params; }
|
||||
private:
|
||||
std::list<u_int32_t> localIPlist;
|
||||
GstPad *rtpsrcpad;
|
||||
GstPad *rtcpsrcpad;
|
||||
RTPGSTv4TransmissionParams *params;
|
||||
};
|
||||
|
||||
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||
inline int RTPGSTv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPGSTv4TRANS_HASHSIZE; }
|
||||
inline int RTPGSTv4Trans_GetHashIndex_u_int32_t(const u_int32_t &k) { return k%RTPGSTv4TRANS_HASHSIZE; }
|
||||
#else // No support for inline function as template parameter
|
||||
int RTPGSTv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d);
|
||||
int RTPGSTv4Trans_GetHashIndex_u_int32_t(const u_int32_t &k);
|
||||
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||
|
||||
#define RTPGSTv4TRANS_HEADERSIZE (20+8)
|
||||
|
||||
class RTPGSTv4Transmitter : public RTPTransmitter
|
||||
{
|
||||
public:
|
||||
RTPGSTv4Transmitter();
|
||||
~RTPGSTv4Transmitter();
|
||||
|
||||
int Init(bool treadsafe);
|
||||
int Create(size_t maxpacksize,const RTPTransmissionParams *transparams);
|
||||
void Destroy();
|
||||
RTPTransmissionInfo *GetTransmissionInfo();
|
||||
|
||||
int GetLocalHostName(u_int8_t *buffer,size_t *bufferlength);
|
||||
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
||||
size_t GetHeaderOverhead() { return RTPGSTv4TRANS_HEADERSIZE; }
|
||||
|
||||
int Poll();
|
||||
int WaitForIncomingData(const RTPTime &delay,bool *dataavailable = 0);
|
||||
int AbortWait();
|
||||
|
||||
int SendRTPData(const void *data,size_t len);
|
||||
int SendRTCPData(const void *data,size_t len);
|
||||
|
||||
void ResetPacketCount();
|
||||
u_int32_t GetNumRTPPacketsSent();
|
||||
u_int32_t GetNumRTCPPacketsSent();
|
||||
|
||||
int AddDestination(const RTPAddress &addr);
|
||||
int DeleteDestination(const RTPAddress &addr);
|
||||
void ClearDestinations();
|
||||
|
||||
bool SupportsMulticasting();
|
||||
int JoinMulticastGroup(const RTPAddress &addr);
|
||||
int LeaveMulticastGroup(const RTPAddress &addr);
|
||||
void LeaveAllMulticastGroups();
|
||||
|
||||
int SetReceiveMode(RTPTransmitter::ReceiveMode m);
|
||||
int AddToIgnoreList(const RTPAddress &addr);
|
||||
int DeleteFromIgnoreList(const RTPAddress &addr);
|
||||
void ClearIgnoreList();
|
||||
int AddToAcceptList(const RTPAddress &addr);
|
||||
int DeleteFromAcceptList(const RTPAddress &addr);
|
||||
void ClearAcceptList();
|
||||
int SetMaximumPacketSize(size_t s);
|
||||
|
||||
bool NewDataAvailable();
|
||||
RTPRawPacket *GetNextPacket();
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
int CreateLocalIPList();
|
||||
bool GetLocalIPList_Interfaces();
|
||||
void GetLocalIPList_DNS();
|
||||
void AddLoopbackAddress();
|
||||
void FlushPackets();
|
||||
int FakePoll();
|
||||
int ProcessAddAcceptIgnoreEntry(u_int32_t ip,u_int16_t port);
|
||||
int ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t port);
|
||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||
bool SetMulticastTTL(u_int8_t ttl);
|
||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||
bool ShouldAcceptData(u_int32_t srcip,u_int16_t srcport);
|
||||
void ClearAcceptIgnoreInfo();
|
||||
|
||||
RTPGSTv4TransmissionParams *params;
|
||||
bool init;
|
||||
bool created;
|
||||
bool waitingfordata;
|
||||
std::list<u_int32_t> localIPs;
|
||||
u_int16_t portbase;
|
||||
u_int8_t multicastTTL;
|
||||
RTPTransmitter::ReceiveMode receivemode;
|
||||
|
||||
u_int8_t *localhostname;
|
||||
size_t localhostnamelength;
|
||||
|
||||
RTPHashTable<const RTPIPv4Destination,RTPGSTv4Trans_GetHashIndex_IPv4Dest,RTPGSTv4TRANS_HASHSIZE> destinations;
|
||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||
// RTPHashTable<const u_int32_t,RTPGSTv4Trans_GetHashIndex_u_int32_t,RTPGSTv4TRANS_HASHSIZE> multicastgroups;
|
||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||
std::list<RTPRawPacket*> rawpacketlist;
|
||||
|
||||
bool supportsmulticasting;
|
||||
size_t maxpacksize;
|
||||
|
||||
class PortInfo
|
||||
{
|
||||
public:
|
||||
PortInfo() { all = false; }
|
||||
|
||||
bool all;
|
||||
std::list<u_int16_t> portlist;
|
||||
};
|
||||
|
||||
RTPKeyHashTable<const u_int32_t,PortInfo*,RTPGSTv4Trans_GetHashIndex_u_int32_t,RTPGSTv4TRANS_HASHSIZE> acceptignoreinfo;
|
||||
|
||||
int CreateAbortDescriptors();
|
||||
void DestroyAbortDescriptors();
|
||||
void AbortWaitInternal();
|
||||
#ifdef RTP_SUPPORT_THREAD
|
||||
JMutex mainmutex,waitmutex;
|
||||
int threadsafe;
|
||||
#endif // RTP_SUPPORT_THREAD
|
||||
|
||||
u_int32_t rtppackcount,rtcppackcount;
|
||||
};
|
||||
|
||||
#endif // RTP_SUPPORT_GST
|
||||
|
||||
#endif // RTPGSTv4TRANSMITTER_H
|
||||
|
@ -1,326 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPHASHTABLE_H
|
||||
|
||||
#define RTPHASHTABLE_H
|
||||
|
||||
#include "rtperrors.h"
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
#include <iostream>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
//template<class Element,int GetIndex(const Element &k),int hashsize>
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
class RTPHashTable
|
||||
{
|
||||
public:
|
||||
RTPHashTable();
|
||||
~RTPHashTable() { Clear(); }
|
||||
|
||||
void GotoFirstElement() { curhashelem = firsthashelem; }
|
||||
void GotoLastElement() { curhashelem = lasthashelem; }
|
||||
bool HasCurrentElement() { return (curhashelem == 0)?false:true; }
|
||||
int DeleteCurrentElement();
|
||||
Element &GetCurrentElement() { return curhashelem->GetElement(); }
|
||||
int GotoElement(const Element &e);
|
||||
bool HasElement(const Element &e);
|
||||
void GotoNextElement();
|
||||
void GotoPreviousElement();
|
||||
void Clear();
|
||||
|
||||
int AddElement(const Element &elem);
|
||||
int DeleteElement(const Element &elem);
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
void Dump();
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
class HashElement
|
||||
{
|
||||
public:
|
||||
HashElement(const Element &e,int index):element(e) { hashprev = 0; hashnext = 0; listnext = 0; listprev = 0; hashindex = index; }
|
||||
int GetHashIndex() { return hashindex; }
|
||||
Element &GetElement() { return element; }
|
||||
#ifdef RTPDEBUG
|
||||
void Dump() { std::cout << "\tHash index " << hashindex << " | Element " << element << std::endl; }
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
int hashindex;
|
||||
Element element;
|
||||
public:
|
||||
HashElement *hashprev,*hashnext;
|
||||
HashElement *listprev,*listnext;
|
||||
};
|
||||
|
||||
HashElement *table[hashsize];
|
||||
HashElement *firsthashelem,*lasthashelem;
|
||||
HashElement *curhashelem;
|
||||
};
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline RTPHashTable<Element,GetIndex,hashsize>::RTPHashTable()
|
||||
{
|
||||
for (int i = 0 ; i < hashsize ; i++)
|
||||
table[i] = 0;
|
||||
firsthashelem = 0;
|
||||
lasthashelem = 0;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline int RTPHashTable<Element,GetIndex,hashsize>::DeleteCurrentElement()
|
||||
{
|
||||
if (curhashelem)
|
||||
{
|
||||
HashElement *tmp1,*tmp2;
|
||||
int index;
|
||||
|
||||
// First, relink elements in current hash bucket
|
||||
|
||||
index = curhashelem->GetHashIndex();
|
||||
tmp1 = curhashelem->hashprev;
|
||||
tmp2 = curhashelem->hashnext;
|
||||
if (tmp1 == 0) // no previous element in hash bucket
|
||||
{
|
||||
table[index] = tmp2;
|
||||
if (tmp2 != 0)
|
||||
tmp2->hashprev = 0;
|
||||
}
|
||||
else // there is a previous element in the hash bucket
|
||||
{
|
||||
tmp1->hashnext = tmp2;
|
||||
if (tmp2 != 0)
|
||||
tmp2->hashprev = tmp1;
|
||||
}
|
||||
|
||||
// Relink elements in list
|
||||
|
||||
tmp1 = curhashelem->listprev;
|
||||
tmp2 = curhashelem->listnext;
|
||||
if (tmp1 == 0) // curhashelem is first in list
|
||||
{
|
||||
firsthashelem = tmp2;
|
||||
if (tmp2 != 0)
|
||||
tmp2->listprev = 0;
|
||||
else // curhashelem is also last in list
|
||||
lasthashelem = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp1->listnext = tmp2;
|
||||
if (tmp2 != 0)
|
||||
tmp2->listprev = tmp1;
|
||||
else // curhashelem is last in list
|
||||
lasthashelem = tmp1;
|
||||
}
|
||||
|
||||
// finally, with everything being relinked, we can delete curhashelem
|
||||
delete curhashelem;
|
||||
curhashelem = tmp2; // Set to next element in the list
|
||||
}
|
||||
else
|
||||
return ERR_RTP_HASHTABLE_NOCURRENTELEMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline int RTPHashTable<Element,GetIndex,hashsize>::GotoElement(const Element &e)
|
||||
{
|
||||
int index;
|
||||
bool found;
|
||||
|
||||
index = GetIndex::GetIndex(e);
|
||||
if (index >= hashsize)
|
||||
return ERR_RTP_HASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX;
|
||||
|
||||
curhashelem = table[index];
|
||||
found = false;
|
||||
while(!found && curhashelem != 0)
|
||||
{
|
||||
if (curhashelem->GetElement() == e)
|
||||
found = true;
|
||||
else
|
||||
curhashelem = curhashelem->hashnext;
|
||||
}
|
||||
if (!found)
|
||||
return ERR_RTP_HASHTABLE_ELEMENTNOTFOUND;
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline bool RTPHashTable<Element,GetIndex,hashsize>::HasElement(const Element &e)
|
||||
{
|
||||
int index;
|
||||
bool found;
|
||||
HashElement *tmp;
|
||||
|
||||
index = GetIndex::GetIndex(e);
|
||||
if (index >= hashsize)
|
||||
return false;
|
||||
|
||||
tmp = table[index];
|
||||
found = false;
|
||||
while(!found && tmp != 0)
|
||||
{
|
||||
if (tmp->GetElement() == e)
|
||||
found = true;
|
||||
else
|
||||
tmp = tmp->hashnext;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline void RTPHashTable<Element,GetIndex,hashsize>::GotoNextElement()
|
||||
{
|
||||
if (curhashelem)
|
||||
curhashelem = curhashelem->listnext;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline void RTPHashTable<Element,GetIndex,hashsize>::GotoPreviousElement()
|
||||
{
|
||||
if (curhashelem)
|
||||
curhashelem = curhashelem->listprev;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline void RTPHashTable<Element,GetIndex,hashsize>::Clear()
|
||||
{
|
||||
HashElement *tmp1,*tmp2;
|
||||
|
||||
for (int i = 0 ; i < hashsize ; i++)
|
||||
table[i] = 0;
|
||||
|
||||
tmp1 = firsthashelem;
|
||||
while (tmp1 != 0)
|
||||
{
|
||||
tmp2 = tmp1->listnext;
|
||||
delete tmp1;
|
||||
tmp1 = tmp2;
|
||||
}
|
||||
firsthashelem = 0;
|
||||
lasthashelem = 0;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline int RTPHashTable<Element,GetIndex,hashsize>::AddElement(const Element &elem)
|
||||
{
|
||||
int index;
|
||||
bool found;
|
||||
HashElement *e,*newelem;
|
||||
|
||||
index = GetIndex::GetIndex(elem);
|
||||
if (index >= hashsize)
|
||||
return ERR_RTP_HASHTABLE_FUNCTIONRETURNEDINVALIDHASHINDEX;
|
||||
|
||||
e = table[index];
|
||||
found = false;
|
||||
while(!found && e != 0)
|
||||
{
|
||||
if (e->GetElement() == elem)
|
||||
found = true;
|
||||
else
|
||||
e = e->hashnext;
|
||||
}
|
||||
if (found)
|
||||
return ERR_RTP_HASHTABLE_ELEMENTALREADYEXISTS;
|
||||
|
||||
// Okay, the key doesn't exist, so we can add the new element in the hash table
|
||||
|
||||
newelem = new HashElement(elem,index);
|
||||
if (newelem == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
e = table[index];
|
||||
table[index] = newelem;
|
||||
newelem->hashnext = e;
|
||||
if (e != 0)
|
||||
e->hashprev = newelem;
|
||||
|
||||
// Now, we still got to add it to the linked list
|
||||
|
||||
if (firsthashelem == 0)
|
||||
{
|
||||
firsthashelem = newelem;
|
||||
lasthashelem = newelem;
|
||||
}
|
||||
else // there already are some elements in the list
|
||||
{
|
||||
lasthashelem->listnext = newelem;
|
||||
newelem->listprev = lasthashelem;
|
||||
lasthashelem = newelem;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline int RTPHashTable<Element,GetIndex,hashsize>::DeleteElement(const Element &elem)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = GotoElement(elem);
|
||||
if (status < 0)
|
||||
return status;
|
||||
return DeleteCurrentElement();
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
template<class Element,class GetIndex,int hashsize>
|
||||
inline void RTPHashTable<Element,GetIndex,hashsize>::Dump()
|
||||
{
|
||||
HashElement *e;
|
||||
|
||||
std::cout << "DUMPING TABLE CONTENTS:" << std::endl;
|
||||
for (int i = 0 ; i < hashsize ; i++)
|
||||
{
|
||||
e = table[i];
|
||||
while (e != 0)
|
||||
{
|
||||
e->Dump();
|
||||
e = e->hashnext;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "DUMPING LIST CONTENTS:" << std::endl;
|
||||
e = firsthashelem;
|
||||
while (e != 0)
|
||||
{
|
||||
e->Dump();
|
||||
e = e->listnext;
|
||||
}
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#endif // RTPHASHTABLE_H
|
||||
|
@ -1,282 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtpinternalsourcedata.h"
|
||||
#include "rtppacket.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
#define RTPINTERNALSOURCEDATA_MAXPROBATIONPACKETS 32
|
||||
|
||||
RTPInternalSourceData::RTPInternalSourceData(uint32_t ssrc,RTPSources::ProbationType probtype):RTPSourceData(ssrc)
|
||||
{
|
||||
#ifdef RTP_SUPPORT_PROBATION
|
||||
probationtype = probtype;
|
||||
#endif // RTP_SUPPORT_PROBATION
|
||||
}
|
||||
|
||||
RTPInternalSourceData::~RTPInternalSourceData()
|
||||
{
|
||||
}
|
||||
|
||||
// The following function should delete rtppack if necessary
|
||||
int RTPInternalSourceData::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,bool *stored)
|
||||
{
|
||||
bool accept,onprobation,applyprobation;
|
||||
double tsunit;
|
||||
|
||||
*stored = false;
|
||||
|
||||
if (timestampunit < 0)
|
||||
tsunit = INF_GetEstimatedTimestampUnit();
|
||||
else
|
||||
tsunit = timestampunit;
|
||||
|
||||
#ifdef RTP_SUPPORT_PROBATION
|
||||
if (validated) // If the source is our own process, we can already be validated. No
|
||||
applyprobation = false; // probation should be applied in that case.
|
||||
else
|
||||
{
|
||||
if (probationtype == RTPSources::NoProbation)
|
||||
applyprobation = false;
|
||||
else
|
||||
applyprobation = true;
|
||||
}
|
||||
#else
|
||||
applyprobation = false;
|
||||
#endif // RTP_SUPPORT_PROBATION
|
||||
|
||||
stats.ProcessPacket(rtppack,receivetime,tsunit,ownssrc,&accept,applyprobation,&onprobation);
|
||||
|
||||
#ifdef RTP_SUPPORT_PROBATION
|
||||
switch (probationtype)
|
||||
{
|
||||
case RTPSources::ProbationStore:
|
||||
if (!(onprobation || accept))
|
||||
return 0;
|
||||
if (accept)
|
||||
validated = true;
|
||||
break;
|
||||
case RTPSources::ProbationDiscard:
|
||||
case RTPSources::NoProbation:
|
||||
if (!accept)
|
||||
return 0;
|
||||
validated = true;
|
||||
break;
|
||||
default:
|
||||
return ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE;
|
||||
}
|
||||
#else
|
||||
if (!accept)
|
||||
return 0;
|
||||
validated = true;
|
||||
#endif // RTP_SUPPORT_PROBATION;
|
||||
|
||||
if (validated && !ownssrc) // for own ssrc these variables depend on the outgoing packets, not on the incoming
|
||||
issender = true;
|
||||
|
||||
// Now, we can place the packet in the queue
|
||||
|
||||
if (packetlist.empty())
|
||||
{
|
||||
*stored = true;
|
||||
packetlist.push_back(rtppack);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!validated) // still on probation
|
||||
{
|
||||
// Make sure that we don't buffer too much packets to avoid wasting memory
|
||||
// on a bad source. Delete the packet in the queue with the lowest sequence
|
||||
// number.
|
||||
if (packetlist.size() == RTPINTERNALSOURCEDATA_MAXPROBATIONPACKETS)
|
||||
{
|
||||
RTPPacket *p = *(packetlist.begin());
|
||||
packetlist.pop_front();
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
|
||||
// find the right position to insert the packet
|
||||
|
||||
std::list<RTPPacket*>::iterator it,start;
|
||||
bool done = false;
|
||||
uint32_t newseqnr = rtppack->GetExtendedSequenceNumber();
|
||||
|
||||
it = packetlist.end();
|
||||
--it;
|
||||
start = packetlist.begin();
|
||||
|
||||
while (!done)
|
||||
{
|
||||
RTPPacket *p;
|
||||
uint32_t seqnr;
|
||||
|
||||
p = *it;
|
||||
seqnr = p->GetExtendedSequenceNumber();
|
||||
if (seqnr > newseqnr)
|
||||
{
|
||||
if (it != start)
|
||||
--it;
|
||||
else // we're at the start of the list
|
||||
{
|
||||
*stored = true;
|
||||
done = true;
|
||||
packetlist.push_front(rtppack);
|
||||
}
|
||||
}
|
||||
else if (seqnr < newseqnr) // insert after this packet
|
||||
{
|
||||
++it;
|
||||
packetlist.insert(it,rtppack);
|
||||
done = true;
|
||||
*stored = true;
|
||||
}
|
||||
else // they're equal !! Drop packet
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPInternalSourceData::ProcessSDESItem(uint8_t sdesid,const uint8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis)
|
||||
{
|
||||
*cnamecollis = false;
|
||||
|
||||
stats.SetLastMessageTime(receivetime);
|
||||
|
||||
switch(sdesid)
|
||||
{
|
||||
case RTCP_SDES_ID_CNAME:
|
||||
{
|
||||
size_t curlen;
|
||||
uint8_t *oldcname;
|
||||
|
||||
// NOTE: we're going to make sure that the CNAME is only set once.
|
||||
oldcname = SDESinf.GetCNAME(&curlen);
|
||||
if (curlen == 0)
|
||||
{
|
||||
// if CNAME is set, the source is validated
|
||||
SDESinf.SetCNAME(data,itemlen);
|
||||
validated = true;
|
||||
}
|
||||
else // check if this CNAME is equal to the one that is already present
|
||||
{
|
||||
if (curlen != itemlen)
|
||||
*cnamecollis = true;
|
||||
else
|
||||
{
|
||||
if (memcmp(data,oldcname,itemlen) != 0)
|
||||
*cnamecollis = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RTCP_SDES_ID_NAME:
|
||||
{
|
||||
uint8_t *oldname;
|
||||
size_t oldlen;
|
||||
|
||||
oldname = SDESinf.GetName(&oldlen);
|
||||
if (oldlen == 0) // Name not set
|
||||
return SDESinf.SetName(data,itemlen);
|
||||
}
|
||||
break;
|
||||
case RTCP_SDES_ID_EMAIL:
|
||||
{
|
||||
uint8_t *oldemail;
|
||||
size_t oldlen;
|
||||
|
||||
oldemail = SDESinf.GetEMail(&oldlen);
|
||||
if (oldlen == 0)
|
||||
return SDESinf.SetEMail(data,itemlen);
|
||||
}
|
||||
break;
|
||||
case RTCP_SDES_ID_PHONE:
|
||||
return SDESinf.SetPhone(data,itemlen);
|
||||
case RTCP_SDES_ID_LOCATION:
|
||||
return SDESinf.SetLocation(data,itemlen);
|
||||
case RTCP_SDES_ID_TOOL:
|
||||
{
|
||||
uint8_t *oldtool;
|
||||
size_t oldlen;
|
||||
|
||||
oldtool = SDESinf.GetTool(&oldlen);
|
||||
if (oldlen == 0)
|
||||
return SDESinf.SetTool(data,itemlen);
|
||||
}
|
||||
break;
|
||||
case RTCP_SDES_ID_NOTE:
|
||||
stats.SetLastNoteTime(receivetime);
|
||||
return SDESinf.SetNote(data,itemlen);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
|
||||
int RTPInternalSourceData::ProcessPrivateSDESItem(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen,const RTPTime &receivetime)
|
||||
{
|
||||
int status;
|
||||
|
||||
stats.SetLastMessageTime(receivetime);
|
||||
status = SDESinf.SetPrivateValue(prefix,prefixlen,value,valuelen);
|
||||
if (status == ERR_RTP_SDES_MAXPRIVITEMS)
|
||||
return 0; // don't stop processing just because the number of items is full
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
|
||||
int RTPInternalSourceData::ProcessBYEPacket(const uint8_t *reason,size_t reasonlen,const RTPTime &receivetime)
|
||||
{
|
||||
if (byereason)
|
||||
{
|
||||
delete [] byereason;
|
||||
byereason = 0;
|
||||
byereasonlen = 0;
|
||||
}
|
||||
|
||||
byetime = receivetime;
|
||||
byereason = new uint8_t[reasonlen];
|
||||
if (byereason == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
memcpy(byereason,reason,reasonlen);
|
||||
byereasonlen = reasonlen;
|
||||
receivedbye = true;
|
||||
stats.SetLastMessageTime(receivetime);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPINTERNALSOURCEDATA_H
|
||||
|
||||
#define RTPINTERNALSOURCEDATA_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtpsourcedata.h"
|
||||
#include "rtpaddress.h"
|
||||
#include "rtptimeutilities.h"
|
||||
#include "rtpsources.h"
|
||||
|
||||
class RTPInternalSourceData : public RTPSourceData
|
||||
{
|
||||
public:
|
||||
RTPInternalSourceData(uint32_t ssrc, RTPSources::ProbationType probtype);
|
||||
~RTPInternalSourceData();
|
||||
|
||||
int ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,bool *stored);
|
||||
void ProcessSenderInfo(const RTPNTPTime &ntptime,uint32_t rtptime,uint32_t packetcount,
|
||||
uint32_t octetcount,const RTPTime &receivetime) { SRprevinf = SRinf; SRinf.Set(ntptime,rtptime,packetcount,octetcount,receivetime); stats.SetLastMessageTime(receivetime); }
|
||||
void ProcessReportBlock(uint8_t fractionlost,int32_t lostpackets,uint32_t exthighseqnr,
|
||||
uint32_t jitter,uint32_t lsr,uint32_t dlsr,
|
||||
const RTPTime &receivetime) { RRprevinf = RRinf; RRinf.Set(fractionlost,lostpackets,exthighseqnr,jitter,lsr,dlsr,receivetime); stats.SetLastMessageTime(receivetime); }
|
||||
void UpdateMessageTime(const RTPTime &receivetime) { stats.SetLastMessageTime(receivetime); }
|
||||
int ProcessSDESItem(uint8_t sdesid,const uint8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis);
|
||||
#ifdef RTP_SUPPORT_SDESPRIV
|
||||
int ProcessPrivateSDESItem(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen,const RTPTime &receivetime);
|
||||
#endif // RTP_SUPPORT_SDESPRIV
|
||||
int ProcessBYEPacket(const uint8_t *reason,size_t reasonlen,const RTPTime &receivetime);
|
||||
|
||||
int SetRTPDataAddress(const RTPAddress *a);
|
||||
int SetRTCPDataAddress(const RTPAddress *a);
|
||||
|
||||
void ClearSenderFlag() { issender = false; }
|
||||
void SentRTPPacket() { if (!ownssrc) return; RTPTime t = RTPTime::CurrentTime(); issender = true; stats.SetLastRTPPacketTime(t); stats.SetLastMessageTime(t); }
|
||||
void SetOwnSSRC() { ownssrc = true; validated = true; }
|
||||
void SetCSRC() { validated = true; iscsrc = true; }
|
||||
void ClearNote() { SDESinf.SetNote(0,0); }
|
||||
|
||||
#ifdef RTP_SUPPORT_PROBATION
|
||||
private:
|
||||
RTPSources::ProbationType probationtype;
|
||||
#endif // RTP_SUPPORT_PROBATION
|
||||
};
|
||||
|
||||
inline int RTPInternalSourceData::SetRTPDataAddress(const RTPAddress *a)
|
||||
{
|
||||
if (a == 0)
|
||||
{
|
||||
if (rtpaddr)
|
||||
{
|
||||
delete rtpaddr;
|
||||
rtpaddr = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RTPAddress *newaddr = a->CreateCopy();
|
||||
if (newaddr == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
if (rtpaddr && a != rtpaddr)
|
||||
delete rtpaddr;
|
||||
rtpaddr = newaddr;
|
||||
}
|
||||
isrtpaddrset = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline int RTPInternalSourceData::SetRTCPDataAddress(const RTPAddress *a)
|
||||
{
|
||||
if (a == 0)
|
||||
{
|
||||
if (rtcpaddr)
|
||||
{
|
||||
delete rtcpaddr;
|
||||
rtcpaddr = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RTPAddress *newaddr = a->CreateCopy();
|
||||
if (newaddr == 0)
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
|
||||
if (rtcpaddr && a != rtcpaddr)
|
||||
delete rtcpaddr;
|
||||
rtcpaddr = newaddr;
|
||||
}
|
||||
isrtcpaddrset = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // RTPINTERNALSOURCEDATA_H
|
||||
|
@ -1,82 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtpipv4address.h"
|
||||
#ifdef RTPDEBUG
|
||||
#include "rtpdefines.h"
|
||||
#include <stdio.h>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
bool RTPIPv4Address::IsSameAddress(const RTPAddress *addr) const
|
||||
{
|
||||
if (addr == 0)
|
||||
return false;
|
||||
if (addr->GetAddressType() != IPv4Address)
|
||||
return false;
|
||||
|
||||
const RTPIPv4Address *addr2 = (const RTPIPv4Address *)addr;
|
||||
if (addr2->GetIP() == ip && addr2->GetPort() == port)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool RTPIPv4Address::IsFromSameHost(const RTPAddress *addr) const
|
||||
{
|
||||
if (addr == 0)
|
||||
return false;
|
||||
if (addr->GetAddressType() != IPv4Address)
|
||||
return false;
|
||||
|
||||
const RTPIPv4Address *addr2 = (const RTPIPv4Address *)addr;
|
||||
if (addr2->GetIP() == ip)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
RTPAddress *RTPIPv4Address::CreateCopy() const
|
||||
{
|
||||
RTPIPv4Address *a = new RTPIPv4Address(ip,port);
|
||||
return a;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
std::string RTPIPv4Address::GetAddressString() const
|
||||
{
|
||||
char str[24];
|
||||
|
||||
RTP_SNPRINTF(str,24,"%d.%d.%d.%d:%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),
|
||||
(int)(ip&0xFF),(int)port);
|
||||
return std::string(str);
|
||||
}
|
||||
#endif // RTPDEBUG
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPIPV4ADDRESS_H
|
||||
|
||||
#define RTPIPV4ADDRESS_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#include "rtpaddress.h"
|
||||
#include "rtptypes.h"
|
||||
|
||||
class RTPIPv4Address : public RTPAddress
|
||||
{
|
||||
public:
|
||||
RTPIPv4Address(uint32_t ip = 0, uint16_t port = 0):RTPAddress(IPv4Address) { RTPIPv4Address::ip = ip; RTPIPv4Address::port = port; }
|
||||
RTPIPv4Address(const uint8_t ip[4],uint16_t port = 0):RTPAddress(IPv4Address) { RTPIPv4Address::ip = (uint32_t)ip[3]; RTPIPv4Address::ip |= (((uint32_t)ip[2])<<8); RTPIPv4Address::ip |= (((uint32_t)ip[1])<<16); RTPIPv4Address::ip |= (((uint32_t)ip[0])<<24); RTPIPv4Address::port = port; }
|
||||
~RTPIPv4Address() { }
|
||||
void SetIP(uint32_t ip) { RTPIPv4Address::ip = ip; }
|
||||
void SetIP(const uint8_t ip[4]) { RTPIPv4Address::ip = (uint32_t)ip[3]; RTPIPv4Address::ip |= (((uint32_t)ip[2])<<8); RTPIPv4Address::ip |= (((uint32_t)ip[1])<<16); RTPIPv4Address::ip |= (((uint32_t)ip[0])<<24); }
|
||||
void SetPort(uint16_t port) { RTPIPv4Address::port = port; }
|
||||
uint32_t GetIP() const { return ip; }
|
||||
uint16_t GetPort() const { return port; }
|
||||
RTPAddress *CreateCopy() const;
|
||||
bool IsSameAddress(const RTPAddress *addr) const;
|
||||
bool IsFromSameHost(const RTPAddress *addr) const;
|
||||
#ifdef RTPDEBUG
|
||||
std::string GetAddressString() const;
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
uint32_t ip;
|
||||
uint16_t port;
|
||||
};
|
||||
|
||||
#endif // RTPIPV4ADDRESS_H
|
||||
|
@ -1,80 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPIPV4DESTINATION_H
|
||||
|
||||
#define RTPIPV4DESTINATION_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
#ifdef RTPDEBUG
|
||||
#include "rtpdefines.h"
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
class RTPIPv4Destination
|
||||
{
|
||||
public:
|
||||
// (nbo = network byte order, hbo = host byte order)
|
||||
|
||||
RTPIPv4Destination(uint32_t ip,uint16_t rtpportbase) { ipaddr_hbo = ip; ipaddr_nbo = htonl(ip); rtpport_nbo = htons(rtpportbase); rtcpport_nbo = htons(rtpportbase+1); }
|
||||
uint32_t GetIP_HBO() const { return ipaddr_hbo; }
|
||||
uint32_t GetIP_NBO() const { return ipaddr_nbo; }
|
||||
uint16_t GetRTPPort_NBO() const { return rtpport_nbo; }
|
||||
uint16_t GetRTCPPort_NBO() const { return rtcpport_nbo; }
|
||||
bool operator==(const RTPIPv4Destination &src) const { if (src.ipaddr_nbo == ipaddr_nbo && src.rtpport_nbo == rtpport_nbo) return true; return false; } // NOTE: I only check IP and portbase
|
||||
#ifdef RTPDEBUG
|
||||
std::string GetDestinationString() const;
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
uint32_t ipaddr_hbo;
|
||||
uint32_t ipaddr_nbo;
|
||||
uint16_t rtpport_nbo;
|
||||
uint16_t rtcpport_nbo;
|
||||
};
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
inline std::string RTPIPv4Destination::GetDestinationString() const
|
||||
{
|
||||
char str[24];
|
||||
uint32_t ip = ipaddr_hbo;
|
||||
uint16_t portbase = ntohs(rtpport_nbo);
|
||||
|
||||
RTP_SNPRINTF(str,24,"%d.%d.%d.%d:%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF),(int)(portbase));
|
||||
return std::string(str);
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#endif // RTPIPV4DESTINATION_H
|
@ -1,107 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rtpipv6address.h"
|
||||
|
||||
#ifdef RTP_SUPPORT_IPV6
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
#include "rtpdefines.h"
|
||||
#include <stdio.h>
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#include "rtpdebug.h"
|
||||
|
||||
RTPAddress *RTPIPv6Address::CreateCopy() const
|
||||
{
|
||||
RTPIPv6Address *newaddr = new RTPIPv6Address(ip,port);
|
||||
return newaddr;
|
||||
}
|
||||
|
||||
bool RTPIPv6Address::IsSameAddress(const RTPAddress *addr) const
|
||||
{
|
||||
if (addr == 0)
|
||||
return false;
|
||||
if (addr->GetAddressType() != RTPAddress::IPv6Address)
|
||||
return false;
|
||||
|
||||
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
||||
const uint8_t *ip2 = addr2->ip.s6_addr;
|
||||
|
||||
if (port != addr2->port)
|
||||
return false;
|
||||
|
||||
for (int i = 0 ; i < 16 ; i++)
|
||||
{
|
||||
if (ip.s6_addr[i] != ip2[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RTPIPv6Address::IsFromSameHost(const RTPAddress *addr) const
|
||||
{
|
||||
if (addr == 0)
|
||||
return false;
|
||||
if (addr->GetAddressType() != RTPAddress::IPv6Address)
|
||||
return false;
|
||||
|
||||
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
||||
const uint8_t *ip2 = addr2->ip.s6_addr;
|
||||
for (int i = 0 ; i < 16 ; i++)
|
||||
{
|
||||
if (ip.s6_addr[i] != ip2[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef RTPDEBUG
|
||||
std::string RTPIPv6Address::GetAddressString() const
|
||||
{
|
||||
char str[48];
|
||||
uint16_t ip16[8];
|
||||
int i,j;
|
||||
|
||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
|
||||
{
|
||||
ip16[j] = (((uint16_t)ip.s6_addr[i])<<8);
|
||||
ip16[j] |= ((uint16_t)ip.s6_addr[i+1]);
|
||||
}
|
||||
|
||||
RTP_SNPRINTF(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X/%d",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7],(int)port);
|
||||
return std::string(str);
|
||||
}
|
||||
#endif // RTPDEBUG
|
||||
|
||||
#endif // RTP_SUPPORT_IPV6
|
||||
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
|
||||
This file is a part of JRTPLIB
|
||||
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||
|
||||
Contact: jori@lumumba.uhasselt.be
|
||||
|
||||
This library was developed at the "Expertisecentrum Digitale Media"
|
||||
(http://www.edm.uhasselt.be), a research center of the Hasselt University
|
||||
(http://www.uhasselt.be). The library is based upon work done for
|
||||
my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RTPIPV6ADDRESS_H
|
||||
|
||||
#define RTPIPV6ADDRESS_H
|
||||
|
||||
#include "rtpconfig.h"
|
||||
|
||||
#ifdef RTP_SUPPORT_IPV6
|
||||
|
||||
#include "rtpaddress.h"
|
||||
#include "rtptypes.h"
|
||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||
#include <netinet/in.h>
|
||||
#endif // WIN32
|
||||
|
||||
class RTPIPv6Address : public RTPAddress
|
||||
{
|
||||
public:
|
||||
RTPIPv6Address():RTPAddress(IPv6Address) { for (int i = 0 ; i < 16 ; i++) ip.s6_addr[i] = 0; port = 0; }
|
||||
RTPIPv6Address(const uint8_t ip[16],uint16_t port = 0):RTPAddress(IPv6Address) { SetIP(ip); RTPIPv6Address::port = port; }
|
||||
RTPIPv6Address(in6_addr ip,uint16_t port = 0):RTPAddress(IPv6Address) { RTPIPv6Address::ip = ip; RTPIPv6Address::port = port; }
|
||||
~RTPIPv6Address() { }
|
||||
void SetIP(in6_addr ip) { RTPIPv6Address::ip = ip; }
|
||||
void SetIP(const uint8_t ip[16]) { for (int i = 0 ; i < 16 ; i++) RTPIPv6Address::ip.s6_addr[i] = ip[i]; }
|
||||
void SetPort(uint16_t port) { RTPIPv6Address::port = port; }
|
||||
void GetIP(uint8_t ip[16]) const { for (int i = 0 ; i < 16 ; i++) ip[i] = RTPIPv6Address::ip.s6_addr[i]; }
|
||||
in6_addr GetIP() const { return ip; }
|
||||
uint16_t GetPort() const { return port; }
|
||||
|
||||
RTPAddress *CreateCopy() const;
|
||||
bool IsSameAddress(const RTPAddress *addr) const;
|
||||
bool IsFromSameHost(const RTPAddress *addr) const;
|
||||
#ifdef RTPDEBUG
|
||||
std::string GetAddressString() const;
|
||||
#endif // RTPDEBUG
|
||||
private:
|
||||
in6_addr ip;
|
||||
uint16_t port;
|
||||
};
|
||||
|
||||
#endif // RTP_SUPPORT_IPV6
|
||||
|
||||
#endif // RTPIPV6ADDRESS_H
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user