mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-15 11:29:56 +00:00
update jrtp to 3.4.0 version with our mods. Pending: Autotools rerun on this.
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@868 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
d86231404d
commit
fe9ec23f9b
@ -1,10 +1,24 @@
|
|||||||
October 2, 2005
|
January 19, 2006
|
||||||
|
|
||||||
|
|
||||||
JRTPLIB ChangeLog
|
JRTPLIB ChangeLog
|
||||||
|
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
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)
|
3.3.0 (October 2005)
|
||||||
* Now it is possible to use a user-defined transmission component.
|
* Now it is possible to use a user-defined transmission component.
|
||||||
|
@ -99,10 +99,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -124,18 +120,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
October 2, 2005
|
January 19, 2006
|
||||||
|
|
||||||
|
|
||||||
JRTPLIB (v3.3.0)
|
JRTPLIB (v3.4.0)
|
||||||
|
|
||||||
|
|
||||||
Developed at the The Expertise Centre for
|
Developed at the The Expertise Centre for
|
||||||
@ -121,8 +121,6 @@ INSTALLATION NOTES
|
|||||||
If set, IPv6 support is enabled.
|
If set, IPv6 support is enabled.
|
||||||
- RTP_SUPPORT_IPV6MULTICAST:
|
- RTP_SUPPORT_IPV6MULTICAST:
|
||||||
If set, IPv6 multicasting support is enabled.
|
If set, IPv6 multicasting support is enabled.
|
||||||
- RTP_SUPPORT_GST:
|
|
||||||
If set, GStreamer support is enabled.
|
|
||||||
- RTPDEBUG:
|
- RTPDEBUG:
|
||||||
Enables some memory tracking functions and some debug routines.
|
Enables some memory tracking functions and some debug routines.
|
||||||
|
|
||||||
|
117
libs/jrtplib/aclocal.m4
vendored
117
libs/jrtplib/aclocal.m4
vendored
@ -6175,123 +6175,6 @@ SED=$lt_cv_path_SED
|
|||||||
AC_MSG_RESULT([$SED])
|
AC_MSG_RESULT([$SED])
|
||||||
])
|
])
|
||||||
|
|
||||||
# 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
|
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
|
to avoid the need to call pkg-config. See the pkg-config man page for
|
||||||
more details.
|
more details.
|
||||||
|
253
libs/jrtplib/configure
vendored
253
libs/jrtplib/configure
vendored
@ -463,7 +463,7 @@ ac_includes_default="\
|
|||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif"
|
#endif"
|
||||||
|
|
||||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL PKG_CONFIG ac_pt_PKG_CONFIG GST_CFLAGS GST_LIBS GST_PLUGINS_BASE_CFLAGS GST_PLUGINS_BASE_LIBS 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 RTP_SUPPORT_GST RTP_GSTINCLUDES RTP_LINKLIBS LIBOBJS LTLIBOBJS IS64BITLINUX_TRUE IS64BITLINUX_FALSE'
|
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL RTP_FILIO RTP_SOCKIO RTP_ENDIAN RTP_SOCKLENTYPE_UINT RTP_JTHREADINCLUDES 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 RTP_LINKLIBS LIBOBJS LTLIBOBJS'
|
||||||
ac_subst_files=''
|
ac_subst_files=''
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
# Initialize some variables set by options.
|
||||||
@ -1055,7 +1055,6 @@ Optional Features:
|
|||||||
--disable-sdespriv Disable support for SDES PRIV items
|
--disable-sdespriv Disable support for SDES PRIV items
|
||||||
--disable-probation Disable support for probation of a new source
|
--disable-probation Disable support for probation of a new source
|
||||||
--disable-IPv6 Disable support for IPv6
|
--disable-IPv6 Disable support for IPv6
|
||||||
--disable-gst Disable support GStreamer
|
|
||||||
|
|
||||||
Optional Packages:
|
Optional Packages:
|
||||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||||
@ -1832,7 +1831,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE=jrtplib
|
PACKAGE=jrtplib
|
||||||
VERSION=3.3.0
|
VERSION=3.4.0
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
@ -1979,7 +1978,6 @@ RTP_SUPPORT_RANDR="// Not using rand_r"
|
|||||||
RTP_SUPPORT_GETLOGINR="// Not using getlogin_r"
|
RTP_SUPPORT_GETLOGINR="// Not using getlogin_r"
|
||||||
RTP_SUPPORT_IPV6="// No IPv6 support"
|
RTP_SUPPORT_IPV6="// No IPv6 support"
|
||||||
RTP_SUPPORT_IFADDRS="// No ifaddrs support"
|
RTP_SUPPORT_IFADDRS="// No ifaddrs support"
|
||||||
RTP_SUPPORT_GST="// No GStreamer support"
|
|
||||||
RTP_LINKLIBS=""
|
RTP_LINKLIBS=""
|
||||||
|
|
||||||
if test "BLA$CXXFLAGS" = "BLA" ; then
|
if test "BLA$CXXFLAGS" = "BLA" ; then
|
||||||
@ -20631,8 +20629,8 @@ fi
|
|||||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking if types like u_int32_t exist" >&5
|
echo "$as_me:$LINENO: checking if types like uint32_t exist" >&5
|
||||||
echo $ECHO_N "checking if types like u_int32_t exist... $ECHO_C" >&6
|
echo $ECHO_N "checking if types like uint32_t exist... $ECHO_C" >&6
|
||||||
cat >conftest.$ac_ext <<_ACEOF
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
/* confdefs.h. */
|
/* confdefs.h. */
|
||||||
_ACEOF
|
_ACEOF
|
||||||
@ -20640,12 +20638,12 @@ cat confdefs.h >>conftest.$ac_ext
|
|||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <inttypes.h>
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
|
|
||||||
u_int32_t x;
|
uint32_t x;
|
||||||
x = 0;
|
x = 0;
|
||||||
;
|
;
|
||||||
return 0;
|
return 0;
|
||||||
@ -20675,7 +20673,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|||||||
(exit $ac_status); }; }; then
|
(exit $ac_status); }; }; then
|
||||||
echo "$as_me:$LINENO: result: yes" >&5
|
echo "$as_me:$LINENO: result: yes" >&5
|
||||||
echo "${ECHO_T}yes" >&6
|
echo "${ECHO_T}yes" >&6
|
||||||
echo "#include <sys/types.h>" >src/rtptypes_unix.h
|
echo -e "#include <inttypes.h>\n#include <sys/types.h>" >src/rtptypes_unix.h
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "$as_me: failed program was:" >&5
|
echo "$as_me: failed program was:" >&5
|
||||||
@ -21133,230 +21131,6 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --enable-gst or --disable-gst was given.
|
|
||||||
if test "${enable_gst+set}" = set; then
|
|
||||||
enableval="$enable_gst"
|
|
||||||
|
|
||||||
if test "$enableval" = yes ; then
|
|
||||||
gstsupport="yes"
|
|
||||||
else
|
|
||||||
gstsupport="no"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
gstsupport="yes"
|
|
||||||
|
|
||||||
fi;
|
|
||||||
|
|
||||||
if test "$gstsupport" = "yes" ; then
|
|
||||||
|
|
||||||
GST_REQ=0.9
|
|
||||||
GST_MAJORMINOR=0.9
|
|
||||||
|
|
||||||
|
|
||||||
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
|
||||||
if test -n "$ac_tool_prefix"; then
|
|
||||||
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
|
|
||||||
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
|
|
||||||
echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
||||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
||||||
if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
else
|
|
||||||
case $PKG_CONFIG in
|
|
||||||
[\\/]* | ?:[\\/]*)
|
|
||||||
ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
||||||
for as_dir in $PATH
|
|
||||||
do
|
|
||||||
IFS=$as_save_IFS
|
|
||||||
test -z "$as_dir" && as_dir=.
|
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
|
||||||
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
||||||
ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
|
|
||||||
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
||||||
break 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
|
|
||||||
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
|
|
||||||
echo "${ECHO_T}$PKG_CONFIG" >&6
|
|
||||||
else
|
|
||||||
echo "$as_me:$LINENO: result: no" >&5
|
|
||||||
echo "${ECHO_T}no" >&6
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test -z "$ac_cv_path_PKG_CONFIG"; then
|
|
||||||
ac_pt_PKG_CONFIG=$PKG_CONFIG
|
|
||||||
# Extract the first word of "pkg-config", so it can be a program name with args.
|
|
||||||
set dummy pkg-config; ac_word=$2
|
|
||||||
echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
||||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
|
||||||
if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
|
|
||||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
else
|
|
||||||
case $ac_pt_PKG_CONFIG in
|
|
||||||
[\\/]* | ?:[\\/]*)
|
|
||||||
ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
||||||
for as_dir in $PATH
|
|
||||||
do
|
|
||||||
IFS=$as_save_IFS
|
|
||||||
test -z "$as_dir" && as_dir=.
|
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
|
||||||
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
|
||||||
ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
|
|
||||||
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
||||||
break 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
|
|
||||||
|
|
||||||
if test -n "$ac_pt_PKG_CONFIG"; then
|
|
||||||
echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
|
|
||||||
echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6
|
|
||||||
else
|
|
||||||
echo "$as_me:$LINENO: result: no" >&5
|
|
||||||
echo "${ECHO_T}no" >&6
|
|
||||||
fi
|
|
||||||
|
|
||||||
PKG_CONFIG=$ac_pt_PKG_CONFIG
|
|
||||||
else
|
|
||||||
PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
_pkg_min_version=0.9.0
|
|
||||||
echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
|
|
||||||
echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6
|
|
||||||
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
|
||||||
echo "$as_me:$LINENO: result: yes" >&5
|
|
||||||
echo "${ECHO_T}yes" >&6
|
|
||||||
else
|
|
||||||
echo "$as_me:$LINENO: result: no" >&5
|
|
||||||
echo "${ECHO_T}no" >&6
|
|
||||||
PKG_CONFIG=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
pkg_failed=no
|
|
||||||
echo "$as_me:$LINENO: checking for GST" >&5
|
|
||||||
echo $ECHO_N "checking for GST... $ECHO_C" >&6
|
|
||||||
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
if test -n "$PKG_CONFIG" && \
|
|
||||||
{ (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\"") >&5
|
|
||||||
($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; then
|
|
||||||
pkg_cv_GST_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null`
|
|
||||||
else
|
|
||||||
pkg_failed=yes
|
|
||||||
fi
|
|
||||||
pkg_failed=untried
|
|
||||||
fi
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
if test -n "$PKG_CONFIG" && \
|
|
||||||
{ (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-\$GST_MAJORMINOR >= \$GST_REQ\"") >&5
|
|
||||||
($PKG_CONFIG --exists --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ") 2>&5
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; then
|
|
||||||
pkg_cv_GST_LIBS=`$PKG_CONFIG --libs "gstreamer-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null`
|
|
||||||
else
|
|
||||||
pkg_failed=yes
|
|
||||||
fi
|
|
||||||
pkg_failed=untried
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $pkg_failed = yes; then
|
|
||||||
GST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-$GST_MAJORMINOR >= $GST_REQ"`
|
|
||||||
# Put the nasty error message in config.log where it belongs
|
|
||||||
echo "$GST_PKG_ERRORS" 1>&5
|
|
||||||
|
|
||||||
HAVE_GST="no"
|
|
||||||
elif test $pkg_failed = untried; then
|
|
||||||
HAVE_GST="no"
|
|
||||||
else
|
|
||||||
GST_CFLAGS=$pkg_cv_GST_CFLAGS
|
|
||||||
GST_LIBS=$pkg_cv_GST_LIBS
|
|
||||||
HAVE_GST="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
pkg_failed=no
|
|
||||||
echo "$as_me:$LINENO: checking for GST_PLUGINS_BASE" >&5
|
|
||||||
echo $ECHO_N "checking for GST_PLUGINS_BASE... $ECHO_C" >&6
|
|
||||||
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
if test -n "$PKG_CONFIG" && \
|
|
||||||
{ (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GST_REQ\"") >&5
|
|
||||||
($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; then
|
|
||||||
pkg_cv_GST_PLUGINS_BASE_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null`
|
|
||||||
else
|
|
||||||
pkg_failed=yes
|
|
||||||
fi
|
|
||||||
pkg_failed=untried
|
|
||||||
fi
|
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
if test -n "$PKG_CONFIG" && \
|
|
||||||
{ (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gstreamer-plugins-base-\$GST_MAJORMINOR >= \$GST_REQ\"") >&5
|
|
||||||
($PKG_CONFIG --exists --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ") 2>&5
|
|
||||||
ac_status=$?
|
|
||||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
(exit $ac_status); }; then
|
|
||||||
pkg_cv_GST_PLUGINS_BASE_LIBS=`$PKG_CONFIG --libs "gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ" 2>/dev/null`
|
|
||||||
else
|
|
||||||
pkg_failed=yes
|
|
||||||
fi
|
|
||||||
pkg_failed=untried
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $pkg_failed = yes; then
|
|
||||||
GST_PLUGINS_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ"`
|
|
||||||
# Put the nasty error message in config.log where it belongs
|
|
||||||
echo "$GST_PLUGINS_BASE_PKG_ERRORS" 1>&5
|
|
||||||
|
|
||||||
HAVE_GST_PLUGINS="no"
|
|
||||||
elif test $pkg_failed = untried; then
|
|
||||||
HAVE_GST_PLUGINS="no"
|
|
||||||
else
|
|
||||||
GST_PLUGINS_BASE_CFLAGS=$pkg_cv_GST_PLUGINS_BASE_CFLAGS
|
|
||||||
GST_PLUGINS_BASE_LIBS=$pkg_cv_GST_PLUGINS_BASE_LIBS
|
|
||||||
HAVE_GST_PLUGINS="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$HAVE_GST_PLUGINS" = "xyes" && test "x$HAVE_GST" = "xyes"; then
|
|
||||||
RTP_SUPPORT_GST="#define RTP_SUPPORT_GST"
|
|
||||||
GST_LIBS="$GST_LIBS -lgstnet-$GST_MAJORMINOR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
RTP_GSTINCLUDES="$GST_CFLAGS $GST_PLUGINS_BASE_CFLAGS"
|
|
||||||
RTP_LINKLIBS="$RTP_LINKLIBS $GST_LIBS $GST_PLUGIN_BASE_LIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -21375,10 +21149,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ac_config_files="$ac_config_files Makefile src/Makefile src/rtpconfig_unix.h doc/Makefile tools/Makefile examples/Makefile pkgconfig/Makefile pkgconfig/jrtplib.pc pkgconfig/jrtplib-uninstalled.pc"
|
||||||
|
|
||||||
|
|
||||||
ac_config_files="$ac_config_files Makefile src/Makefile src/rtpconfig_unix.h doc/Makefile tools/Makefile pkgconfig/Makefile pkgconfig/jrtplib.pc pkgconfig/jrtplib-uninstalled.pc"
|
|
||||||
cat >confcache <<\_ACEOF
|
cat >confcache <<\_ACEOF
|
||||||
# This file is a shell script that caches the results of configure
|
# This file is a shell script that caches the results of configure
|
||||||
# tests run on this system so they can be shared between configure
|
# tests run on this system so they can be shared between configure
|
||||||
@ -22119,12 +21890,6 @@ s,@F77@,$F77,;t t
|
|||||||
s,@FFLAGS@,$FFLAGS,;t t
|
s,@FFLAGS@,$FFLAGS,;t t
|
||||||
s,@ac_ct_F77@,$ac_ct_F77,;t t
|
s,@ac_ct_F77@,$ac_ct_F77,;t t
|
||||||
s,@LIBTOOL@,$LIBTOOL,;t t
|
s,@LIBTOOL@,$LIBTOOL,;t t
|
||||||
s,@PKG_CONFIG@,$PKG_CONFIG,;t t
|
|
||||||
s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t
|
|
||||||
s,@GST_CFLAGS@,$GST_CFLAGS,;t t
|
|
||||||
s,@GST_LIBS@,$GST_LIBS,;t t
|
|
||||||
s,@GST_PLUGINS_BASE_CFLAGS@,$GST_PLUGINS_BASE_CFLAGS,;t t
|
|
||||||
s,@GST_PLUGINS_BASE_LIBS@,$GST_PLUGINS_BASE_LIBS,;t t
|
|
||||||
s,@RTP_FILIO@,$RTP_FILIO,;t t
|
s,@RTP_FILIO@,$RTP_FILIO,;t t
|
||||||
s,@RTP_SOCKIO@,$RTP_SOCKIO,;t t
|
s,@RTP_SOCKIO@,$RTP_SOCKIO,;t t
|
||||||
s,@RTP_ENDIAN@,$RTP_ENDIAN,;t t
|
s,@RTP_ENDIAN@,$RTP_ENDIAN,;t t
|
||||||
@ -22141,8 +21906,6 @@ s,@RTP_SUPPORT_GETLOGINR@,$RTP_SUPPORT_GETLOGINR,;t t
|
|||||||
s,@RTP_SUPPORT_IPV6@,$RTP_SUPPORT_IPV6,;t t
|
s,@RTP_SUPPORT_IPV6@,$RTP_SUPPORT_IPV6,;t t
|
||||||
s,@RTP_SUPPORT_IPV6MULTICAST@,$RTP_SUPPORT_IPV6MULTICAST,;t t
|
s,@RTP_SUPPORT_IPV6MULTICAST@,$RTP_SUPPORT_IPV6MULTICAST,;t t
|
||||||
s,@RTP_SUPPORT_IFADDRS@,$RTP_SUPPORT_IFADDRS,;t t
|
s,@RTP_SUPPORT_IFADDRS@,$RTP_SUPPORT_IFADDRS,;t t
|
||||||
s,@RTP_SUPPORT_GST@,$RTP_SUPPORT_GST,;t t
|
|
||||||
s,@RTP_GSTINCLUDES@,$RTP_GSTINCLUDES,;t t
|
|
||||||
s,@RTP_LINKLIBS@,$RTP_LINKLIBS,;t t
|
s,@RTP_LINKLIBS@,$RTP_LINKLIBS,;t t
|
||||||
s,@LIBOBJS@,$LIBOBJS,;t t
|
s,@LIBOBJS@,$LIBOBJS,;t t
|
||||||
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
AC_INIT(configure.in)
|
AC_INIT(configure.in)
|
||||||
AM_INIT_AUTOMAKE(jrtplib,3.3.0)
|
AM_INIT_AUTOMAKE(jrtplib,3.4.0)
|
||||||
|
|
||||||
RTP_FILIO="// Don't have <sys/filio.h>"
|
RTP_FILIO="// Don't have <sys/filio.h>"
|
||||||
RTP_SOCKIO="// Don't have <sys/sockio.h>"
|
RTP_SOCKIO="// Don't have <sys/sockio.h>"
|
||||||
@ -17,7 +17,6 @@ RTP_SUPPORT_RANDR="// Not using rand_r"
|
|||||||
RTP_SUPPORT_GETLOGINR="// Not using getlogin_r"
|
RTP_SUPPORT_GETLOGINR="// Not using getlogin_r"
|
||||||
RTP_SUPPORT_IPV6="// No IPv6 support"
|
RTP_SUPPORT_IPV6="// No IPv6 support"
|
||||||
RTP_SUPPORT_IFADDRS="// No ifaddrs support"
|
RTP_SUPPORT_IFADDRS="// No ifaddrs support"
|
||||||
RTP_SUPPORT_GST="// No GStreamer support"
|
|
||||||
RTP_LINKLIBS=""
|
RTP_LINKLIBS=""
|
||||||
|
|
||||||
if test "BLA$CXXFLAGS" = "BLA" ; then
|
if test "BLA$CXXFLAGS" = "BLA" ; then
|
||||||
@ -219,13 +218,13 @@ dnl ---------------------------------------------------------------------------
|
|||||||
dnl Check for u_int32_t etc
|
dnl Check for u_int32_t etc
|
||||||
dnl ---------------------------------------------------------------------------
|
dnl ---------------------------------------------------------------------------
|
||||||
|
|
||||||
AC_MSG_CHECKING(if types like u_int32_t exist)
|
AC_MSG_CHECKING(if types like uint32_t exist)
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
#include <sys/types.h>],[
|
#include <inttypes.h>],[
|
||||||
u_int32_t x;
|
uint32_t x;
|
||||||
x = 0;],
|
x = 0;],
|
||||||
[AC_MSG_RESULT(yes)
|
[AC_MSG_RESULT(yes)
|
||||||
echo "#include <sys/types.h>" >src/rtptypes_unix.h
|
echo -e "#include <inttypes.h>\n#include <sys/types.h>" >src/rtptypes_unix.h
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
echo "Generating src/rtptypes.h ..."
|
echo "Generating src/rtptypes.h ..."
|
||||||
@ -373,40 +372,6 @@ dnl ---------------------------------------------------------------------------
|
|||||||
|
|
||||||
AC_CHECK_HEADER(ifaddrs.h,[RTP_SUPPORT_IFADDRS="#define RTP_SUPPORT_IFADDRS"])
|
AC_CHECK_HEADER(ifaddrs.h,[RTP_SUPPORT_IFADDRS="#define RTP_SUPPORT_IFADDRS"])
|
||||||
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
||||||
dnl Check gstreamer support
|
|
||||||
dnl ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(gst,[ --disable-gst Disable support GStreamer],[
|
|
||||||
if test "$enableval" = yes ; then
|
|
||||||
gstsupport="yes"
|
|
||||||
else
|
|
||||||
gstsupport="no"
|
|
||||||
fi],[
|
|
||||||
gstsupport="yes"
|
|
||||||
])
|
|
||||||
|
|
||||||
if test "$gstsupport" = "yes" ; then
|
|
||||||
|
|
||||||
dnl uninstalled is selected preferentially -- see pkg-config(1)
|
|
||||||
GST_REQ=0.9
|
|
||||||
GST_MAJORMINOR=0.9
|
|
||||||
PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ,
|
|
||||||
HAVE_GST="yes", HAVE_GST="no")
|
|
||||||
|
|
||||||
dnl check for gstreamer-plugins-base; uinstalled is selected preferentially
|
|
||||||
PKG_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ,
|
|
||||||
HAVE_GST_PLUGINS="yes", HAVE_GST_PLUGINS="no")
|
|
||||||
|
|
||||||
if test "x$HAVE_GST_PLUGINS" = "xyes" && test "x$HAVE_GST" = "xyes"; then
|
|
||||||
RTP_SUPPORT_GST="#define RTP_SUPPORT_GST"
|
|
||||||
GST_LIBS="$GST_LIBS -lgstnet-$GST_MAJORMINOR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
RTP_GSTINCLUDES="$GST_CFLAGS $GST_PLUGINS_BASE_CFLAGS"
|
|
||||||
RTP_LINKLIBS="$RTP_LINKLIBS $GST_LIBS $GST_PLUGIN_BASE_LIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl ---------------------------------------------------------------------------
|
dnl ---------------------------------------------------------------------------
|
||||||
dnl Finish up...
|
dnl Finish up...
|
||||||
dnl ---------------------------------------------------------------------------
|
dnl ---------------------------------------------------------------------------
|
||||||
@ -427,8 +392,6 @@ AC_SUBST(RTP_SUPPORT_GETLOGINR)
|
|||||||
AC_SUBST(RTP_SUPPORT_IPV6)
|
AC_SUBST(RTP_SUPPORT_IPV6)
|
||||||
AC_SUBST(RTP_SUPPORT_IPV6MULTICAST)
|
AC_SUBST(RTP_SUPPORT_IPV6MULTICAST)
|
||||||
AC_SUBST(RTP_SUPPORT_IFADDRS)
|
AC_SUBST(RTP_SUPPORT_IFADDRS)
|
||||||
AC_SUBST(RTP_SUPPORT_GST)
|
|
||||||
AC_SUBST(RTP_GSTINCLUDES)
|
|
||||||
AC_SUBST(RTP_LINKLIBS)
|
AC_SUBST(RTP_LINKLIBS)
|
||||||
AC_OUTPUT(Makefile \
|
AC_OUTPUT(Makefile \
|
||||||
src/Makefile \
|
src/Makefile \
|
||||||
|
@ -75,10 +75,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -100,18 +96,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
\documentclass[12pt,a4paper]{article}
|
\documentclass[12pt,a4paper]{article}
|
||||||
|
|
||||||
\newcommand{\jversion}{3.3.0}
|
\newcommand{\jversion}{3.4.0}
|
||||||
\newcommand{\headerfile}[1]{\marginpar{\scriptsize Header:\\{\tt #1}}}
|
\newcommand{\headerfile}[1]{\marginpar{\scriptsize Header:\\{\tt #1}}}
|
||||||
\newcommand{\inherits}[1]{\marginpar{\scriptsize Inherits:\\{\tt #1}}}
|
\newcommand{\inherits}[1]{\marginpar{\scriptsize Inherits:\\{\tt #1}}}
|
||||||
\newcommand{\Paragraph}[1]{\paragraph{#1}\ \\\addcontentsline{toc}{subsection}{\ \hspace{3cm}\ {#1}}}
|
\newcommand{\Paragraph}[1]{\paragraph{#1}\ \\\addcontentsline{toc}{subsection}{\ \hspace{3cm}\ {#1}}}
|
||||||
@ -22,7 +22,7 @@
|
|||||||
\begin{document}
|
\begin{document}
|
||||||
\title{\ \vspace{3.5cm}\ \\{\bf JRTPLIB \jversion}}
|
\title{\ \vspace{3.5cm}\ \\{\bf JRTPLIB \jversion}}
|
||||||
\author{Jori Liesenborgs\\{\tt jori@lumumba.uhasselt.be}}
|
\author{Jori Liesenborgs\\{\tt jori@lumumba.uhasselt.be}}
|
||||||
\date{October 2, 2005\\\vspace{0.5cm}\ \\
|
\date{January 19, 2006\\\vspace{0.5cm}\ \\
|
||||||
{\small{\em Developed at the The Expertise Centre for \\Digital Media (EDM),
|
{\small{\em Developed at the The Expertise Centre for \\Digital Media (EDM),
|
||||||
a research institute\\of the Hasselt University}\\\ \\
|
a research institute\\of the Hasselt University}\\\ \\
|
||||||
{\tt http://www.edm.uhasselt.be/}\\
|
{\tt http://www.edm.uhasselt.be/}\\
|
||||||
@ -111,7 +111,7 @@
|
|||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.}
|
SOFTWARE.}
|
||||||
|
|
||||||
There are two reason for using this license. First, since this is the
|
There are two reasons for using this license. First, since this is the
|
||||||
license of the 2.x series, it only seemed natural that this rewrite
|
license of the 2.x series, it only seemed natural that this rewrite
|
||||||
would contain the same license. Second, since the RTP protocol is
|
would contain the same license. Second, since the RTP protocol is
|
||||||
deliberately incomplete RTP profiles can, for example, define additional
|
deliberately incomplete RTP profiles can, for example, define additional
|
||||||
@ -510,12 +510,12 @@ session.BYEDestroy(delay,"Time's up",9);
|
|||||||
|
|
||||||
The abstract class {\tt RTPTransmitter} specifies the interface for
|
The abstract class {\tt RTPTransmitter} specifies the interface for
|
||||||
actual transmission components. Currently, three implementations exist:
|
actual transmission components. Currently, three implementations exist:
|
||||||
an UDP over IPv4 transmitter, an UDP over IPv6 transmitter and a
|
an UDP over IPv4 transmitter and an UDP over IPv6 transmitter.
|
||||||
GStreamer transmission component. The {\tt TransmissionProtocol} type
|
The {\tt TransmissionProtocol} type
|
||||||
is used to specify a specific kind of transmitter:
|
is used to specify a specific kind of transmitter:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
enum TransmissionProtocol { IPv4UDPProto, IPv6UDPProto,
|
enum TransmissionProtocol { IPv4UDPProto, IPv6UDPProto,
|
||||||
IPv4GSTProto, UserDefinedProto };
|
UserDefinedProto };
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
The {\tt UserDefinedProto} can be used to select your own transmission
|
The {\tt UserDefinedProto} can be used to select your own transmission
|
||||||
component when using the {\tt RTPSession} class. In this case, you'll
|
component when using the {\tt RTPSession} class. In this case, you'll
|
||||||
@ -1994,6 +1994,12 @@ session.BYEDestroy(delay,"Time's up",9);
|
|||||||
\item {\tt int SetMaximumPacketSize(size\_t maxpacksize)}\\
|
\item {\tt int SetMaximumPacketSize(size\_t maxpacksize)}\\
|
||||||
Sets the maximum size allowed size of an RTCP compound
|
Sets the maximum size allowed size of an RTCP compound
|
||||||
packet to {\tt maxpacksize}.
|
packet to {\tt maxpacksize}.
|
||||||
|
\item {\tt int SetPreTransmissionDelay(const RTPTime \&delay)}\\
|
||||||
|
This function allows you to inform RTCP packet builder about the
|
||||||
|
delay between sampling the first sample of a packet and
|
||||||
|
sending the packet. This delay is taken into account when
|
||||||
|
calculating the relation between RTP timestamp and wallclock
|
||||||
|
time, used for inter-media synchronization.
|
||||||
\item {\tt int BuildNextPacket(RTCPCompoundPacket **pack)}\\
|
\item {\tt int BuildNextPacket(RTCPCompoundPacket **pack)}\\
|
||||||
Builds the next RTCP compound packet which should be
|
Builds the next RTCP compound packet which should be
|
||||||
sent and stores it in {\tt pack}.
|
sent and stores it in {\tt pack}.
|
||||||
@ -2420,6 +2426,12 @@ session.BYEDestroy(delay,"Time's up",9);
|
|||||||
timestamp with the appropriate amount so that the next
|
timestamp with the appropriate amount so that the next
|
||||||
packets will still be played at the correct time at
|
packets will still be played at the correct time at
|
||||||
other hosts.
|
other hosts.
|
||||||
|
\item {\tt int SetPreTransmissionDelay(const RTPTime \&delay)}\\
|
||||||
|
This function allows you to inform the library about the
|
||||||
|
delay between sampling the first sample of a packet and
|
||||||
|
sending the packet. This delay is taken into account when
|
||||||
|
calculating the relation between RTP timestamp and wallclock
|
||||||
|
time, used for inter-media synchronization.
|
||||||
\item {\tt RTPTransmissionInfo *GetTransmissionInfo()}\\
|
\item {\tt RTPTransmissionInfo *GetTransmissionInfo()}\\
|
||||||
This function returns an instance of a subclass of {\tt RTPTransmissionInfo}
|
This function returns an instance of a subclass of {\tt RTPTransmissionInfo}
|
||||||
which will give some additional information about the transmitter
|
which will give some additional information about the transmitter
|
||||||
|
@ -5,6 +5,6 @@ example2_SOURCES = example2.cpp
|
|||||||
example3_SOURCES = example3.cpp
|
example3_SOURCES = example3.cpp
|
||||||
example4_SOURCES = example4.cpp
|
example4_SOURCES = example4.cpp
|
||||||
|
|
||||||
INCLUDES = @RTP_JTHREADINCLUDES@ @RTP_GSTINCLUDES@ -I ../src/
|
INCLUDES = @RTP_JTHREADINCLUDES@ -I ../src/
|
||||||
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
||||||
|
|
||||||
|
@ -110,10 +110,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -133,18 +129,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
@ -206,7 +199,7 @@ example1_SOURCES = example1.cpp
|
|||||||
example2_SOURCES = example2.cpp
|
example2_SOURCES = example2.cpp
|
||||||
example3_SOURCES = example3.cpp
|
example3_SOURCES = example3.cpp
|
||||||
example4_SOURCES = example4.cpp
|
example4_SOURCES = example4.cpp
|
||||||
INCLUDES = @RTP_JTHREADINCLUDES@ @RTP_GSTINCLUDES@ -I ../src/
|
INCLUDES = @RTP_JTHREADINCLUDES@ -I ../src/
|
||||||
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
LDADD = ../src/.libs/libjrtp.a @RTP_LINKLIBS@
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ int main(void)
|
|||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
||||||
RTPSession sess;
|
RTPSession sess;
|
||||||
u_int16_t portbase,destport;
|
uint16_t portbase,destport;
|
||||||
u_int32_t destip;
|
uint32_t destip;
|
||||||
std::string ipstr;
|
std::string ipstr;
|
||||||
int status,i,num;
|
int status,i,num;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ int main(void)
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int8_t localip[]={127,0,0,1};
|
uint8_t localip[]={127,0,0,1};
|
||||||
RTPIPv4Address addr(localip,9000);
|
RTPIPv4Address addr(localip,9000);
|
||||||
|
|
||||||
status = session.AddDestination(addr);
|
status = session.AddDestination(addr);
|
||||||
@ -43,7 +43,7 @@ int main(void)
|
|||||||
session.SetDefaultMark(false);
|
session.SetDefaultMark(false);
|
||||||
session.SetDefaultTimestampIncrement(160);
|
session.SetDefaultTimestampIncrement(160);
|
||||||
|
|
||||||
u_int8_t silencebuffer[160];
|
uint8_t silencebuffer[160];
|
||||||
for (int i = 0 ; i < 160 ; i++)
|
for (int i = 0 ; i < 160 ; i++)
|
||||||
silencebuffer[i] = 128;
|
silencebuffer[i] = 128;
|
||||||
|
|
||||||
|
@ -47,8 +47,8 @@ protected:
|
|||||||
if (dat->IsOwnSSRC())
|
if (dat->IsOwnSSRC())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
u_int16_t port;
|
uint16_t port;
|
||||||
|
|
||||||
if (dat->GetRTPDataAddress() != 0)
|
if (dat->GetRTPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
@ -58,7 +58,7 @@ protected:
|
|||||||
}
|
}
|
||||||
else if (dat->GetRTCPDataAddress() != 0)
|
else if (dat->GetRTCPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||||
ip = addr->GetIP();
|
ip = addr->GetIP();
|
||||||
port = addr->GetPort()-1;
|
port = addr->GetPort()-1;
|
||||||
}
|
}
|
||||||
@ -78,8 +78,8 @@ protected:
|
|||||||
if (dat->IsOwnSSRC())
|
if (dat->IsOwnSSRC())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
u_int16_t port;
|
uint16_t port;
|
||||||
|
|
||||||
if (dat->GetRTPDataAddress() != 0)
|
if (dat->GetRTPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
@ -89,7 +89,7 @@ protected:
|
|||||||
}
|
}
|
||||||
else if (dat->GetRTCPDataAddress() != 0)
|
else if (dat->GetRTCPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||||
ip = addr->GetIP();
|
ip = addr->GetIP();
|
||||||
port = addr->GetPort()-1;
|
port = addr->GetPort()-1;
|
||||||
}
|
}
|
||||||
@ -111,8 +111,8 @@ protected:
|
|||||||
if (dat->ReceivedBYE())
|
if (dat->ReceivedBYE())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
u_int16_t port;
|
uint16_t port;
|
||||||
|
|
||||||
if (dat->GetRTPDataAddress() != 0)
|
if (dat->GetRTPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
@ -122,7 +122,7 @@ protected:
|
|||||||
}
|
}
|
||||||
else if (dat->GetRTCPDataAddress() != 0)
|
else if (dat->GetRTCPDataAddress() != 0)
|
||||||
{
|
{
|
||||||
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTPDataAddress());
|
const RTPIPv4Address *addr = (const RTPIPv4Address *)(dat->GetRTCPDataAddress());
|
||||||
ip = addr->GetIP();
|
ip = addr->GetIP();
|
||||||
port = addr->GetPort()-1;
|
port = addr->GetPort()-1;
|
||||||
}
|
}
|
||||||
@ -150,8 +150,8 @@ int main(void)
|
|||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
||||||
MyRTPSession sess;
|
MyRTPSession sess;
|
||||||
u_int16_t portbase,destport;
|
uint16_t portbase,destport;
|
||||||
u_int32_t destip;
|
uint32_t destip;
|
||||||
std::string ipstr;
|
std::string ipstr;
|
||||||
int status,i,num;
|
int status,i,num;
|
||||||
|
|
||||||
|
@ -92,8 +92,8 @@ int main(void)
|
|||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
||||||
MyRTPSession sess;
|
MyRTPSession sess;
|
||||||
u_int16_t portbase,destport;
|
uint16_t portbase,destport;
|
||||||
u_int32_t destip;
|
uint32_t destip;
|
||||||
std::string ipstr;
|
std::string ipstr;
|
||||||
int status,i,num;
|
int status,i,num;
|
||||||
|
|
||||||
|
@ -86,10 +86,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -111,18 +107,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
|
@ -14,8 +14,9 @@ libjrtp_la_SOURCES = rtpdebug.cpp rtpsession.cpp rtpconfig_win.h \
|
|||||||
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
||||||
rtpcollisionlist.cpp rtpipv6address.cpp \
|
rtpcollisionlist.cpp rtpipv6address.cpp \
|
||||||
rtpudpv6transmitter.cpp rtptimeutilities.cpp \
|
rtpudpv6transmitter.cpp rtptimeutilities.cpp \
|
||||||
rtpgsttransmitter.cpp pthread/jmutex.cpp pthread/jthread.cpp
|
extratransmitters/rtpfaketransmitter.cpp \
|
||||||
libjrtp_la_LDFLAGS = -release 3.3.0 @RTP_LINKLIBS@
|
pthread/jmutex.cpp pthread/jthread.cpp
|
||||||
|
libjrtp_la_LDFLAGS = -release 3.4.0 @RTP_LINKLIBS@
|
||||||
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
||||||
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
||||||
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
||||||
@ -29,9 +30,10 @@ libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
|||||||
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
||||||
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
||||||
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
||||||
rtpgsttransmitter.h jmutex.h jthread.h jrtp4c.h
|
extratransmitters/rtpfaketransmitter.h \
|
||||||
|
jmutex.h jthread.h jrtp4c.h
|
||||||
EXTRA_DIST = rtpconfig_unix.h.in win32/jthread.cpp win32/jmutex.cpp
|
EXTRA_DIST = rtpconfig_unix.h.in win32/jthread.cpp win32/jmutex.cpp
|
||||||
libjrtpincludedir = ${includedir}/jrtplib3
|
libjrtpincludedir = ${includedir}/jrtplib3
|
||||||
INCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,13 +61,13 @@ am_libjrtp_la_OBJECTS = rtpdebug.lo rtpsession.lo rtperrors.lo \
|
|||||||
rtpudpv4transmitter.lo rtcpsdesinfo.lo rtppollthread.lo \
|
rtpudpv4transmitter.lo rtcpsdesinfo.lo rtppollthread.lo \
|
||||||
rtppacket.lo rtppacketbuilder.lo rtpsessionparams.lo \
|
rtppacket.lo rtppacketbuilder.lo rtpsessionparams.lo \
|
||||||
rtpsources.lo rtpinternalsourcedata.lo rtpsourcedata.lo \
|
rtpsources.lo rtpinternalsourcedata.lo rtpsourcedata.lo \
|
||||||
rtpipv4address.lo rtcpcompoundpacket.lo jrtp4c.lo \
|
rtpipv4address.lo rtcpcompoundpacket.lo rtcpapppacket.lo jrtp4c.lo \
|
||||||
rtcpapppacket.lo rtcpbyepacket.lo rtcprrpacket.lo \
|
rtcpbyepacket.lo rtcprrpacket.lo rtcpsdespacket.lo \
|
||||||
rtcpsdespacket.lo rtcpsrpacket.lo rtplibraryversion.lo \
|
rtcpsrpacket.lo rtplibraryversion.lo rtcppacket.lo \
|
||||||
rtcppacket.lo rtcpcompoundpacketbuilder.lo rtprandom.lo \
|
rtcpcompoundpacketbuilder.lo rtprandom.lo rtcpscheduler.lo \
|
||||||
rtcpscheduler.lo rtcppacketbuilder.lo rtpsessionsources.lo \
|
rtcppacketbuilder.lo rtpsessionsources.lo rtpcollisionlist.lo \
|
||||||
rtpcollisionlist.lo rtpipv6address.lo rtpudpv6transmitter.lo \
|
rtpipv6address.lo rtpudpv6transmitter.lo rtptimeutilities.lo \
|
||||||
rtptimeutilities.lo rtpgsttransmitter.lo jmutex.lo jthread.lo
|
rtpfaketransmitter.lo jmutex.lo jthread.lo
|
||||||
libjrtp_la_OBJECTS = $(am_libjrtp_la_OBJECTS)
|
libjrtp_la_OBJECTS = $(am_libjrtp_la_OBJECTS)
|
||||||
DEFAULT_INCLUDES = -I. -I$(srcdir)
|
DEFAULT_INCLUDES = -I. -I$(srcdir)
|
||||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||||
@ -124,10 +124,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -149,18 +145,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
@ -234,9 +227,9 @@ libjrtp_la_SOURCES = rtpdebug.cpp rtpsession.cpp rtpconfig_win.h \
|
|||||||
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
rtcppacketbuilder.cpp rtpsessionsources.cpp \
|
||||||
rtpcollisionlist.cpp rtpipv6address.cpp \
|
rtpcollisionlist.cpp rtpipv6address.cpp \
|
||||||
rtpudpv6transmitter.cpp rtptimeutilities.cpp \
|
rtpudpv6transmitter.cpp rtptimeutilities.cpp \
|
||||||
rtpgsttransmitter.cpp pthread/jmutex.cpp pthread/jthread.cpp
|
extratransmitters/rtpfaketransmitter.cpp pthread/jmutex.cpp pthread/jthread.cpp
|
||||||
|
|
||||||
libjrtp_la_LDFLAGS = -release 3.3.0 @RTP_LINKLIBS@
|
libjrtp_la_LDFLAGS = -release 3.4.0 @RTP_LINKLIBS@
|
||||||
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
||||||
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
rtcpcompoundpacketbuilder.h rtcppacket.h rtcppacketbuilder.h \
|
||||||
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
rtcprrpacket.h rtcpscheduler.h rtcpsdesinfo.h rtcpsdespacket.h \
|
||||||
@ -250,11 +243,10 @@ libjrtpinclude_HEADERS = rtcpapppacket.h rtcpbyepacket.h rtcpcompoundpacket.h \
|
|||||||
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
rtptypes_win.h rtpudpv4transmitter.h rtpsessionsources.h \
|
||||||
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
rtpcollisionlist.h rtpipv6address.h rtpipv6destination.h \
|
||||||
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
rtpudpv6transmitter.h rtptypes.h rtptypes_unix.h \
|
||||||
rtpgsttransmitter.h jmutex.h jthread.h jrtp4c.h
|
extratransmitters/rtpfaketransmitter.h jmutex.h jthread.h jrtp4c.h
|
||||||
|
|
||||||
EXTRA_DIST = rtpconfig_unix.h.in win32/jthread.cpp win32/jmutex.cpp
|
EXTRA_DIST = rtpconfig_unix.h.in win32/jthread.cpp win32/jmutex.cpp
|
||||||
libjrtpincludedir = ${includedir}/jrtplib3
|
libjrtpincludedir = ${includedir}/jrtplib3
|
||||||
INCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
@ -343,7 +335,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpcollisionlist.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)/rtpdebug.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtperrors.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtperrors.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpgsttransmitter.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpfaketransmitter.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpinternalsourcedata.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)/rtpipv4address.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpipv6address.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtpipv6address.Plo@am__quote@
|
||||||
@ -396,6 +388,13 @@ jthread.lo: pthread/jthread.cpp
|
|||||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o jthread.lo `test -f 'pthread/jthread.cpp' || echo '$(srcdir)/'`pthread/jthread.cpp
|
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o jthread.lo `test -f 'pthread/jthread.cpp' || echo '$(srcdir)/'`pthread/jthread.cpp
|
||||||
|
|
||||||
|
rtpfaketransmitter.lo: extratransmitters/rtpfaketransmitter.cpp
|
||||||
|
@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT rtpfaketransmitter.lo -MD -MP -MF "$(DEPDIR)/rtpfaketransmitter.Tpo" -c -o rtpfaketransmitter.lo `test -f 'extratransmitters/rtpfaketransmitter.cpp' || echo '$(srcdir)/'`extratransmitters/rtpfaketransmitter.cpp; \
|
||||||
|
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/rtpfaketransmitter.Tpo" "$(DEPDIR)/rtpfaketransmitter.Plo"; else rm -f "$(DEPDIR)/rtpfaketransmitter.Tpo"; exit 1; fi
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='extratransmitters/rtpfaketransmitter.cpp' object='rtpfaketransmitter.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o rtpfaketransmitter.lo `test -f 'extratransmitters/rtpfaketransmitter.cpp' || echo '$(srcdir)/'`extratransmitters/rtpfaketransmitter.cpp
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
|
|
||||||
@ -473,6 +472,7 @@ distclean-tags:
|
|||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
$(mkdir_p) $(distdir)/win32
|
$(mkdir_p) $(distdir)/win32
|
||||||
|
$(mkdir_p) $(distdir)/extratransmitters
|
||||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||||
list='$(DISTFILES)'; for file in $$list; do \
|
list='$(DISTFILES)'; for file in $$list; do \
|
||||||
|
1775
libs/jrtplib/src/extratransmitters/rtpfaketransmitter.cpp
Normal file
1775
libs/jrtplib/src/extratransmitters/rtpfaketransmitter.cpp
Normal file
File diff suppressed because it is too large
Load Diff
240
libs/jrtplib/src/extratransmitters/rtpfaketransmitter.h
Normal file
240
libs/jrtplib/src/extratransmitters/rtpfaketransmitter.h
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
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,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPAPPPacket::RTCPAPPPacket(u_int8_t *data,size_t datalength)
|
RTCPAPPPacket::RTCPAPPPacket(uint8_t *data,size_t datalength)
|
||||||
: RTCPPacket(APP,data,datalength)
|
: RTCPPacket(APP,data,datalength)
|
||||||
{
|
{
|
||||||
knownformat = false;
|
knownformat = false;
|
||||||
@ -49,7 +49,7 @@ RTCPAPPPacket::RTCPAPPPacket(u_int8_t *data,size_t datalength)
|
|||||||
hdr = (RTCPCommonHeader *)data;
|
hdr = (RTCPCommonHeader *)data;
|
||||||
if (hdr->padding)
|
if (hdr->padding)
|
||||||
{
|
{
|
||||||
u_int8_t padcount = data[datalength-1];
|
uint8_t padcount = data[datalength-1];
|
||||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||||
return;
|
return;
|
||||||
if (((size_t)padcount) >= len)
|
if (((size_t)padcount) >= len)
|
||||||
@ -57,9 +57,9 @@ RTCPAPPPacket::RTCPAPPPacket(u_int8_t *data,size_t datalength)
|
|||||||
len -= (size_t)padcount;
|
len -= (size_t)padcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len < (sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*2))
|
if (len < (sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2))
|
||||||
return;
|
return;
|
||||||
len -= (sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*2);
|
len -= (sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2);
|
||||||
appdatalen = len;
|
appdatalen = len;
|
||||||
knownformat = true;
|
knownformat = true;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -46,13 +46,13 @@ class RTCPCompoundPacket;
|
|||||||
class RTCPAPPPacket : public RTCPPacket
|
class RTCPAPPPacket : public RTCPPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPAPPPacket(u_int8_t *data,size_t datalen);
|
RTCPAPPPacket(uint8_t *data,size_t datalen);
|
||||||
~RTCPAPPPacket() { }
|
~RTCPAPPPacket() { }
|
||||||
|
|
||||||
u_int8_t GetSubType() const;
|
uint8_t GetSubType() const;
|
||||||
u_int32_t GetSSRC() const;
|
uint32_t GetSSRC() const;
|
||||||
u_int8_t *GetName(); // Note that the name always consists of 4 octets and is not null-terminated
|
uint8_t *GetName(); // Note that the name always consists of 4 octets and is not null-terminated
|
||||||
u_int8_t *GetAPPData();
|
uint8_t *GetAPPData();
|
||||||
size_t GetAPPDataLength() const;
|
size_t GetAPPDataLength() const;
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
@ -61,7 +61,7 @@ private:
|
|||||||
size_t appdatalen;
|
size_t appdatalen;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline u_int8_t RTCPAPPPacket::GetSubType() const
|
inline uint8_t RTCPAPPPacket::GetSubType() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -69,30 +69,30 @@ inline u_int8_t RTCPAPPPacket::GetSubType() const
|
|||||||
return hdr->count;
|
return hdr->count;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPAPPPacket::GetSSRC() const
|
inline uint32_t RTCPAPPPacket::GetSSRC() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u_int32_t *ssrc = (u_int32_t *)(data+sizeof(RTCPCommonHeader));
|
uint32_t *ssrc = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||||
return ntohl(*ssrc);
|
return ntohl(*ssrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPAPPPacket::GetName()
|
inline uint8_t *RTCPAPPPacket::GetName()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return (data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t));
|
return (data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPAPPPacket::GetAPPData()
|
inline uint8_t *RTCPAPPPacket::GetAPPData()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
if (appdatalen == 0)
|
if (appdatalen == 0)
|
||||||
return 0;
|
return 0;
|
||||||
return (data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*2);
|
return (data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t RTCPAPPPacket::GetAPPDataLength() const
|
inline size_t RTCPAPPPacket::GetAPPDataLength() const
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPBYEPacket::RTCPBYEPacket(u_int8_t *data,size_t datalength)
|
RTCPBYEPacket::RTCPBYEPacket(uint8_t *data,size_t datalength)
|
||||||
: RTCPPacket(BYE,data,datalength)
|
: RTCPPacket(BYE,data,datalength)
|
||||||
{
|
{
|
||||||
knownformat = false;
|
knownformat = false;
|
||||||
@ -49,7 +49,7 @@ RTCPBYEPacket::RTCPBYEPacket(u_int8_t *data,size_t datalength)
|
|||||||
hdr = (RTCPCommonHeader *)data;
|
hdr = (RTCPCommonHeader *)data;
|
||||||
if (hdr->padding)
|
if (hdr->padding)
|
||||||
{
|
{
|
||||||
u_int8_t padcount = data[datalength-1];
|
uint8_t padcount = data[datalength-1];
|
||||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||||
return;
|
return;
|
||||||
if (((size_t)padcount) >= len)
|
if (((size_t)padcount) >= len)
|
||||||
@ -57,12 +57,12 @@ RTCPBYEPacket::RTCPBYEPacket(u_int8_t *data,size_t datalength)
|
|||||||
len -= (size_t)padcount;
|
len -= (size_t)padcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ssrclen = ((size_t)(hdr->count))*sizeof(u_int32_t) + sizeof(RTCPCommonHeader);
|
size_t ssrclen = ((size_t)(hdr->count))*sizeof(uint32_t) + sizeof(RTCPCommonHeader);
|
||||||
if (ssrclen > len)
|
if (ssrclen > len)
|
||||||
return;
|
return;
|
||||||
if (ssrclen < len) // there's probably a reason for leaving
|
if (ssrclen < len) // there's probably a reason for leaving
|
||||||
{
|
{
|
||||||
u_int8_t *reasonlength = (data+ssrclen);
|
uint8_t *reasonlength = (data+ssrclen);
|
||||||
size_t reaslen = (size_t)(*reasonlength);
|
size_t reaslen = (size_t)(*reasonlength);
|
||||||
if (reaslen > (len-ssrclen-1))
|
if (reaslen > (len-ssrclen-1))
|
||||||
return;
|
return;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -46,14 +46,14 @@ class RTCPCompoundPacket;
|
|||||||
class RTCPBYEPacket : public RTCPPacket
|
class RTCPBYEPacket : public RTCPPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPBYEPacket(u_int8_t *data,size_t datalen);
|
RTCPBYEPacket(uint8_t *data,size_t datalen);
|
||||||
~RTCPBYEPacket() { }
|
~RTCPBYEPacket() { }
|
||||||
|
|
||||||
int GetSSRCCount() const;
|
int GetSSRCCount() const;
|
||||||
u_int32_t GetSSRC(int index) const; // note: no check is performed to see if index is valid!
|
uint32_t GetSSRC(int index) const; // note: no check is performed to see if index is valid!
|
||||||
bool HasReasonForLeaving() const;
|
bool HasReasonForLeaving() const;
|
||||||
size_t GetReasonLength() const;
|
size_t GetReasonLength() const;
|
||||||
u_int8_t *GetReasonData();
|
uint8_t *GetReasonData();
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
@ -71,11 +71,11 @@ inline int RTCPBYEPacket::GetSSRCCount() const
|
|||||||
return (int)(hdr->count);
|
return (int)(hdr->count);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPBYEPacket::GetSSRC(int index) const
|
inline uint32_t RTCPBYEPacket::GetSSRC(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
u_int32_t *ssrc = (u_int32_t *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*index);
|
uint32_t *ssrc = (uint32_t *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*index);
|
||||||
return ntohl(*ssrc);
|
return ntohl(*ssrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,17 +94,17 @@ inline size_t RTCPBYEPacket::GetReasonLength() const
|
|||||||
return 0;
|
return 0;
|
||||||
if (reasonoffset == 0)
|
if (reasonoffset == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *reasonlen = (data+reasonoffset);
|
uint8_t *reasonlen = (data+reasonoffset);
|
||||||
return (size_t)(*reasonlen);
|
return (size_t)(*reasonlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPBYEPacket::GetReasonData()
|
inline uint8_t *RTCPBYEPacket::GetReasonData()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
if (reasonoffset == 0)
|
if (reasonoffset == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *reasonlen = (data+reasonoffset);
|
uint8_t *reasonlen = (data+reasonoffset);
|
||||||
if ((*reasonlen) == 0)
|
if ((*reasonlen) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
return (data+reasonoffset+1);
|
return (data+reasonoffset+1);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ RTCPCompoundPacket::RTCPCompoundPacket(RTPRawPacket &rawpack)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int8_t *data = rawpack.GetData();
|
uint8_t *data = rawpack.GetData();
|
||||||
size_t datalen = rawpack.GetDataLength();
|
size_t datalen = rawpack.GetDataLength();
|
||||||
bool first;
|
bool first;
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ RTCPCompoundPacket::RTCPCompoundPacket(RTPRawPacket &rawpack)
|
|||||||
|
|
||||||
length = (size_t)ntohs(rtcphdr->length);
|
length = (size_t)ntohs(rtcphdr->length);
|
||||||
length++;
|
length++;
|
||||||
length *= sizeof(u_int32_t);
|
length *= sizeof(uint32_t);
|
||||||
|
|
||||||
if (length > datalen) // invalid length field
|
if (length > datalen) // invalid length field
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
virtual ~RTCPCompoundPacket();
|
virtual ~RTCPCompoundPacket();
|
||||||
int GetCreationError() { return error; }
|
int GetCreationError() { return error; }
|
||||||
|
|
||||||
u_int8_t *GetCompoundPacketData() { return compoundpacket; }
|
uint8_t *GetCompoundPacketData() { return compoundpacket; }
|
||||||
size_t GetCompoundPacketLength() { return compoundpacketlength; }
|
size_t GetCompoundPacketLength() { return compoundpacketlength; }
|
||||||
|
|
||||||
void GotoFirstPacket() { rtcppackit = rtcppacklist.begin(); }
|
void GotoFirstPacket() { rtcppackit = rtcppacklist.begin(); }
|
||||||
@ -68,7 +68,7 @@ protected:
|
|||||||
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
u_int8_t *compoundpacket;
|
uint8_t *compoundpacket;
|
||||||
size_t compoundpacketlength;
|
size_t compoundpacketlength;
|
||||||
|
|
||||||
std::list<RTCPPacket *> rtcppacklist;
|
std::list<RTCPPacket *> rtcppacklist;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ int RTCPCompoundPacketBuilder::InitBuild(void *externalbuffer,size_t buffersize)
|
|||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_BUFFERSIZETOOSMALL;
|
||||||
|
|
||||||
maximumpacketsize = buffersize;
|
maximumpacketsize = buffersize;
|
||||||
buffer = (u_int8_t *)externalbuffer;
|
buffer = (uint8_t *)externalbuffer;
|
||||||
external = true;
|
external = true;
|
||||||
byesize = 0;
|
byesize = 0;
|
||||||
appsize = 0;
|
appsize = 0;
|
||||||
@ -119,8 +119,8 @@ int RTCPCompoundPacketBuilder::InitBuild(void *externalbuffer,size_t buffersize)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::StartSenderReport(u_int32_t senderssrc,const RTPNTPTime &ntptimestamp,u_int32_t rtptimestamp,
|
int RTCPCompoundPacketBuilder::StartSenderReport(uint32_t senderssrc,const RTPNTPTime &ntptimestamp,uint32_t rtptimestamp,
|
||||||
u_int32_t packetcount,u_int32_t octetcount)
|
uint32_t packetcount,uint32_t octetcount)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -130,20 +130,20 @@ int RTCPCompoundPacketBuilder::StartSenderReport(u_int32_t senderssrc,const RTPN
|
|||||||
|
|
||||||
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
||||||
size_t sizeleft = maximumpacketsize-totalsize;
|
size_t sizeleft = maximumpacketsize-totalsize;
|
||||||
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+sizeof(RTCPSenderReport);
|
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||||
|
|
||||||
if (neededsize > sizeleft)
|
if (neededsize > sizeleft)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
// fill in some things
|
// fill in some things
|
||||||
|
|
||||||
report.headerlength = sizeof(u_int32_t)+sizeof(RTCPSenderReport);
|
report.headerlength = sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||||
report.isSR = true;
|
report.isSR = true;
|
||||||
|
|
||||||
u_int32_t *ssrc = (u_int32_t *)report.headerdata;
|
uint32_t *ssrc = (uint32_t *)report.headerdata;
|
||||||
*ssrc = htonl(senderssrc);
|
*ssrc = htonl(senderssrc);
|
||||||
|
|
||||||
RTCPSenderReport *sr = (RTCPSenderReport *)(report.headerdata + sizeof(u_int32_t));
|
RTCPSenderReport *sr = (RTCPSenderReport *)(report.headerdata + sizeof(uint32_t));
|
||||||
sr->ntptime_msw = htonl(ntptimestamp.GetMSW());
|
sr->ntptime_msw = htonl(ntptimestamp.GetMSW());
|
||||||
sr->ntptime_lsw = htonl(ntptimestamp.GetLSW());
|
sr->ntptime_lsw = htonl(ntptimestamp.GetLSW());
|
||||||
sr->rtptimestamp = htonl(rtptimestamp);
|
sr->rtptimestamp = htonl(rtptimestamp);
|
||||||
@ -153,7 +153,7 @@ int RTCPCompoundPacketBuilder::StartSenderReport(u_int32_t senderssrc,const RTPN
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::StartReceiverReport(u_int32_t senderssrc)
|
int RTCPCompoundPacketBuilder::StartReceiverReport(uint32_t senderssrc)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -162,24 +162,24 @@ int RTCPCompoundPacketBuilder::StartReceiverReport(u_int32_t senderssrc)
|
|||||||
|
|
||||||
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
size_t totalsize = byesize+appsize+sdes.NeededBytes();
|
||||||
size_t sizeleft = maximumpacketsize-totalsize;
|
size_t sizeleft = maximumpacketsize-totalsize;
|
||||||
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(u_int32_t);
|
size_t neededsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||||
|
|
||||||
if (neededsize > sizeleft)
|
if (neededsize > sizeleft)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
// fill in some things
|
// fill in some things
|
||||||
|
|
||||||
report.headerlength = sizeof(u_int32_t);
|
report.headerlength = sizeof(uint32_t);
|
||||||
report.isSR = false;
|
report.isSR = false;
|
||||||
|
|
||||||
u_int32_t *ssrc = (u_int32_t *)report.headerdata;
|
uint32_t *ssrc = (uint32_t *)report.headerdata;
|
||||||
*ssrc = htonl(senderssrc);
|
*ssrc = htonl(senderssrc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::AddReportBlock(u_int32_t ssrc,u_int8_t fractionlost,int32_t packetslost,u_int32_t exthighestseq,
|
int RTCPCompoundPacketBuilder::AddReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t packetslost,uint32_t exthighestseq,
|
||||||
u_int32_t jitter,u_int32_t lsr,u_int32_t dlsr)
|
uint32_t jitter,uint32_t lsr,uint32_t dlsr)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -192,19 +192,19 @@ int RTCPCompoundPacketBuilder::AddReportBlock(u_int32_t ssrc,u_int8_t fractionlo
|
|||||||
if ((totalothersize+reportsizewithextrablock) > maximumpacketsize)
|
if ((totalothersize+reportsizewithextrablock) > maximumpacketsize)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
u_int8_t *buf = new u_int8_t[sizeof(RTCPReceiverReport)];
|
uint8_t *buf = new uint8_t[sizeof(RTCPReceiverReport)];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
|
|
||||||
RTCPReceiverReport *rr = (RTCPReceiverReport *)buf;
|
RTCPReceiverReport *rr = (RTCPReceiverReport *)buf;
|
||||||
u_int32_t *packlost = (u_int32_t *)&packetslost;
|
uint32_t *packlost = (uint32_t *)&packetslost;
|
||||||
u_int32_t packlost2 = (*packlost);
|
uint32_t packlost2 = (*packlost);
|
||||||
|
|
||||||
rr->ssrc = htonl(ssrc);
|
rr->ssrc = htonl(ssrc);
|
||||||
rr->fractionlost = fractionlost;
|
rr->fractionlost = fractionlost;
|
||||||
rr->packetslost[2] = (u_int8_t)(packlost2&0xFF);
|
rr->packetslost[2] = (uint8_t)(packlost2&0xFF);
|
||||||
rr->packetslost[1] = (u_int8_t)((packlost2>>8)&0xFF);
|
rr->packetslost[1] = (uint8_t)((packlost2>>8)&0xFF);
|
||||||
rr->packetslost[0] = (u_int8_t)((packlost2>>16)&0xFF);
|
rr->packetslost[0] = (uint8_t)((packlost2>>16)&0xFF);
|
||||||
rr->exthighseqnr = htonl(exthighestseq);
|
rr->exthighseqnr = htonl(exthighestseq);
|
||||||
rr->jitter = htonl(jitter);
|
rr->jitter = htonl(jitter);
|
||||||
rr->lsr = htonl(lsr);
|
rr->lsr = htonl(lsr);
|
||||||
@ -214,7 +214,7 @@ int RTCPCompoundPacketBuilder::AddReportBlock(u_int32_t ssrc,u_int8_t fractionlo
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::AddSDESSource(u_int32_t ssrc)
|
int RTCPCompoundPacketBuilder::AddSDESSource(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -232,14 +232,14 @@ int RTCPCompoundPacketBuilder::AddSDESSource(u_int32_t ssrc)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,u_int8_t itemlength)
|
int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,uint8_t itemlength)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
if (sdes.sdessources.empty())
|
if (sdes.sdessources.empty())
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
||||||
|
|
||||||
u_int8_t itemid;
|
uint8_t itemid;
|
||||||
|
|
||||||
switch(t)
|
switch(t)
|
||||||
{
|
{
|
||||||
@ -274,10 +274,10 @@ int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,cons
|
|||||||
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
u_int8_t *buf;
|
uint8_t *buf;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
buf = new u_int8_t[sizeof(RTCPSDESHeader)+(size_t)itemlength];
|
buf = new uint8_t[sizeof(RTCPSDESHeader)+(size_t)itemlength];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
||||||
@ -294,8 +294,8 @@ int RTCPCompoundPacketBuilder::AddSDESNormalItem(RTCPSDESPacket::ItemType t,cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,u_int8_t prefixlength,const void *valuedata,
|
int RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,uint8_t prefixlength,const void *valuedata,
|
||||||
u_int8_t valuelength)
|
uint8_t valuelength)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -312,10 +312,10 @@ int RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,u_int8_
|
|||||||
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
if ((sdessizewithextraitem+totalotherbytes) > maximumpacketsize)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
u_int8_t *buf;
|
uint8_t *buf;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
buf = new u_int8_t[sizeof(RTCPSDESHeader)+itemlength];
|
buf = new uint8_t[sizeof(RTCPSDESHeader)+itemlength];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
len = sizeof(RTCPSDESHeader)+(size_t)itemlength;
|
||||||
@ -336,7 +336,7 @@ int RTCPCompoundPacketBuilder::AddSDESPrivateItem(const void *prefixdata,u_int8_
|
|||||||
}
|
}
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,const void *reasondata,u_int8_t reasonlength)
|
int RTCPCompoundPacketBuilder::AddBYEPacket(uint32_t *ssrcs,uint8_t numssrcs,const void *reasondata,uint8_t reasonlength)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -344,7 +344,7 @@ int RTCPCompoundPacketBuilder::AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,c
|
|||||||
if (numssrcs > 31)
|
if (numssrcs > 31)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_TOOMANYSSRCS;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_TOOMANYSSRCS;
|
||||||
|
|
||||||
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*((size_t)numssrcs);
|
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)*((size_t)numssrcs);
|
||||||
size_t zerobytes = 0;
|
size_t zerobytes = 0;
|
||||||
|
|
||||||
if (reasonlength > 0)
|
if (reasonlength > 0)
|
||||||
@ -365,10 +365,10 @@ int RTCPCompoundPacketBuilder::AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,c
|
|||||||
if ((totalotherbytes + packsize) > maximumpacketsize)
|
if ((totalotherbytes + packsize) > maximumpacketsize)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
u_int8_t *buf;
|
uint8_t *buf;
|
||||||
size_t numwords;
|
size_t numwords;
|
||||||
|
|
||||||
buf = new u_int8_t[packsize];
|
buf = new uint8_t[packsize];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
|
|
||||||
@ -378,19 +378,19 @@ int RTCPCompoundPacketBuilder::AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,c
|
|||||||
hdr->padding = 0;
|
hdr->padding = 0;
|
||||||
hdr->count = numssrcs;
|
hdr->count = numssrcs;
|
||||||
|
|
||||||
numwords = packsize/sizeof(u_int32_t);
|
numwords = packsize/sizeof(uint32_t);
|
||||||
hdr->length = htons((u_int16_t)(numwords-1));
|
hdr->length = htons((uint16_t)(numwords-1));
|
||||||
hdr->packettype = RTP_RTCPTYPE_BYE;
|
hdr->packettype = RTP_RTCPTYPE_BYE;
|
||||||
|
|
||||||
u_int32_t *sources = (u_int32_t *)(buf+sizeof(RTCPCommonHeader));
|
uint32_t *sources = (uint32_t *)(buf+sizeof(RTCPCommonHeader));
|
||||||
u_int8_t srcindex;
|
uint8_t srcindex;
|
||||||
|
|
||||||
for (srcindex = 0 ; srcindex < numssrcs ; srcindex++)
|
for (srcindex = 0 ; srcindex < numssrcs ; srcindex++)
|
||||||
sources[srcindex] = htonl(ssrcs[srcindex]);
|
sources[srcindex] = htonl(ssrcs[srcindex]);
|
||||||
|
|
||||||
if (reasonlength != 0)
|
if (reasonlength != 0)
|
||||||
{
|
{
|
||||||
size_t offset = sizeof(RTCPCommonHeader)+((size_t)numssrcs)*sizeof(u_int32_t);
|
size_t offset = sizeof(RTCPCommonHeader)+((size_t)numssrcs)*sizeof(uint32_t);
|
||||||
|
|
||||||
buf[offset] = reasonlength;
|
buf[offset] = reasonlength;
|
||||||
memcpy((buf+offset+1),reasondata,(size_t)reasonlength);
|
memcpy((buf+offset+1),reasondata,(size_t)reasonlength);
|
||||||
@ -404,7 +404,7 @@ int RTCPCompoundPacketBuilder::AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,c
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPCompoundPacketBuilder::AddAPPPacket(u_int8_t subtype,u_int32_t ssrc,const u_int8_t name[4],const void *appdata,size_t appdatalen)
|
int RTCPCompoundPacketBuilder::AddAPPPacket(uint8_t subtype,uint32_t ssrc,const uint8_t name[4],const void *appdata,size_t appdatalen)
|
||||||
{
|
{
|
||||||
if (!arebuilding)
|
if (!arebuilding)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTBUILDING;
|
||||||
@ -418,15 +418,15 @@ int RTCPCompoundPacketBuilder::AddAPPPacket(u_int8_t subtype,u_int32_t ssrc,cons
|
|||||||
if ((appdatawords+2) > 65535)
|
if ((appdatawords+2) > 65535)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_APPDATALENTOOBIG;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_APPDATALENTOOBIG;
|
||||||
|
|
||||||
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*2+appdatalen;
|
size_t packsize = sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2+appdatalen;
|
||||||
size_t totalotherbytes = appsize+byesize+sdes.NeededBytes()+report.NeededBytes();
|
size_t totalotherbytes = appsize+byesize+sdes.NeededBytes()+report.NeededBytes();
|
||||||
|
|
||||||
if ((totalotherbytes + packsize) > maximumpacketsize)
|
if ((totalotherbytes + packsize) > maximumpacketsize)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT;
|
||||||
|
|
||||||
u_int8_t *buf;
|
uint8_t *buf;
|
||||||
|
|
||||||
buf = new u_int8_t[packsize];
|
buf = new uint8_t[packsize];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
|
|
||||||
@ -436,19 +436,19 @@ int RTCPCompoundPacketBuilder::AddAPPPacket(u_int8_t subtype,u_int32_t ssrc,cons
|
|||||||
hdr->padding = 0;
|
hdr->padding = 0;
|
||||||
hdr->count = subtype;
|
hdr->count = subtype;
|
||||||
|
|
||||||
hdr->length = htons((u_int16_t)(appdatawords+2));
|
hdr->length = htons((uint16_t)(appdatawords+2));
|
||||||
hdr->packettype = RTP_RTCPTYPE_APP;
|
hdr->packettype = RTP_RTCPTYPE_APP;
|
||||||
|
|
||||||
u_int32_t *source = (u_int32_t *)(buf+sizeof(RTCPCommonHeader));
|
uint32_t *source = (uint32_t *)(buf+sizeof(RTCPCommonHeader));
|
||||||
*source = htonl(ssrc);
|
*source = htonl(ssrc);
|
||||||
|
|
||||||
buf[sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+0] = name[0];
|
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+0] = name[0];
|
||||||
buf[sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+1] = name[1];
|
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+1] = name[1];
|
||||||
buf[sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+2] = name[2];
|
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+2] = name[2];
|
||||||
buf[sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+3] = name[3];
|
buf[sizeof(RTCPCommonHeader)+sizeof(uint32_t)+3] = name[3];
|
||||||
|
|
||||||
if (appdatalen > 0)
|
if (appdatalen > 0)
|
||||||
memcpy((buf+sizeof(RTCPCommonHeader)+sizeof(u_int32_t)*2),appdata,appdatalen);
|
memcpy((buf+sizeof(RTCPCommonHeader)+sizeof(uint32_t)*2),appdata,appdatalen);
|
||||||
|
|
||||||
apppackets.push_back(Buffer(buf,packsize));
|
apppackets.push_back(Buffer(buf,packsize));
|
||||||
appsize += packsize;
|
appsize += packsize;
|
||||||
@ -463,21 +463,21 @@ int RTCPCompoundPacketBuilder::EndBuild()
|
|||||||
if (report.headerlength == 0)
|
if (report.headerlength == 0)
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOREPORTPRESENT;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOREPORTPRESENT;
|
||||||
|
|
||||||
u_int8_t *buf;
|
uint8_t *buf;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
len = appsize+byesize+report.NeededBytes()+sdes.NeededBytes();
|
len = appsize+byesize+report.NeededBytes()+sdes.NeededBytes();
|
||||||
|
|
||||||
if (!external)
|
if (!external)
|
||||||
{
|
{
|
||||||
buf = new u_int8_t[len];
|
buf = new uint8_t[len];
|
||||||
if (buf == 0)
|
if (buf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
buf = buffer;
|
buf = buffer;
|
||||||
|
|
||||||
u_int8_t *curbuf = buf;
|
uint8_t *curbuf = buf;
|
||||||
RTCPPacket *p;
|
RTCPPacket *p;
|
||||||
|
|
||||||
// first, we'll add all report info
|
// first, we'll add all report info
|
||||||
@ -503,12 +503,12 @@ int RTCPCompoundPacketBuilder::EndBuild()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hdr->packettype = RTP_RTCPTYPE_RR;
|
hdr->packettype = RTP_RTCPTYPE_RR;
|
||||||
memcpy((curbuf+sizeof(RTCPCommonHeader)),report.headerdata,sizeof(u_int32_t));
|
memcpy((curbuf+sizeof(RTCPCommonHeader)),report.headerdata,sizeof(uint32_t));
|
||||||
offset = sizeof(RTCPCommonHeader)+sizeof(u_int32_t);
|
offset = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||||
}
|
}
|
||||||
firstpacket = false;
|
firstpacket = false;
|
||||||
|
|
||||||
u_int8_t count = 0;
|
uint8_t count = 0;
|
||||||
|
|
||||||
while (it != report.reportblocks.end() && count < 31)
|
while (it != report.reportblocks.end() && count < 31)
|
||||||
{
|
{
|
||||||
@ -518,9 +518,9 @@ int RTCPCompoundPacketBuilder::EndBuild()
|
|||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t numwords = offset/sizeof(u_int32_t);
|
size_t numwords = offset/sizeof(uint32_t);
|
||||||
|
|
||||||
hdr->length = htons((u_int16_t)(numwords-1));
|
hdr->length = htons((uint16_t)(numwords-1));
|
||||||
hdr->count = count;
|
hdr->count = count;
|
||||||
|
|
||||||
// add entry in parent's list
|
// add entry in parent's list
|
||||||
@ -559,13 +559,13 @@ int RTCPCompoundPacketBuilder::EndBuild()
|
|||||||
hdr->padding = 0;
|
hdr->padding = 0;
|
||||||
hdr->packettype = RTP_RTCPTYPE_SDES;
|
hdr->packettype = RTP_RTCPTYPE_SDES;
|
||||||
|
|
||||||
u_int8_t sourcecount = 0;
|
uint8_t sourcecount = 0;
|
||||||
|
|
||||||
while (sourceit != sdes.sdessources.end() && sourcecount < 31)
|
while (sourceit != sdes.sdessources.end() && sourcecount < 31)
|
||||||
{
|
{
|
||||||
u_int32_t *ssrc = (u_int32_t *)(curbuf+offset);
|
uint32_t *ssrc = (uint32_t *)(curbuf+offset);
|
||||||
*ssrc = htonl((*sourceit)->ssrc);
|
*ssrc = htonl((*sourceit)->ssrc);
|
||||||
offset += sizeof(u_int32_t);
|
offset += sizeof(uint32_t);
|
||||||
|
|
||||||
std::list<Buffer>::const_iterator itemit,itemend;
|
std::list<Buffer>::const_iterator itemit,itemend;
|
||||||
|
|
||||||
@ -599,7 +599,7 @@ int RTCPCompoundPacketBuilder::EndBuild()
|
|||||||
size_t numwords = offset/4;
|
size_t numwords = offset/4;
|
||||||
|
|
||||||
hdr->count = sourcecount;
|
hdr->count = sourcecount;
|
||||||
hdr->length = htons((u_int16_t)(numwords-1));
|
hdr->length = htons((uint16_t)(numwords-1));
|
||||||
|
|
||||||
p = new RTCPSDESPacket(curbuf,offset);
|
p = new RTCPSDESPacket(curbuf,offset);
|
||||||
if (p == 0)
|
if (p == 0)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -50,23 +50,23 @@ public:
|
|||||||
int InitBuild(size_t maxpacketsize);
|
int InitBuild(size_t maxpacketsize);
|
||||||
int InitBuild(void *externalbuffer,size_t buffersize);
|
int InitBuild(void *externalbuffer,size_t buffersize);
|
||||||
|
|
||||||
int StartSenderReport(u_int32_t senderssrc,const RTPNTPTime &ntptimestamp,u_int32_t rtptimestamp,
|
int StartSenderReport(uint32_t senderssrc,const RTPNTPTime &ntptimestamp,uint32_t rtptimestamp,
|
||||||
u_int32_t packetcount,u_int32_t octetcount);
|
uint32_t packetcount,uint32_t octetcount);
|
||||||
int StartReceiverReport(u_int32_t senderssrc);
|
int StartReceiverReport(uint32_t senderssrc);
|
||||||
int AddReportBlock(u_int32_t ssrc,u_int8_t fractionlost,int32_t packetslost,u_int32_t exthighestseq,
|
int AddReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t packetslost,uint32_t exthighestseq,
|
||||||
u_int32_t jitter,u_int32_t lsr,u_int32_t dlsr);
|
uint32_t jitter,uint32_t lsr,uint32_t dlsr);
|
||||||
|
|
||||||
int AddSDESSource(u_int32_t ssrc);
|
int AddSDESSource(uint32_t ssrc);
|
||||||
int AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,u_int8_t itemlength);
|
int AddSDESNormalItem(RTCPSDESPacket::ItemType t,const void *itemdata,uint8_t itemlength);
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int AddSDESPrivateItem(const void *prefixdata,u_int8_t prefixlength,const void *valuedata,
|
int AddSDESPrivateItem(const void *prefixdata,uint8_t prefixlength,const void *valuedata,
|
||||||
u_int8_t valuelength);
|
uint8_t valuelength);
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
int AddBYEPacket(u_int32_t *ssrcs,u_int8_t numssrcs,const void *reasondata,u_int8_t reasonlength);
|
int AddBYEPacket(uint32_t *ssrcs,uint8_t numssrcs,const void *reasondata,uint8_t reasonlength);
|
||||||
|
|
||||||
// note: appdatalen must be a multiple of 4 (32 bits) !
|
// note: appdatalen must be a multiple of 4 (32 bits) !
|
||||||
int AddAPPPacket(u_int8_t subtype,u_int32_t ssrc,const u_int8_t name[4],const void *appdata,size_t appdatalen);
|
int AddAPPPacket(uint8_t subtype,uint32_t ssrc,const uint8_t name[4],const void *appdata,size_t appdatalen);
|
||||||
|
|
||||||
int EndBuild();
|
int EndBuild();
|
||||||
private:
|
private:
|
||||||
@ -74,16 +74,16 @@ private:
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Buffer():packetdata(0),packetlength(0) { }
|
Buffer():packetdata(0),packetlength(0) { }
|
||||||
Buffer(u_int8_t *data,size_t len):packetdata(data),packetlength(len) { }
|
Buffer(uint8_t *data,size_t len):packetdata(data),packetlength(len) { }
|
||||||
|
|
||||||
u_int8_t *packetdata;
|
uint8_t *packetdata;
|
||||||
size_t packetlength;
|
size_t packetlength;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Report
|
class Report
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Report() { headerdata = (u_int8_t *)headerdata32; isSR = false; headerlength = 0; }
|
Report() { headerdata = (uint8_t *)headerdata32; isSR = false; headerlength = 0; }
|
||||||
~Report() { Clear(); }
|
~Report() { Clear(); }
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
@ -114,7 +114,7 @@ private:
|
|||||||
r = n%31;
|
r = n%31;
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
d++;
|
d++;
|
||||||
x += d*(sizeof(RTCPCommonHeader)+sizeof(u_int32_t)); /* header and SSRC */
|
x += d*(sizeof(RTCPCommonHeader)+sizeof(uint32_t)); /* header and SSRC */
|
||||||
if (isSR)
|
if (isSR)
|
||||||
x += sizeof(RTCPSenderReport);
|
x += sizeof(RTCPSenderReport);
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ private:
|
|||||||
r = n%31;
|
r = n%31;
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
d++;
|
d++;
|
||||||
x += d*(sizeof(RTCPCommonHeader)+sizeof(u_int32_t)); /* header and SSRC */
|
x += d*(sizeof(RTCPCommonHeader)+sizeof(uint32_t)); /* header and SSRC */
|
||||||
if (isSR)
|
if (isSR)
|
||||||
x += sizeof(RTCPSenderReport);
|
x += sizeof(RTCPSenderReport);
|
||||||
return x;
|
return x;
|
||||||
@ -138,8 +138,8 @@ private:
|
|||||||
|
|
||||||
bool isSR;
|
bool isSR;
|
||||||
|
|
||||||
u_int8_t *headerdata;
|
uint8_t *headerdata;
|
||||||
u_int32_t headerdata32[(sizeof(u_int32_t)+sizeof(RTCPSenderReport))/sizeof(u_int32_t)]; // either for ssrc and sender info or just ssrc
|
uint32_t headerdata32[(sizeof(uint32_t)+sizeof(RTCPSenderReport))/sizeof(uint32_t)]; // either for ssrc and sender info or just ssrc
|
||||||
size_t headerlength;
|
size_t headerlength;
|
||||||
std::list<Buffer> reportblocks;
|
std::list<Buffer> reportblocks;
|
||||||
};
|
};
|
||||||
@ -147,7 +147,7 @@ private:
|
|||||||
class SDESSource
|
class SDESSource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SDESSource(u_int32_t s) : ssrc(s),totalitemsize(0) { }
|
SDESSource(uint32_t s) : ssrc(s),totalitemsize(0) { }
|
||||||
~SDESSource()
|
~SDESSource()
|
||||||
{
|
{
|
||||||
std::list<Buffer>::const_iterator it;
|
std::list<Buffer>::const_iterator it;
|
||||||
@ -161,32 +161,32 @@ private:
|
|||||||
{
|
{
|
||||||
size_t x,r;
|
size_t x,r;
|
||||||
x = totalitemsize + 1; // +1 for the 0 byte which terminates the item list
|
x = totalitemsize + 1; // +1 for the 0 byte which terminates the item list
|
||||||
r = x%sizeof(u_int32_t);
|
r = x%sizeof(uint32_t);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
x += (sizeof(u_int32_t)-r); // make sure it ends on a 32 bit boundary
|
x += (sizeof(uint32_t)-r); // make sure it ends on a 32 bit boundary
|
||||||
x += sizeof(u_int32_t); // for ssrc
|
x += sizeof(uint32_t); // for ssrc
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t NeededBytesWithExtraItem(u_int8_t itemdatalength)
|
size_t NeededBytesWithExtraItem(uint8_t itemdatalength)
|
||||||
{
|
{
|
||||||
size_t x,r;
|
size_t x,r;
|
||||||
x = totalitemsize + sizeof(RTCPSDESHeader) + (size_t)itemdatalength + 1;
|
x = totalitemsize + sizeof(RTCPSDESHeader) + (size_t)itemdatalength + 1;
|
||||||
r = x%sizeof(u_int32_t);
|
r = x%sizeof(uint32_t);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
x += (sizeof(u_int32_t)-r); // make sure it ends on a 32 bit boundary
|
x += (sizeof(uint32_t)-r); // make sure it ends on a 32 bit boundary
|
||||||
x += sizeof(u_int32_t); // for ssrc
|
x += sizeof(uint32_t); // for ssrc
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddItem(u_int8_t *buf,size_t len)
|
void AddItem(uint8_t *buf,size_t len)
|
||||||
{
|
{
|
||||||
Buffer b(buf,len);
|
Buffer b(buf,len);
|
||||||
totalitemsize += len;
|
totalitemsize += len;
|
||||||
items.push_back(b);
|
items.push_back(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
std::list<Buffer> items;
|
std::list<Buffer> items;
|
||||||
private:
|
private:
|
||||||
size_t totalitemsize;
|
size_t totalitemsize;
|
||||||
@ -207,7 +207,7 @@ private:
|
|||||||
sdessources.clear();
|
sdessources.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int AddSSRC(u_int32_t ssrc)
|
int AddSSRC(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
SDESSource *s = new SDESSource(ssrc);
|
SDESSource *s = new SDESSource(ssrc);
|
||||||
if (s == 0)
|
if (s == 0)
|
||||||
@ -218,7 +218,7 @@ private:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AddItem(u_int8_t *buf,size_t len)
|
int AddItem(uint8_t *buf,size_t len)
|
||||||
{
|
{
|
||||||
if (sdessources.empty())
|
if (sdessources.empty())
|
||||||
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
return ERR_RTP_RTCPCOMPPACKBUILDER_NOCURRENTSOURCE;
|
||||||
@ -246,7 +246,7 @@ private:
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t NeededBytesWithExtraItem(u_int8_t itemdatalength)
|
size_t NeededBytesWithExtraItem(uint8_t itemdatalength)
|
||||||
{
|
{
|
||||||
std::list<SDESSource *>::const_iterator it;
|
std::list<SDESSource *>::const_iterator it;
|
||||||
size_t x = 0;
|
size_t x = 0;
|
||||||
@ -280,7 +280,7 @@ private:
|
|||||||
x += (*it)->NeededBytes();
|
x += (*it)->NeededBytes();
|
||||||
|
|
||||||
// for the extra source we'll need at least 8 bytes (ssrc and four 0 bytes)
|
// for the extra source we'll need at least 8 bytes (ssrc and four 0 bytes)
|
||||||
x += sizeof(u_int32_t)*2;
|
x += sizeof(uint32_t)*2;
|
||||||
|
|
||||||
n = sdessources.size() + 1; // also, the number of sources will increase
|
n = sdessources.size() + 1; // also, the number of sources will increase
|
||||||
d = n/31;
|
d = n/31;
|
||||||
@ -297,7 +297,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
size_t maximumpacketsize;
|
size_t maximumpacketsize;
|
||||||
u_int8_t *buffer;
|
uint8_t *buffer;
|
||||||
bool external;
|
bool external;
|
||||||
bool arebuilding;
|
bool arebuilding;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -44,21 +44,21 @@ class RTCPPacket
|
|||||||
public:
|
public:
|
||||||
enum PacketType { SR,RR,SDES,BYE,APP,Unknown };
|
enum PacketType { SR,RR,SDES,BYE,APP,Unknown };
|
||||||
protected:
|
protected:
|
||||||
RTCPPacket(PacketType t,u_int8_t *d,size_t dlen) : data(d),datalen(dlen),packettype(t) { knownformat = false; }
|
RTCPPacket(PacketType t,uint8_t *d,size_t dlen) : data(d),datalen(dlen),packettype(t) { knownformat = false; }
|
||||||
public:
|
public:
|
||||||
virtual ~RTCPPacket() { }
|
virtual ~RTCPPacket() { }
|
||||||
|
|
||||||
bool IsKnownFormat() const { return knownformat; }
|
bool IsKnownFormat() const { return knownformat; }
|
||||||
|
|
||||||
PacketType GetPacketType() const { return packettype; }
|
PacketType GetPacketType() const { return packettype; }
|
||||||
u_int8_t *GetPacketData() { return data; }
|
uint8_t *GetPacketData() { return data; }
|
||||||
size_t GetPacketLength() const { return datalen; }
|
size_t GetPacketLength() const { return datalen; }
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
virtual void Dump();
|
virtual void Dump();
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
protected:
|
protected:
|
||||||
u_int8_t *data;
|
uint8_t *data;
|
||||||
size_t datalen;
|
size_t datalen;
|
||||||
bool knownformat;
|
bool knownformat;
|
||||||
private:
|
private:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -40,7 +40,7 @@
|
|||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPPacketBuilder::RTCPPacketBuilder(RTPSources &s,RTPPacketBuilder &pb)
|
RTCPPacketBuilder::RTCPPacketBuilder(RTPSources &s,RTPPacketBuilder &pb)
|
||||||
: sources(s),rtppacketbuilder(pb),prevbuildtime(0,0)
|
: sources(s),rtppacketbuilder(pb),prevbuildtime(0,0),transmissiondelay(0,0)
|
||||||
{
|
{
|
||||||
init = false;
|
init = false;
|
||||||
#if (defined(WIN32) || defined(_WIN32_WCE))
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
@ -70,7 +70,7 @@ int RTCPPacketBuilder::Init(size_t maxpacksize,double tsunit,const void *cname,s
|
|||||||
|
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
if ((status = ownsdesinfo.SetCNAME((const u_int8_t *)cname,cnamelen)) < 0)
|
if ((status = ownsdesinfo.SetCNAME((const uint8_t *)cname,cnamelen)) < 0)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
ClearAllSourceFlags();
|
ClearAllSourceFlags();
|
||||||
@ -83,6 +83,7 @@ int RTCPPacketBuilder::Init(size_t maxpacksize,double tsunit,const void *cname,s
|
|||||||
interval_note = -1;
|
interval_note = -1;
|
||||||
|
|
||||||
sdesbuildcount = 0;
|
sdesbuildcount = 0;
|
||||||
|
transmissiondelay = RTPTime(0,0);
|
||||||
|
|
||||||
firstpacket = true;
|
firstpacket = true;
|
||||||
processingsdes = false;
|
processingsdes = false;
|
||||||
@ -126,20 +127,21 @@ int RTCPPacketBuilder::BuildNextPacket(RTCPCompoundPacket **pack)
|
|||||||
sender = true;
|
sender = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t ssrc = rtppacketbuilder.GetSSRC();
|
uint32_t ssrc = rtppacketbuilder.GetSSRC();
|
||||||
RTPTime curtime = RTPTime::CurrentTime();
|
RTPTime curtime = RTPTime::CurrentTime();
|
||||||
|
|
||||||
if (sender)
|
if (sender)
|
||||||
{
|
{
|
||||||
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
||||||
u_int32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
uint32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
||||||
u_int32_t packcount = rtppacketbuilder.GetPacketCount();
|
uint32_t packcount = rtppacketbuilder.GetPacketCount();
|
||||||
u_int32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
uint32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
||||||
RTPTime diff = curtime;
|
RTPTime diff = curtime;
|
||||||
diff -= rtppacktime;
|
diff -= rtppacktime;
|
||||||
|
diff += transmissiondelay; // the sample being sampled at this very instant will need a larger timestamp
|
||||||
|
|
||||||
u_int32_t tsdiff = (u_int32_t)((diff.GetDouble()/timestampunit)+0.5);
|
uint32_t tsdiff = (uint32_t)((diff.GetDouble()/timestampunit)+0.5);
|
||||||
u_int32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
uint32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
||||||
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
||||||
|
|
||||||
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
||||||
@ -161,7 +163,7 @@ int RTCPPacketBuilder::BuildNextPacket(RTCPCompoundPacket **pack)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int8_t *owncname;
|
uint8_t *owncname;
|
||||||
size_t owncnamelen;
|
size_t owncnamelen;
|
||||||
|
|
||||||
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
||||||
@ -360,12 +362,12 @@ int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppac
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
u_int32_t rr_ssrc = srcdat->GetSSRC();
|
uint32_t rr_ssrc = srcdat->GetSSRC();
|
||||||
u_int32_t num = srcdat->INF_GetNumPacketsReceivedInInterval();
|
uint32_t num = srcdat->INF_GetNumPacketsReceivedInInterval();
|
||||||
u_int32_t prevseq = srcdat->INF_GetSavedExtendedSequenceNumber();
|
uint32_t prevseq = srcdat->INF_GetSavedExtendedSequenceNumber();
|
||||||
u_int32_t curseq = srcdat->INF_GetExtendedHighestSequenceNumber();
|
uint32_t curseq = srcdat->INF_GetExtendedHighestSequenceNumber();
|
||||||
u_int32_t expected = curseq-prevseq;
|
uint32_t expected = curseq-prevseq;
|
||||||
u_int8_t fraclost;
|
uint8_t fraclost;
|
||||||
|
|
||||||
if (expected < num) // got duplicates
|
if (expected < num) // got duplicates
|
||||||
fraclost = 0;
|
fraclost = 0;
|
||||||
@ -373,18 +375,18 @@ int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppac
|
|||||||
{
|
{
|
||||||
double lost = (double)(expected-num);
|
double lost = (double)(expected-num);
|
||||||
double frac = lost/((double)expected);
|
double frac = lost/((double)expected);
|
||||||
fraclost = (u_int8_t)(frac*256.0);
|
fraclost = (uint8_t)(frac*256.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
expected = curseq-srcdat->INF_GetBaseSequenceNumber();
|
expected = curseq-srcdat->INF_GetBaseSequenceNumber();
|
||||||
num = srcdat->INF_GetNumPacketsReceived();
|
num = srcdat->INF_GetNumPacketsReceived();
|
||||||
|
|
||||||
u_int32_t diff = expected-num;
|
uint32_t diff = expected-num;
|
||||||
int32_t *packlost = (int32_t *)&diff;
|
int32_t *packlost = (int32_t *)&diff;
|
||||||
|
|
||||||
u_int32_t jitter = srcdat->INF_GetJitter();
|
uint32_t jitter = srcdat->INF_GetJitter();
|
||||||
u_int32_t lsr;
|
uint32_t lsr;
|
||||||
u_int32_t dlsr;
|
uint32_t dlsr;
|
||||||
|
|
||||||
if (!srcdat->SR_HasInfo())
|
if (!srcdat->SR_HasInfo())
|
||||||
{
|
{
|
||||||
@ -394,15 +396,15 @@ int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppac
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
RTPNTPTime srtime = srcdat->SR_GetNTPTimestamp();
|
RTPNTPTime srtime = srcdat->SR_GetNTPTimestamp();
|
||||||
u_int32_t m = (srtime.GetMSW()&0xFFFF);
|
uint32_t m = (srtime.GetMSW()&0xFFFF);
|
||||||
u_int32_t l = ((srtime.GetLSW()>>16)&0xFFFF);
|
uint32_t l = ((srtime.GetLSW()>>16)&0xFFFF);
|
||||||
lsr = ((m<<16)|l);
|
lsr = ((m<<16)|l);
|
||||||
|
|
||||||
RTPTime diff = curtime;
|
RTPTime diff = curtime;
|
||||||
diff -= srcdat->SR_GetReceiveTime();
|
diff -= srcdat->SR_GetReceiveTime();
|
||||||
double diff2 = diff.GetDouble();
|
double diff2 = diff.GetDouble();
|
||||||
diff2 *= 65536.0;
|
diff2 *= 65536.0;
|
||||||
dlsr = (u_int32_t)diff2;
|
dlsr = (uint32_t)diff2;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = rtcpcomppack->AddReportBlock(rr_ssrc,fraclost,*packlost,curseq,jitter,lsr,dlsr);
|
status = rtcpcomppack->AddReportBlock(rr_ssrc,fraclost,*packlost,curseq,jitter,lsr,dlsr);
|
||||||
@ -498,7 +500,7 @@ int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppac
|
|||||||
int RTCPPacketBuilder::FillInSDES(RTCPCompoundPacketBuilder *rtcpcomppack,bool *full,bool *processedall,int *added)
|
int RTCPPacketBuilder::FillInSDES(RTCPCompoundPacketBuilder *rtcpcomppack,bool *full,bool *processedall,int *added)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
u_int8_t *data;
|
uint8_t *data;
|
||||||
size_t datalen;
|
size_t datalen;
|
||||||
|
|
||||||
*full = false;
|
*full = false;
|
||||||
@ -642,7 +644,7 @@ int RTCPPacketBuilder::BuildBYEPacket(RTCPCompoundPacket **pack,const void *reas
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t ssrc = rtppacketbuilder.GetSSRC();
|
uint32_t ssrc = rtppacketbuilder.GetSSRC();
|
||||||
bool useSR = false;
|
bool useSR = false;
|
||||||
|
|
||||||
if (useSRifpossible)
|
if (useSRifpossible)
|
||||||
@ -660,14 +662,14 @@ int RTCPPacketBuilder::BuildBYEPacket(RTCPCompoundPacket **pack,const void *reas
|
|||||||
{
|
{
|
||||||
RTPTime curtime = RTPTime::CurrentTime();
|
RTPTime curtime = RTPTime::CurrentTime();
|
||||||
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();
|
||||||
u_int32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
uint32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();
|
||||||
u_int32_t packcount = rtppacketbuilder.GetPacketCount();
|
uint32_t packcount = rtppacketbuilder.GetPacketCount();
|
||||||
u_int32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
uint32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();
|
||||||
RTPTime diff = curtime;
|
RTPTime diff = curtime;
|
||||||
diff -= rtppacktime;
|
diff -= rtppacktime;
|
||||||
|
|
||||||
u_int32_t tsdiff = (u_int32_t)((diff.GetDouble()/timestampunit)+0.5);
|
uint32_t tsdiff = (uint32_t)((diff.GetDouble()/timestampunit)+0.5);
|
||||||
u_int32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
uint32_t rtptimestamp = rtppacktimestamp+tsdiff;
|
||||||
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
RTPNTPTime ntptimestamp = curtime.GetNTPTime();
|
||||||
|
|
||||||
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)
|
||||||
@ -689,7 +691,7 @@ int RTCPPacketBuilder::BuildBYEPacket(RTCPCompoundPacket **pack,const void *reas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int8_t *owncname;
|
uint8_t *owncname;
|
||||||
size_t owncnamelen;
|
size_t owncnamelen;
|
||||||
|
|
||||||
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
owncname = ownsdesinfo.GetCNAME(&owncnamelen);
|
||||||
@ -709,11 +711,11 @@ int RTCPPacketBuilder::BuildBYEPacket(RTCPCompoundPacket **pack,const void *reas
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t ssrcs[1];
|
uint32_t ssrcs[1];
|
||||||
|
|
||||||
ssrcs[0] = ssrc;
|
ssrcs[0] = ssrc;
|
||||||
|
|
||||||
if ((status = rtcpcomppack->AddBYEPacket(ssrcs,1,(const u_int8_t *)reason,reasonlength)) < 0)
|
if ((status = rtcpcomppack->AddBYEPacket(ssrcs,1,(const uint8_t *)reason,reasonlength)) < 0)
|
||||||
{
|
{
|
||||||
delete rtcpcomppack;
|
delete rtcpcomppack;
|
||||||
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -57,6 +57,7 @@ public:
|
|||||||
|
|
||||||
int SetTimestampUnit(double tsunit) { if (!init) return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; if (tsunit < 0) return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT; timestampunit = tsunit; return 0; }
|
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 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 BuildNextPacket(RTCPCompoundPacket **pack);
|
||||||
int BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible = true);
|
int BuildBYEPacket(RTCPCompoundPacket **pack,const void *reason,size_t reasonlength,bool useSRifpossible = true);
|
||||||
@ -67,12 +68,12 @@ public:
|
|||||||
void SetPhoneInterval(int count) { if (!init) return; interval_phone = count; }
|
void SetPhoneInterval(int count) { if (!init) return; interval_phone = count; }
|
||||||
void SetToolInterval(int count) { if (!init) return; interval_tool = count; }
|
void SetToolInterval(int count) { if (!init) return; interval_tool = count; }
|
||||||
void SetNoteInterval(int count) { if (!init) return; interval_note = 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 u_int8_t *)s,len); }
|
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 u_int8_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 u_int8_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 u_int8_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 u_int8_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 u_int8_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:
|
private:
|
||||||
void ClearAllSourceFlags();
|
void ClearAllSourceFlags();
|
||||||
int FillInReportBlocks(RTCPCompoundPacketBuilder *pack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist);
|
int FillInReportBlocks(RTCPCompoundPacketBuilder *pack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist);
|
||||||
@ -86,7 +87,7 @@ private:
|
|||||||
size_t maxpacketsize;
|
size_t maxpacketsize;
|
||||||
double timestampunit;
|
double timestampunit;
|
||||||
bool firstpacket;
|
bool firstpacket;
|
||||||
RTPTime prevbuildtime;
|
RTPTime prevbuildtime,transmissiondelay;
|
||||||
|
|
||||||
class RTCPSDESInfoInternal : public RTCPSDESInfo
|
class RTCPSDESInfoInternal : public RTCPSDESInfo
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPRRPacket::RTCPRRPacket(u_int8_t *data,size_t datalength)
|
RTCPRRPacket::RTCPRRPacket(uint8_t *data,size_t datalength)
|
||||||
: RTCPPacket(RR,data,datalength)
|
: RTCPPacket(RR,data,datalength)
|
||||||
{
|
{
|
||||||
knownformat = false;
|
knownformat = false;
|
||||||
@ -49,7 +49,7 @@ RTCPRRPacket::RTCPRRPacket(u_int8_t *data,size_t datalength)
|
|||||||
hdr = (RTCPCommonHeader *)data;
|
hdr = (RTCPCommonHeader *)data;
|
||||||
if (hdr->padding)
|
if (hdr->padding)
|
||||||
{
|
{
|
||||||
u_int8_t padcount = data[datalength-1];
|
uint8_t padcount = data[datalength-1];
|
||||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||||
return;
|
return;
|
||||||
if (((size_t)padcount) >= len)
|
if (((size_t)padcount) >= len)
|
||||||
@ -57,7 +57,7 @@ RTCPRRPacket::RTCPRRPacket(u_int8_t *data,size_t datalength)
|
|||||||
len -= (size_t)padcount;
|
len -= (size_t)padcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedlength = sizeof(RTCPCommonHeader)+sizeof(u_int32_t);
|
expectedlength = sizeof(RTCPCommonHeader)+sizeof(uint32_t);
|
||||||
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
||||||
|
|
||||||
if (expectedlength != len)
|
if (expectedlength != len)
|
||||||
@ -82,7 +82,7 @@ void RTCPRRPacket::Dump()
|
|||||||
{
|
{
|
||||||
std::cout << " Report block " << i << std::endl;
|
std::cout << " Report block " << i << std::endl;
|
||||||
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
||||||
std::cout << " Fraction lost: " << (u_int32_t)GetFractionLost(i) << std::endl;
|
std::cout << " Fraction lost: " << (uint32_t)GetFractionLost(i) << std::endl;
|
||||||
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
||||||
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
||||||
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -46,24 +46,24 @@ class RTCPCompoundPacket;
|
|||||||
class RTCPRRPacket : public RTCPPacket
|
class RTCPRRPacket : public RTCPPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPRRPacket(u_int8_t *data,size_t datalen);
|
RTCPRRPacket(uint8_t *data,size_t datalen);
|
||||||
~RTCPRRPacket() { }
|
~RTCPRRPacket() { }
|
||||||
|
|
||||||
// Sender info
|
// Sender info
|
||||||
|
|
||||||
u_int32_t GetSenderSSRC() const;
|
uint32_t GetSenderSSRC() const;
|
||||||
|
|
||||||
// Reportblocks
|
// Reportblocks
|
||||||
|
|
||||||
int GetReceptionReportCount() const;
|
int GetReceptionReportCount() const;
|
||||||
// Note: the validity of index is NOT checked!
|
// Note: the validity of index is NOT checked!
|
||||||
u_int32_t GetSSRC(int index) const;
|
uint32_t GetSSRC(int index) const;
|
||||||
u_int8_t GetFractionLost(int index) const;
|
uint8_t GetFractionLost(int index) const;
|
||||||
int32_t GetLostPacketCount(int index) const;
|
int32_t GetLostPacketCount(int index) const;
|
||||||
u_int32_t GetExtendedHighestSequenceNumber(int index) const;
|
uint32_t GetExtendedHighestSequenceNumber(int index) const;
|
||||||
u_int32_t GetJitter(int index) const;
|
uint32_t GetJitter(int index) const;
|
||||||
u_int32_t GetLSR(int index) const;
|
uint32_t GetLSR(int index) const;
|
||||||
u_int32_t GetDLSR(int index) const;
|
uint32_t GetDLSR(int index) const;
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
@ -72,12 +72,12 @@ private:
|
|||||||
RTCPReceiverReport *GotoReport(int index) const;
|
RTCPReceiverReport *GotoReport(int index) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetSenderSSRC() const
|
inline uint32_t RTCPRRPacket::GetSenderSSRC() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u_int32_t *ssrcptr = (u_int32_t *)(data+sizeof(RTCPCommonHeader));
|
uint32_t *ssrcptr = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||||
return ntohl(*ssrcptr);
|
return ntohl(*ssrcptr);
|
||||||
}
|
}
|
||||||
inline int RTCPRRPacket::GetReceptionReportCount() const
|
inline int RTCPRRPacket::GetReceptionReportCount() const
|
||||||
@ -90,11 +90,11 @@ inline int RTCPRRPacket::GetReceptionReportCount() const
|
|||||||
|
|
||||||
inline RTCPReceiverReport *RTCPRRPacket::GotoReport(int index) const
|
inline RTCPReceiverReport *RTCPRRPacket::GotoReport(int index) const
|
||||||
{
|
{
|
||||||
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+index*sizeof(RTCPReceiverReport));
|
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)+index*sizeof(RTCPReceiverReport));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetSSRC(int index) const
|
inline uint32_t RTCPRRPacket::GetSSRC(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -102,7 +102,7 @@ inline u_int32_t RTCPRRPacket::GetSSRC(int index) const
|
|||||||
return ntohl(r->ssrc);
|
return ntohl(r->ssrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t RTCPRRPacket::GetFractionLost(int index) const
|
inline uint8_t RTCPRRPacket::GetFractionLost(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -115,14 +115,14 @@ inline int32_t RTCPRRPacket::GetLostPacketCount(int index) const
|
|||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
RTCPReceiverReport *r = GotoReport(index);
|
RTCPReceiverReport *r = GotoReport(index);
|
||||||
u_int32_t count = ((u_int32_t)r->packetslost[2])|(((u_int32_t)r->packetslost[1])<<8)|(((u_int32_t)r->packetslost[0])<<16);
|
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
|
if ((count&0x00800000) != 0) // test for negative number
|
||||||
count |= 0xFF000000;
|
count |= 0xFF000000;
|
||||||
int32_t *count2 = (int32_t *)(&count);
|
int32_t *count2 = (int32_t *)(&count);
|
||||||
return (*count2);
|
return (*count2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetExtendedHighestSequenceNumber(int index) const
|
inline uint32_t RTCPRRPacket::GetExtendedHighestSequenceNumber(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -130,7 +130,7 @@ inline u_int32_t RTCPRRPacket::GetExtendedHighestSequenceNumber(int index) const
|
|||||||
return ntohl(r->exthighseqnr);
|
return ntohl(r->exthighseqnr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetJitter(int index) const
|
inline uint32_t RTCPRRPacket::GetJitter(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -138,7 +138,7 @@ inline u_int32_t RTCPRRPacket::GetJitter(int index) const
|
|||||||
return ntohl(r->jitter);
|
return ntohl(r->jitter);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetLSR(int index) const
|
inline uint32_t RTCPRRPacket::GetLSR(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -146,7 +146,7 @@ inline u_int32_t RTCPRRPacket::GetLSR(int index) const
|
|||||||
return ntohl(r->lsr);
|
return ntohl(r->lsr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPRRPacket::GetDLSR(int index) const
|
inline uint32_t RTCPRRPacket::GetDLSR(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ void RTCPSDESInfo::Clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int RTCPSDESInfo::SetPrivateValue(const u_int8_t *prefix,size_t prefixlen,const u_int8_t *value,size_t valuelen)
|
int RTCPSDESInfo::SetPrivateValue(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen)
|
||||||
{
|
{
|
||||||
std::list<SDESPrivateItem *>::const_iterator it;
|
std::list<SDESPrivateItem *>::const_iterator it;
|
||||||
bool found;
|
bool found;
|
||||||
@ -55,7 +55,7 @@ int RTCPSDESInfo::SetPrivateValue(const u_int8_t *prefix,size_t prefixlen,const
|
|||||||
it = privitems.begin();
|
it = privitems.begin();
|
||||||
while (!found && it != privitems.end())
|
while (!found && it != privitems.end())
|
||||||
{
|
{
|
||||||
u_int8_t *p;
|
uint8_t *p;
|
||||||
size_t l;
|
size_t l;
|
||||||
|
|
||||||
p = (*it)->GetPrefix(&l);
|
p = (*it)->GetPrefix(&l);
|
||||||
@ -96,7 +96,7 @@ int RTCPSDESInfo::SetPrivateValue(const u_int8_t *prefix,size_t prefixlen,const
|
|||||||
return item->SetInfo(value,valuelen);
|
return item->SetInfo(value,valuelen);
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTCPSDESInfo::DeletePrivatePrefix(const u_int8_t *prefix,size_t prefixlen)
|
int RTCPSDESInfo::DeletePrivatePrefix(const uint8_t *prefix,size_t prefixlen)
|
||||||
{
|
{
|
||||||
std::list<SDESPrivateItem *>::iterator it;
|
std::list<SDESPrivateItem *>::iterator it;
|
||||||
bool found;
|
bool found;
|
||||||
@ -105,7 +105,7 @@ int RTCPSDESInfo::DeletePrivatePrefix(const u_int8_t *prefix,size_t prefixlen)
|
|||||||
it = privitems.begin();
|
it = privitems.begin();
|
||||||
while (!found && it != privitems.end())
|
while (!found && it != privitems.end())
|
||||||
{
|
{
|
||||||
u_int8_t *p;
|
uint8_t *p;
|
||||||
size_t l;
|
size_t l;
|
||||||
|
|
||||||
p = (*it)->GetPrefix(&l);
|
p = (*it)->GetPrefix(&l);
|
||||||
@ -134,7 +134,7 @@ void RTCPSDESInfo::GotoFirstPrivateValue()
|
|||||||
curitem = privitems.begin();
|
curitem = privitems.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTCPSDESInfo::GetNextPrivateValue(u_int8_t **prefix,size_t *prefixlen,u_int8_t **value,size_t *valuelen)
|
bool RTCPSDESInfo::GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen)
|
||||||
{
|
{
|
||||||
if (curitem == privitems.end())
|
if (curitem == privitems.end())
|
||||||
return false;
|
return false;
|
||||||
@ -144,7 +144,7 @@ bool RTCPSDESInfo::GetNextPrivateValue(u_int8_t **prefix,size_t *prefixlen,u_int
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTCPSDESInfo::GetPrivateValue(const u_int8_t *prefix,size_t prefixlen,u_int8_t **value,size_t *valuelen) const
|
bool RTCPSDESInfo::GetPrivateValue(const uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const
|
||||||
{
|
{
|
||||||
std::list<SDESPrivateItem *>::const_iterator it;
|
std::list<SDESPrivateItem *>::const_iterator it;
|
||||||
bool found;
|
bool found;
|
||||||
@ -153,7 +153,7 @@ bool RTCPSDESInfo::GetPrivateValue(const u_int8_t *prefix,size_t prefixlen,u_int
|
|||||||
it = privitems.begin();
|
it = privitems.begin();
|
||||||
while (!found && it != privitems.end())
|
while (!found && it != privitems.end())
|
||||||
{
|
{
|
||||||
u_int8_t *p;
|
uint8_t *p;
|
||||||
size_t l;
|
size_t l;
|
||||||
|
|
||||||
p = (*it)->GetPrefix(&l);
|
p = (*it)->GetPrefix(&l);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -48,45 +48,45 @@ public:
|
|||||||
virtual ~RTCPSDESInfo() { Clear(); }
|
virtual ~RTCPSDESInfo() { Clear(); }
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
int SetCNAME(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_CNAME-1,s,l); }
|
int SetCNAME(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_CNAME-1,s,l); }
|
||||||
int SetName(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_NAME-1,s,l); }
|
int SetName(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_NAME-1,s,l); }
|
||||||
int SetEMail(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,s,l); }
|
int SetEMail(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,s,l); }
|
||||||
int SetPhone(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_PHONE-1,s,l); }
|
int SetPhone(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_PHONE-1,s,l); }
|
||||||
int SetLocation(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,s,l); }
|
int SetLocation(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,s,l); }
|
||||||
int SetTool(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_TOOL-1,s,l); }
|
int SetTool(const uint8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_TOOL-1,s,l); }
|
||||||
int SetNote(const u_int8_t *s,size_t l) { return SetNonPrivateItem(RTCP_SDES_ID_NOTE-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
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int SetPrivateValue(const u_int8_t *prefix,size_t prefixlen,const u_int8_t *value,size_t valuelen);
|
int SetPrivateValue(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen);
|
||||||
int DeletePrivatePrefix(const u_int8_t *s,size_t len);
|
int DeletePrivatePrefix(const uint8_t *s,size_t len);
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
u_int8_t *GetCNAME(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_CNAME-1,len); }
|
uint8_t *GetCNAME(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_CNAME-1,len); }
|
||||||
u_int8_t *GetName(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NAME-1,len); }
|
uint8_t *GetName(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NAME-1,len); }
|
||||||
u_int8_t *GetEMail(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,len); }
|
uint8_t *GetEMail(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_EMAIL-1,len); }
|
||||||
u_int8_t *GetPhone(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_PHONE-1,len); }
|
uint8_t *GetPhone(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_PHONE-1,len); }
|
||||||
u_int8_t *GetLocation(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,len); }
|
uint8_t *GetLocation(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_LOCATION-1,len); }
|
||||||
u_int8_t *GetTool(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_TOOL-1,len); }
|
uint8_t *GetTool(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_TOOL-1,len); }
|
||||||
u_int8_t *GetNote(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NOTE-1,len); }
|
uint8_t *GetNote(size_t *len) const { return GetNonPrivateItem(RTCP_SDES_ID_NOTE-1,len); }
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
void GotoFirstPrivateValue();
|
void GotoFirstPrivateValue();
|
||||||
bool GetNextPrivateValue(u_int8_t **prefix,size_t *prefixlen,u_int8_t **value,size_t *valuelen);
|
bool GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen);
|
||||||
bool GetPrivateValue(const u_int8_t *prefix,size_t prefixlen,u_int8_t **value,size_t *valuelen) const;
|
bool GetPrivateValue(const uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const;
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
private:
|
private:
|
||||||
int SetNonPrivateItem(int itemno,const u_int8_t *s,size_t l) { if (l > RTCP_SDES_MAXITEMLENGTH) return ERR_RTP_SDES_LENGTHTOOBIG; return nonprivateitems[itemno].SetInfo(s,l); }
|
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); }
|
||||||
u_int8_t *GetNonPrivateItem(int itemno,size_t *len) const { return nonprivateitems[itemno].GetInfo(len); }
|
uint8_t *GetNonPrivateItem(int itemno,size_t *len) const { return nonprivateitems[itemno].GetInfo(len); }
|
||||||
|
|
||||||
class SDESItem
|
class SDESItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SDESItem() { str = 0; length = 0; }
|
SDESItem() { str = 0; length = 0; }
|
||||||
~SDESItem() { if (str) delete [] str; }
|
~SDESItem() { if (str) delete [] str; }
|
||||||
u_int8_t *GetInfo(size_t *len) const { *len = length; return str; }
|
uint8_t *GetInfo(size_t *len) const { *len = length; return str; }
|
||||||
int SetInfo(const u_int8_t *s,size_t len) { return SetString(&str,&length,s,len); }
|
int SetInfo(const uint8_t *s,size_t len) { return SetString(&str,&length,s,len); }
|
||||||
protected:
|
protected:
|
||||||
static int SetString(u_int8_t **dest,size_t *destlen,const u_int8_t *s,size_t len)
|
static int SetString(uint8_t **dest,size_t *destlen,const uint8_t *s,size_t len)
|
||||||
{
|
{
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
@ -98,7 +98,7 @@ private:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
len = (len>RTCP_SDES_MAXITEMLENGTH)?RTCP_SDES_MAXITEMLENGTH:len;
|
len = (len>RTCP_SDES_MAXITEMLENGTH)?RTCP_SDES_MAXITEMLENGTH:len;
|
||||||
u_int8_t *str2 = new u_int8_t[len];
|
uint8_t *str2 = new uint8_t[len];
|
||||||
if (str2 == 0)
|
if (str2 == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
memcpy(str2,s,len);
|
memcpy(str2,s,len);
|
||||||
@ -110,7 +110,7 @@ private:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
u_int8_t *str;
|
uint8_t *str;
|
||||||
size_t length;
|
size_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -122,10 +122,10 @@ private:
|
|||||||
public:
|
public:
|
||||||
SDESPrivateItem() { prefixlen = 0; prefix = 0; }
|
SDESPrivateItem() { prefixlen = 0; prefix = 0; }
|
||||||
~SDESPrivateItem() { if (prefix) delete [] prefix; }
|
~SDESPrivateItem() { if (prefix) delete [] prefix; }
|
||||||
u_int8_t *GetPrefix(size_t *len) const { *len = prefixlen; return prefix; }
|
uint8_t *GetPrefix(size_t *len) const { *len = prefixlen; return prefix; }
|
||||||
int SetPrefix(const u_int8_t *s,size_t len) { return SetString(&prefix,&prefixlen,s,len); }
|
int SetPrefix(const uint8_t *s,size_t len) { return SetString(&prefix,&prefixlen,s,len); }
|
||||||
private:
|
private:
|
||||||
u_int8_t *prefix;
|
uint8_t *prefix;
|
||||||
size_t prefixlen;
|
size_t prefixlen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPSDESPacket::RTCPSDESPacket(u_int8_t *data,size_t datalength)
|
RTCPSDESPacket::RTCPSDESPacket(uint8_t *data,size_t datalength)
|
||||||
: RTCPPacket(SDES,data,datalength)
|
: RTCPPacket(SDES,data,datalength)
|
||||||
{
|
{
|
||||||
knownformat = false;
|
knownformat = false;
|
||||||
@ -50,7 +50,7 @@ RTCPSDESPacket::RTCPSDESPacket(u_int8_t *data,size_t datalength)
|
|||||||
|
|
||||||
if (hdr->padding)
|
if (hdr->padding)
|
||||||
{
|
{
|
||||||
u_int8_t padcount = data[datalength-1];
|
uint8_t padcount = data[datalength-1];
|
||||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||||
return;
|
return;
|
||||||
if (((size_t)padcount) >= len)
|
if (((size_t)padcount) >= len)
|
||||||
@ -66,7 +66,7 @@ RTCPSDESPacket::RTCPSDESPacket(u_int8_t *data,size_t datalength)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int ssrccount = (int)(hdr->count);
|
int ssrccount = (int)(hdr->count);
|
||||||
u_int8_t *chunk;
|
uint8_t *chunk;
|
||||||
int chunkoffset;
|
int chunkoffset;
|
||||||
|
|
||||||
if (len < sizeof(RTCPCommonHeader))
|
if (len < sizeof(RTCPCommonHeader))
|
||||||
@ -79,11 +79,11 @@ RTCPSDESPacket::RTCPSDESPacket(u_int8_t *data,size_t datalength)
|
|||||||
{
|
{
|
||||||
chunkoffset = 0;
|
chunkoffset = 0;
|
||||||
|
|
||||||
if (len < (sizeof(u_int32_t)*2)) // chunk must contain at least a SSRC identifier
|
if (len < (sizeof(uint32_t)*2)) // chunk must contain at least a SSRC identifier
|
||||||
return; // and a (possibly empty) item
|
return; // and a (possibly empty) item
|
||||||
|
|
||||||
len -= sizeof(u_int32_t);
|
len -= sizeof(uint32_t);
|
||||||
chunkoffset = sizeof(u_int32_t);
|
chunkoffset = sizeof(uint32_t);
|
||||||
|
|
||||||
bool done = false;
|
bool done = false;
|
||||||
while (!done)
|
while (!done)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ class RTCPSDESPacket : public RTCPPacket
|
|||||||
public:
|
public:
|
||||||
enum ItemType { None,CNAME,NAME,EMAIL,PHONE,LOC,TOOL,NOTE,PRIV,Unknown };
|
enum ItemType { None,CNAME,NAME,EMAIL,PHONE,LOC,TOOL,NOTE,PRIV,Unknown };
|
||||||
|
|
||||||
RTCPSDESPacket(u_int8_t *data,size_t datalen);
|
RTCPSDESPacket(uint8_t *data,size_t datalen);
|
||||||
~RTCPSDESPacket() { }
|
~RTCPSDESPacket() { }
|
||||||
|
|
||||||
int GetChunkCount() const;
|
int GetChunkCount() const;
|
||||||
@ -57,26 +57,26 @@ public:
|
|||||||
bool GotoFirstChunk();
|
bool GotoFirstChunk();
|
||||||
bool GotoNextChunk();
|
bool GotoNextChunk();
|
||||||
|
|
||||||
u_int32_t GetChunkSSRC() const;
|
uint32_t GetChunkSSRC() const;
|
||||||
bool GotoFirstItem();
|
bool GotoFirstItem();
|
||||||
bool GotoNextItem();
|
bool GotoNextItem();
|
||||||
|
|
||||||
ItemType GetItemType() const;
|
ItemType GetItemType() const;
|
||||||
size_t GetItemLength() const;
|
size_t GetItemLength() const;
|
||||||
u_int8_t *GetItemData();
|
uint8_t *GetItemData();
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
size_t GetPRIVPrefixLength() const;
|
size_t GetPRIVPrefixLength() const;
|
||||||
u_int8_t *GetPRIVPrefixData();
|
uint8_t *GetPRIVPrefixData();
|
||||||
size_t GetPRIVValueLength() const;
|
size_t GetPRIVValueLength() const;
|
||||||
u_int8_t *GetPRIVValueData();
|
uint8_t *GetPRIVValueData();
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
private:
|
private:
|
||||||
u_int8_t *currentchunk;
|
uint8_t *currentchunk;
|
||||||
int curchunknum;
|
int curchunknum;
|
||||||
size_t itemoffset;
|
size_t itemoffset;
|
||||||
};
|
};
|
||||||
@ -98,7 +98,7 @@ inline bool RTCPSDESPacket::GotoFirstChunk()
|
|||||||
}
|
}
|
||||||
currentchunk = data+sizeof(RTCPCommonHeader);
|
currentchunk = data+sizeof(RTCPCommonHeader);
|
||||||
curchunknum = 1;
|
curchunknum = 1;
|
||||||
itemoffset = sizeof(u_int32_t);
|
itemoffset = sizeof(uint32_t);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,8 +111,8 @@ inline bool RTCPSDESPacket::GotoNextChunk()
|
|||||||
if (curchunknum == GetChunkCount())
|
if (curchunknum == GetChunkCount())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t offset = sizeof(u_int32_t);
|
size_t offset = sizeof(uint32_t);
|
||||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+sizeof(u_int32_t));
|
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+sizeof(uint32_t));
|
||||||
|
|
||||||
while (sdeshdr->id != 0)
|
while (sdeshdr->id != 0)
|
||||||
{
|
{
|
||||||
@ -125,17 +125,17 @@ inline bool RTCPSDESPacket::GotoNextChunk()
|
|||||||
offset += (4-(offset&0x03));
|
offset += (4-(offset&0x03));
|
||||||
currentchunk += offset;
|
currentchunk += offset;
|
||||||
curchunknum++;
|
curchunknum++;
|
||||||
itemoffset = sizeof(u_int32_t);
|
itemoffset = sizeof(uint32_t);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSDESPacket::GetChunkSSRC() const
|
inline uint32_t RTCPSDESPacket::GetChunkSSRC() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
if (currentchunk == 0)
|
if (currentchunk == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int32_t *ssrc = (u_int32_t *)currentchunk;
|
uint32_t *ssrc = (uint32_t *)currentchunk;
|
||||||
return ntohl(*ssrc);
|
return ntohl(*ssrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ inline bool RTCPSDESPacket::GotoFirstItem()
|
|||||||
return false;
|
return false;
|
||||||
if (currentchunk == 0)
|
if (currentchunk == 0)
|
||||||
return false;
|
return false;
|
||||||
itemoffset = sizeof(u_int32_t);
|
itemoffset = sizeof(uint32_t);
|
||||||
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
RTCPSDESHeader *sdeshdr = (RTCPSDESHeader *)(currentchunk+itemoffset);
|
||||||
if (sdeshdr->id == 0)
|
if (sdeshdr->id == 0)
|
||||||
return false;
|
return false;
|
||||||
@ -218,7 +218,7 @@ inline size_t RTCPSDESPacket::GetItemLength() const
|
|||||||
return (size_t)(sdeshdr->length);
|
return (size_t)(sdeshdr->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPSDESPacket::GetItemData()
|
inline uint8_t *RTCPSDESPacket::GetItemData()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -242,14 +242,14 @@ inline size_t RTCPSDESPacket::GetPRIVPrefixLength() const
|
|||||||
return 0;
|
return 0;
|
||||||
if (sdeshdr->length == 0)
|
if (sdeshdr->length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||||
size_t prefixlength = (size_t)(*preflen);
|
size_t prefixlength = (size_t)(*preflen);
|
||||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||||
return 0;
|
return 0;
|
||||||
return prefixlength;
|
return prefixlength;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPSDESPacket::GetPRIVPrefixData()
|
inline uint8_t *RTCPSDESPacket::GetPRIVPrefixData()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -260,7 +260,7 @@ inline u_int8_t *RTCPSDESPacket::GetPRIVPrefixData()
|
|||||||
return 0;
|
return 0;
|
||||||
if (sdeshdr->length == 0)
|
if (sdeshdr->length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||||
size_t prefixlength = (size_t)(*preflen);
|
size_t prefixlength = (size_t)(*preflen);
|
||||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||||
return 0;
|
return 0;
|
||||||
@ -280,14 +280,14 @@ inline size_t RTCPSDESPacket::GetPRIVValueLength() const
|
|||||||
return 0;
|
return 0;
|
||||||
if (sdeshdr->length == 0)
|
if (sdeshdr->length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||||
size_t prefixlength = (size_t)(*preflen);
|
size_t prefixlength = (size_t)(*preflen);
|
||||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||||
return 0;
|
return 0;
|
||||||
return ((size_t)(sdeshdr->length))-prefixlength-1;
|
return ((size_t)(sdeshdr->length))-prefixlength-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t *RTCPSDESPacket::GetPRIVValueData()
|
inline uint8_t *RTCPSDESPacket::GetPRIVValueData()
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -298,7 +298,7 @@ inline u_int8_t *RTCPSDESPacket::GetPRIVValueData()
|
|||||||
return 0;
|
return 0;
|
||||||
if (sdeshdr->length == 0)
|
if (sdeshdr->length == 0)
|
||||||
return 0;
|
return 0;
|
||||||
u_int8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
uint8_t *preflen = currentchunk+itemoffset+sizeof(RTCPSDESHeader);
|
||||||
size_t prefixlength = (size_t)(*preflen);
|
size_t prefixlength = (size_t)(*preflen);
|
||||||
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
if (prefixlength > (size_t)((sdeshdr->length)-1))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
RTCPSRPacket::RTCPSRPacket(u_int8_t *data,size_t datalength)
|
RTCPSRPacket::RTCPSRPacket(uint8_t *data,size_t datalength)
|
||||||
: RTCPPacket(SR,data,datalength)
|
: RTCPPacket(SR,data,datalength)
|
||||||
{
|
{
|
||||||
knownformat = false;
|
knownformat = false;
|
||||||
@ -49,7 +49,7 @@ RTCPSRPacket::RTCPSRPacket(u_int8_t *data,size_t datalength)
|
|||||||
hdr = (RTCPCommonHeader *)data;
|
hdr = (RTCPCommonHeader *)data;
|
||||||
if (hdr->padding)
|
if (hdr->padding)
|
||||||
{
|
{
|
||||||
u_int8_t padcount = data[datalength-1];
|
uint8_t padcount = data[datalength-1];
|
||||||
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
if ((padcount & 0x03) != 0) // not a multiple of four! (see rfc 3550 p 37)
|
||||||
return;
|
return;
|
||||||
if (((size_t)padcount) >= len)
|
if (((size_t)padcount) >= len)
|
||||||
@ -57,7 +57,7 @@ RTCPSRPacket::RTCPSRPacket(u_int8_t *data,size_t datalength)
|
|||||||
len -= (size_t)padcount;
|
len -= (size_t)padcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedlength = sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+sizeof(RTCPSenderReport);
|
expectedlength = sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport);
|
||||||
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
expectedlength += sizeof(RTCPReceiverReport)*((int)hdr->count);
|
||||||
|
|
||||||
if (expectedlength != len)
|
if (expectedlength != len)
|
||||||
@ -88,7 +88,7 @@ void RTCPSRPacket::Dump()
|
|||||||
{
|
{
|
||||||
std::cout << " Report block " << i << std::endl;
|
std::cout << " Report block " << i << std::endl;
|
||||||
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
std::cout << " SSRC: " << GetSSRC(i) << std::endl;
|
||||||
std::cout << " Fraction lost: " << (u_int32_t)GetFractionLost(i) << std::endl;
|
std::cout << " Fraction lost: " << (uint32_t)GetFractionLost(i) << std::endl;
|
||||||
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
std::cout << " Packets lost: " << GetLostPacketCount(i) << std::endl;
|
||||||
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
std::cout << " Seq. nr.: " << GetExtendedHighestSequenceNumber(i) << std::endl;
|
||||||
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
std::cout << " Jitter: " << GetJitter(i) << std::endl;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -47,28 +47,28 @@ class RTCPCompoundPacket;
|
|||||||
class RTCPSRPacket : public RTCPPacket
|
class RTCPSRPacket : public RTCPPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPSRPacket(u_int8_t *data,size_t datalength);
|
RTCPSRPacket(uint8_t *data,size_t datalength);
|
||||||
~RTCPSRPacket() { }
|
~RTCPSRPacket() { }
|
||||||
|
|
||||||
// Sender info
|
// Sender info
|
||||||
|
|
||||||
u_int32_t GetSenderSSRC() const;
|
uint32_t GetSenderSSRC() const;
|
||||||
RTPNTPTime GetNTPTimestamp() const;
|
RTPNTPTime GetNTPTimestamp() const;
|
||||||
u_int32_t GetRTPTimestamp() const;
|
uint32_t GetRTPTimestamp() const;
|
||||||
u_int32_t GetSenderPacketCount() const;
|
uint32_t GetSenderPacketCount() const;
|
||||||
u_int32_t GetSenderOctetCount() const;
|
uint32_t GetSenderOctetCount() const;
|
||||||
|
|
||||||
// Reportblocks
|
// Reportblocks
|
||||||
|
|
||||||
int GetReceptionReportCount() const;
|
int GetReceptionReportCount() const;
|
||||||
// Note: the validity of index is NOT checked!
|
// Note: the validity of index is NOT checked!
|
||||||
u_int32_t GetSSRC(int index) const;
|
uint32_t GetSSRC(int index) const;
|
||||||
u_int8_t GetFractionLost(int index) const;
|
uint8_t GetFractionLost(int index) const;
|
||||||
int32_t GetLostPacketCount(int index) const;
|
int32_t GetLostPacketCount(int index) const;
|
||||||
u_int32_t GetExtendedHighestSequenceNumber(int index) const;
|
uint32_t GetExtendedHighestSequenceNumber(int index) const;
|
||||||
u_int32_t GetJitter(int index) const;
|
uint32_t GetJitter(int index) const;
|
||||||
u_int32_t GetLSR(int index) const;
|
uint32_t GetLSR(int index) const;
|
||||||
u_int32_t GetDLSR(int index) const;
|
uint32_t GetDLSR(int index) const;
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
@ -77,12 +77,12 @@ private:
|
|||||||
RTCPReceiverReport *GotoReport(int index) const;
|
RTCPReceiverReport *GotoReport(int index) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetSenderSSRC() const
|
inline uint32_t RTCPSRPacket::GetSenderSSRC() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u_int32_t *ssrcptr = (u_int32_t *)(data+sizeof(RTCPCommonHeader));
|
uint32_t *ssrcptr = (uint32_t *)(data+sizeof(RTCPCommonHeader));
|
||||||
return ntohl(*ssrcptr);
|
return ntohl(*ssrcptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,31 +91,31 @@ inline RTPNTPTime RTCPSRPacket::GetNTPTimestamp() const
|
|||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return RTPNTPTime(0,0);
|
return RTPNTPTime(0,0);
|
||||||
|
|
||||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t));
|
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||||
return RTPNTPTime(ntohl(sr->ntptime_msw),ntohl(sr->ntptime_lsw));
|
return RTPNTPTime(ntohl(sr->ntptime_msw),ntohl(sr->ntptime_lsw));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetRTPTimestamp() const
|
inline uint32_t RTCPSRPacket::GetRTPTimestamp() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t));
|
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||||
return ntohl(sr->rtptimestamp);
|
return ntohl(sr->rtptimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetSenderPacketCount() const
|
inline uint32_t RTCPSRPacket::GetSenderPacketCount() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t));
|
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||||
return ntohl(sr->packetcount);
|
return ntohl(sr->packetcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetSenderOctetCount() const
|
inline uint32_t RTCPSRPacket::GetSenderOctetCount() const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t));
|
RTCPSenderReport *sr = (RTCPSenderReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t));
|
||||||
return ntohl(sr->octetcount);
|
return ntohl(sr->octetcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,11 +129,11 @@ inline int RTCPSRPacket::GetReceptionReportCount() const
|
|||||||
|
|
||||||
inline RTCPReceiverReport *RTCPSRPacket::GotoReport(int index) const
|
inline RTCPReceiverReport *RTCPSRPacket::GotoReport(int index) const
|
||||||
{
|
{
|
||||||
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(u_int32_t)+sizeof(RTCPSenderReport)+index*sizeof(RTCPReceiverReport));
|
RTCPReceiverReport *r = (RTCPReceiverReport *)(data+sizeof(RTCPCommonHeader)+sizeof(uint32_t)+sizeof(RTCPSenderReport)+index*sizeof(RTCPReceiverReport));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetSSRC(int index) const
|
inline uint32_t RTCPSRPacket::GetSSRC(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -141,7 +141,7 @@ inline u_int32_t RTCPSRPacket::GetSSRC(int index) const
|
|||||||
return ntohl(r->ssrc);
|
return ntohl(r->ssrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int8_t RTCPSRPacket::GetFractionLost(int index) const
|
inline uint8_t RTCPSRPacket::GetFractionLost(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -154,14 +154,14 @@ inline int32_t RTCPSRPacket::GetLostPacketCount(int index) const
|
|||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
RTCPReceiverReport *r = GotoReport(index);
|
RTCPReceiverReport *r = GotoReport(index);
|
||||||
u_int32_t count = ((u_int32_t)r->packetslost[2])|(((u_int32_t)r->packetslost[1])<<8)|(((u_int32_t)r->packetslost[0])<<16);
|
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
|
if ((count&0x00800000) != 0) // test for negative number
|
||||||
count |= 0xFF000000;
|
count |= 0xFF000000;
|
||||||
int32_t *count2 = (int32_t *)(&count);
|
int32_t *count2 = (int32_t *)(&count);
|
||||||
return (*count2);
|
return (*count2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetExtendedHighestSequenceNumber(int index) const
|
inline uint32_t RTCPSRPacket::GetExtendedHighestSequenceNumber(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -169,7 +169,7 @@ inline u_int32_t RTCPSRPacket::GetExtendedHighestSequenceNumber(int index) const
|
|||||||
return ntohl(r->exthighseqnr);
|
return ntohl(r->exthighseqnr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetJitter(int index) const
|
inline uint32_t RTCPSRPacket::GetJitter(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -177,7 +177,7 @@ inline u_int32_t RTCPSRPacket::GetJitter(int index) const
|
|||||||
return ntohl(r->jitter);
|
return ntohl(r->jitter);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetLSR(int index) const
|
inline uint32_t RTCPSRPacket::GetLSR(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
@ -185,7 +185,7 @@ inline u_int32_t RTCPSRPacket::GetLSR(int index) const
|
|||||||
return ntohl(r->lsr);
|
return ntohl(r->lsr);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline u_int32_t RTCPSRPacket::GetDLSR(int index) const
|
inline uint32_t RTCPSRPacket::GetDLSR(int index) const
|
||||||
{
|
{
|
||||||
if (!knownformat)
|
if (!knownformat)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ class RTCPCompoundPacket;
|
|||||||
class RTCPUnknownPacket : public RTCPPacket
|
class RTCPUnknownPacket : public RTCPPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPUnknownPacket(u_int8_t *data,size_t datalen) :
|
RTCPUnknownPacket(uint8_t *data,size_t datalen) :
|
||||||
RTCPPacket(Unknown,data,datalen)
|
RTCPPacket(Unknown,data,datalen)
|
||||||
{
|
{
|
||||||
// Since we don't expect a format, we'll trivially put knownformat = true
|
// Since we don't expect a format, we'll trivially put knownformat = true
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -40,6 +40,6 @@
|
|||||||
#include "rtpconfig_unix.h"
|
#include "rtpconfig_unix.h"
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
|
|
||||||
// #define RTPDEBUG
|
//#define RTPDEBUG
|
||||||
|
|
||||||
#endif // RTPCONFIG_H
|
#endif // RTPCONFIG_H
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -66,7 +66,5 @@
|
|||||||
|
|
||||||
@RTP_SUPPORT_IFADDRS@
|
@RTP_SUPPORT_IFADDRS@
|
||||||
|
|
||||||
@RTP_SUPPORT_GST@
|
|
||||||
|
|
||||||
#endif // RTPCONFIG_UNIX_H
|
#endif // RTPCONFIG_UNIX_H
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -175,3 +175,4 @@ void operator delete[](void *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -169,38 +169,38 @@ static RTPErrorInfo ErrorDescriptions[]=
|
|||||||
{ ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL,"The hostname is larger than the specified buffer size"},
|
{ 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_SDES_MAXPRIVITEMS,"The maximum number of SDES private item prefixes was reached"},
|
||||||
{ ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE,"An invalid probation type was specified"},
|
{ ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE,"An invalid probation type was specified"},
|
||||||
{ ERR_RTP_GSTV4TRANS_ALREADYCREATED, "The transmitter was already created"},
|
{ ERR_RTP_FAKETRANS_ALREADYCREATED, "The transmitter was already created"},
|
||||||
{ ERR_RTP_GSTV4TRANS_ALREADYINIT, "The transmitter was already initialize"},
|
{ ERR_RTP_FAKETRANS_ALREADYINIT, "The transmitter was already initialize"},
|
||||||
{ ERR_RTP_GSTV4TRANS_ALREADYWAITING, "The transmitter is already waiting for incoming data"},
|
{ ERR_RTP_FAKETRANS_ALREADYWAITING, "The transmitter is already waiting for incoming data"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTBINDRTCPSOCKET, "The 'bind' call for the RTCP socket failed"},
|
{ ERR_RTP_FAKETRANS_CANTBINDRTCPSOCKET, "The 'bind' call for the RTCP socket failed"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTBINDRTPSOCKET, "The 'bind' call for the RTP socket failed"},
|
{ ERR_RTP_FAKETRANS_CANTBINDRTPSOCKET, "The 'bind' call for the RTP socket failed"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTCALCULATELOCALIP, "The local IP addresses could not be determined"},
|
{ ERR_RTP_FAKETRANS_CANTCALCULATELOCALIP, "The local IP addresses could not be determined"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTCREATEABORTDESCRIPTORS, "Couldn't create the sockets used to abort waiting for incoming data"},
|
{ ERR_RTP_FAKETRANS_CANTCREATEABORTDESCRIPTORS, "Couldn't create the sockets used to abort waiting for incoming data"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTCREATEPIPE, "Couldn't create the pipe 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_GSTV4TRANS_CANTCREATESOCKET, "Couldn't create the RTP or RTCP socket"},
|
{ ERR_RTP_FAKETRANS_CANTCREATESOCKET, "Couldn't create the RTP or RTCP socket"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTINITMUTEX, "Failed to initialize a mutex used by the transmitter"},
|
{ ERR_RTP_FAKETRANS_CANTINITMUTEX, "Failed to initialize a mutex used by the transmitter"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTSETRTCPRECEIVEBUF, "Couldn't set the receive buffer size for the RTCP socket"},
|
{ ERR_RTP_FAKETRANS_CANTSETRTCPRECEIVEBUF, "Couldn't set the receive buffer size for the RTCP socket"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTSETRTCPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTCP socket"},
|
{ ERR_RTP_FAKETRANS_CANTSETRTCPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTCP socket"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTSETRTPRECEIVEBUF, "Couldn't set the receive buffer size for the RTP socket"},
|
{ ERR_RTP_FAKETRANS_CANTSETRTPRECEIVEBUF, "Couldn't set the receive buffer size for the RTP socket"},
|
||||||
{ ERR_RTP_GSTV4TRANS_CANTSETRTPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTP socket"},
|
{ ERR_RTP_FAKETRANS_CANTSETRTPTRANSMITBUF, "Couldn't set the transmission buffer size for the RTP socket"},
|
||||||
{ ERR_RTP_GSTV4TRANS_COULDNTJOINMULTICASTGROUP, "Unable to join the specified multicast group"},
|
{ ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP, "Unable to join the specified multicast group"},
|
||||||
{ ERR_RTP_GSTV4TRANS_DIFFERENTRECEIVEMODE, "The function called doens't match the current receive mode"},
|
{ ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE, "The function called doens't match the current receive mode"},
|
||||||
{ ERR_RTP_GSTV4TRANS_ERRORINSELECT, "Error in the transmitter's 'select' call"},
|
{ ERR_RTP_FAKETRANS_ERRORINSELECT, "Error in the transmitter's 'select' call"},
|
||||||
{ ERR_RTP_GSTV4TRANS_ILLEGALPARAMETERS, "Illegal parameters type passed to the transmitter"},
|
{ ERR_RTP_FAKETRANS_ILLEGALPARAMETERS, "Illegal parameters type passed to the transmitter"},
|
||||||
{ ERR_RTP_GSTV4TRANS_INVALIDADDRESSTYPE, "Specified address type isn't compatible with this transmitter"},
|
{ ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE, "Specified address type isn't compatible with this transmitter"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOLOCALIPS, "Couldn't determine the local host name since the local IP list is empty"},
|
{ ERR_RTP_FAKETRANS_NOLOCALIPS, "Couldn't determine the local host name since the local IP list is empty"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOMULTICASTSUPPORT, "Multicast support is not available"},
|
{ ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT, "Multicast support is not available"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOSUCHENTRY, "Specified entry could not be found"},
|
{ ERR_RTP_FAKETRANS_NOSUCHENTRY, "Specified entry could not be found"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOTAMULTICASTADDRESS, "The specified address is not a multicast address"},
|
{ ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS, "The specified address is not a multicast address"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOTCREATED, "The 'Create' call for this transmitter has not been called"},
|
{ ERR_RTP_FAKETRANS_NOTCREATED, "The 'Create' call for this transmitter has not been called"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOTINIT, "The 'Init' call for this transmitter has not been called"},
|
{ ERR_RTP_FAKETRANS_NOTINIT, "The 'Init' call for this transmitter has not been called"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOTWAITING, "The transmitter is not waiting for incoming data"},
|
{ ERR_RTP_FAKETRANS_NOTWAITING, "The transmitter is not waiting for incoming data"},
|
||||||
{ ERR_RTP_GSTV4TRANS_PORTBASENOTEVEN, "The specified port base is not an even number"},
|
{ ERR_RTP_FAKETRANS_PORTBASENOTEVEN, "The specified port base is not an even number"},
|
||||||
{ ERR_RTP_GSTV4TRANS_SPECIFIEDSIZETOOBIG, "The maximum packet size is too big for this transmitter"},
|
{ ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG, "The maximum packet size is too big for this transmitter"},
|
||||||
{ ERR_RTP_GSTV4TRANS_INVALIDEVENT, "Expecting UNKNOWN_EVENT to set source address but got another type of event"},
|
{ ERR_RTP_FAKETRANS_INVALIDEVENT, "Expecting UNKNOWN_EVENT to set source address but got another type of event"},
|
||||||
{ ERR_RTP_GSTV4TRANS_SRCADDRNOTSET, "Got packet but src address information was not set, returning"},
|
{ ERR_RTP_FAKETRANS_SRCADDRNOTSET, "Got packet but src address information was not set, returning"},
|
||||||
{ ERR_RTP_GSTV4TRANS_NOTNETBUFFER, "Received buffer is not a GstNetBuffer"},
|
{ ERR_RTP_FAKETRANS_NOTNETBUFFER, "Received buffer is not a GstNetBuffer"},
|
||||||
{ ERR_RTP_GSTV4TRANS_WAITNOTIMPLEMENTED, "The WaitForIncomingData is not implemented in the Gst transmitter"},
|
{ 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"},
|
{ ERR_RTP_INVALID_PACKET_VERISON, "The packet is not the correct version of RTP"},
|
||||||
{ 0,0 }
|
{ 0,0 }
|
||||||
};
|
};
|
||||||
@ -219,6 +219,12 @@ std::string RTPGetErrorString(int errcode)
|
|||||||
return std::string(ErrorDescriptions[i].description);
|
return std::string(ErrorDescriptions[i].description);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
return std::string("Unknown error code");
|
char str[16];
|
||||||
|
#if defined(WIN32) || defined(_WIN32_WCE)
|
||||||
|
_snprintf(str,16,"(%d)",errcode);
|
||||||
|
#else
|
||||||
|
snprintf(str,16,"(%d)",errcode);
|
||||||
|
#endif // WIN32 || _WIN32_WCE
|
||||||
|
return std::string("Unknown error code") + std::string(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -165,38 +165,40 @@ std::string RTPGetErrorString(int errcode);
|
|||||||
#define ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG -125
|
#define ERR_RTP_UDPV6TRANS_SPECIFIEDSIZETOOBIG -125
|
||||||
#define ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE -126
|
#define ERR_RTP_INTERNALSOURCEDATA_INVALIDPROBATIONTYPE -126
|
||||||
#define ERR_RTP_SESSION_USERDEFINEDTRANSMITTERNULL -127
|
#define ERR_RTP_SESSION_USERDEFINEDTRANSMITTERNULL -127
|
||||||
#define ERR_RTP_GSTV4TRANS_ALREADYCREATED -128
|
#define ERR_RTP_FAKETRANS_ALREADYCREATED -128
|
||||||
#define ERR_RTP_GSTV4TRANS_ALREADYINIT -129
|
#define ERR_RTP_FAKETRANS_ALREADYINIT -129
|
||||||
#define ERR_RTP_GSTV4TRANS_ALREADYWAITING -130
|
#define ERR_RTP_FAKETRANS_ALREADYWAITING -130
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTBINDRTCPSOCKET -131
|
#define ERR_RTP_FAKETRANS_CANTBINDRTCPSOCKET -131
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTBINDRTPSOCKET -132
|
#define ERR_RTP_FAKETRANS_CANTBINDRTPSOCKET -132
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTCALCULATELOCALIP -133
|
#define ERR_RTP_FAKETRANS_CANTCALCULATELOCALIP -133
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTCREATEABORTDESCRIPTORS -134
|
#define ERR_RTP_FAKETRANS_CANTCREATEABORTDESCRIPTORS -134
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTCREATEPIPE -135
|
#define ERR_RTP_FAKETRANS_CANTCREATEPIPE -135
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTCREATESOCKET -136
|
#define ERR_RTP_FAKETRANS_CANTCREATESOCKET -136
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTINITMUTEX -137
|
#define ERR_RTP_FAKETRANS_CANTINITMUTEX -137
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTSETRTCPRECEIVEBUF -138
|
#define ERR_RTP_FAKETRANS_CANTSETRTCPRECEIVEBUF -138
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTSETRTCPTRANSMITBUF -139
|
#define ERR_RTP_FAKETRANS_CANTSETRTCPTRANSMITBUF -139
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTSETRTPRECEIVEBUF -140
|
#define ERR_RTP_FAKETRANS_CANTSETRTPRECEIVEBUF -140
|
||||||
#define ERR_RTP_GSTV4TRANS_CANTSETRTPTRANSMITBUF -141
|
#define ERR_RTP_FAKETRANS_CANTSETRTPTRANSMITBUF -141
|
||||||
#define ERR_RTP_GSTV4TRANS_COULDNTJOINMULTICASTGROUP -142
|
#define ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP -142
|
||||||
#define ERR_RTP_GSTV4TRANS_DIFFERENTRECEIVEMODE -143
|
#define ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE -143
|
||||||
#define ERR_RTP_GSTV4TRANS_ERRORINSELECT -144
|
#define ERR_RTP_FAKETRANS_ERRORINSELECT -144
|
||||||
#define ERR_RTP_GSTV4TRANS_ILLEGALPARAMETERS -145
|
#define ERR_RTP_FAKETRANS_ILLEGALPARAMETERS -145
|
||||||
#define ERR_RTP_GSTV4TRANS_INVALIDADDRESSTYPE -146
|
#define ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE -146
|
||||||
#define ERR_RTP_GSTV4TRANS_NOLOCALIPS -147
|
#define ERR_RTP_FAKETRANS_NOLOCALIPS -147
|
||||||
#define ERR_RTP_GSTV4TRANS_NOMULTICASTSUPPORT -148
|
#define ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT -148
|
||||||
#define ERR_RTP_GSTV4TRANS_NOSUCHENTRY -149
|
#define ERR_RTP_FAKETRANS_NOSUCHENTRY -149
|
||||||
#define ERR_RTP_GSTV4TRANS_NOTAMULTICASTADDRESS -150
|
#define ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS -150
|
||||||
#define ERR_RTP_GSTV4TRANS_NOTCREATED -151
|
#define ERR_RTP_FAKETRANS_NOTCREATED -151
|
||||||
#define ERR_RTP_GSTV4TRANS_NOTINIT -152
|
#define ERR_RTP_FAKETRANS_NOTINIT -152
|
||||||
#define ERR_RTP_GSTV4TRANS_NOTWAITING -153
|
#define ERR_RTP_FAKETRANS_NOTWAITING -153
|
||||||
#define ERR_RTP_GSTV4TRANS_PORTBASENOTEVEN -154
|
#define ERR_RTP_FAKETRANS_PORTBASENOTEVEN -154
|
||||||
#define ERR_RTP_GSTV4TRANS_SPECIFIEDSIZETOOBIG -155
|
#define ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG -155
|
||||||
#define ERR_RTP_GSTV4TRANS_INVALIDEVENT -156
|
#define ERR_RTP_FAKETRANS_INVALIDEVENT -156
|
||||||
#define ERR_RTP_GSTV4TRANS_SRCADDRNOTSET -157
|
#define ERR_RTP_FAKETRANS_SRCADDRNOTSET -157
|
||||||
#define ERR_RTP_GSTV4TRANS_NOTNETBUFFER -158
|
#define ERR_RTP_FAKETRANS_NOTNETBUFFER -158
|
||||||
#define ERR_RTP_GSTV4TRANS_WAITNOTIMPLEMENTED -159
|
#define ERR_RTP_FAKETRANS_WAITNOTIMPLEMENTED -159
|
||||||
#define ERR_RTP_INVALID_PACKET_VERISON -160
|
#define ERR_RTP_INVALID_PACKET_VERISON -160
|
||||||
|
|
||||||
|
|
||||||
#endif // RTPERRORS_H
|
#endif // RTPERRORS_H
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ inline int RTPHashTable<Element,GetIndex,hashsize>::DeleteCurrentElement()
|
|||||||
{
|
{
|
||||||
tmp1->hashnext = tmp2;
|
tmp1->hashnext = tmp2;
|
||||||
if (tmp2 != 0)
|
if (tmp2 != 0)
|
||||||
tmp2->hashprev = 0;
|
tmp2->hashprev = tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relink elements in list
|
// Relink elements in list
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#define RTPINTERNALSOURCEDATA_MAXPROBATIONPACKETS 32
|
#define RTPINTERNALSOURCEDATA_MAXPROBATIONPACKETS 32
|
||||||
|
|
||||||
RTPInternalSourceData::RTPInternalSourceData(u_int32_t ssrc,RTPSources::ProbationType probtype):RTPSourceData(ssrc)
|
RTPInternalSourceData::RTPInternalSourceData(uint32_t ssrc,RTPSources::ProbationType probtype):RTPSourceData(ssrc)
|
||||||
{
|
{
|
||||||
#ifdef RTP_SUPPORT_PROBATION
|
#ifdef RTP_SUPPORT_PROBATION
|
||||||
probationtype = probtype;
|
probationtype = probtype;
|
||||||
@ -131,7 +131,7 @@ int RTPInternalSourceData::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &re
|
|||||||
|
|
||||||
std::list<RTPPacket*>::iterator it,start;
|
std::list<RTPPacket*>::iterator it,start;
|
||||||
bool done = false;
|
bool done = false;
|
||||||
u_int32_t newseqnr = rtppack->GetExtendedSequenceNumber();
|
uint32_t newseqnr = rtppack->GetExtendedSequenceNumber();
|
||||||
|
|
||||||
it = packetlist.end();
|
it = packetlist.end();
|
||||||
--it;
|
--it;
|
||||||
@ -140,7 +140,7 @@ int RTPInternalSourceData::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &re
|
|||||||
while (!done)
|
while (!done)
|
||||||
{
|
{
|
||||||
RTPPacket *p;
|
RTPPacket *p;
|
||||||
u_int32_t seqnr;
|
uint32_t seqnr;
|
||||||
|
|
||||||
p = *it;
|
p = *it;
|
||||||
seqnr = p->GetExtendedSequenceNumber();
|
seqnr = p->GetExtendedSequenceNumber();
|
||||||
@ -171,7 +171,7 @@ int RTPInternalSourceData::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &re
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis)
|
int RTPInternalSourceData::ProcessSDESItem(uint8_t id,const uint8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis)
|
||||||
{
|
{
|
||||||
*cnamecollis = false;
|
*cnamecollis = false;
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size
|
|||||||
case RTCP_SDES_ID_CNAME:
|
case RTCP_SDES_ID_CNAME:
|
||||||
{
|
{
|
||||||
size_t curlen;
|
size_t curlen;
|
||||||
u_int8_t *oldcname;
|
uint8_t *oldcname;
|
||||||
|
|
||||||
// NOTE: we're going to make sure that the CNAME is only set once.
|
// NOTE: we're going to make sure that the CNAME is only set once.
|
||||||
oldcname = SDESinf.GetCNAME(&curlen);
|
oldcname = SDESinf.GetCNAME(&curlen);
|
||||||
@ -206,7 +206,7 @@ int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size
|
|||||||
break;
|
break;
|
||||||
case RTCP_SDES_ID_NAME:
|
case RTCP_SDES_ID_NAME:
|
||||||
{
|
{
|
||||||
u_int8_t *oldname;
|
uint8_t *oldname;
|
||||||
size_t oldlen;
|
size_t oldlen;
|
||||||
|
|
||||||
oldname = SDESinf.GetName(&oldlen);
|
oldname = SDESinf.GetName(&oldlen);
|
||||||
@ -216,7 +216,7 @@ int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size
|
|||||||
break;
|
break;
|
||||||
case RTCP_SDES_ID_EMAIL:
|
case RTCP_SDES_ID_EMAIL:
|
||||||
{
|
{
|
||||||
u_int8_t *oldemail;
|
uint8_t *oldemail;
|
||||||
size_t oldlen;
|
size_t oldlen;
|
||||||
|
|
||||||
oldemail = SDESinf.GetEMail(&oldlen);
|
oldemail = SDESinf.GetEMail(&oldlen);
|
||||||
@ -230,7 +230,7 @@ int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size
|
|||||||
return SDESinf.SetLocation(data,itemlen);
|
return SDESinf.SetLocation(data,itemlen);
|
||||||
case RTCP_SDES_ID_TOOL:
|
case RTCP_SDES_ID_TOOL:
|
||||||
{
|
{
|
||||||
u_int8_t *oldtool;
|
uint8_t *oldtool;
|
||||||
size_t oldlen;
|
size_t oldlen;
|
||||||
|
|
||||||
oldtool = SDESinf.GetTool(&oldlen);
|
oldtool = SDESinf.GetTool(&oldlen);
|
||||||
@ -247,7 +247,7 @@ int RTPInternalSourceData::ProcessSDESItem(u_int8_t id,const u_int8_t *data,size
|
|||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
int RTPInternalSourceData::ProcessPrivateSDESItem(const u_int8_t *prefix,size_t prefixlen,const u_int8_t *value,size_t valuelen,const RTPTime &receivetime)
|
int RTPInternalSourceData::ProcessPrivateSDESItem(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen,const RTPTime &receivetime)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ int RTPInternalSourceData::ProcessPrivateSDESItem(const u_int8_t *prefix,size_t
|
|||||||
|
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
int RTPInternalSourceData::ProcessBYEPacket(const u_int8_t *reason,size_t reasonlen,const RTPTime &receivetime)
|
int RTPInternalSourceData::ProcessBYEPacket(const uint8_t *reason,size_t reasonlen,const RTPTime &receivetime)
|
||||||
{
|
{
|
||||||
if (byereason)
|
if (byereason)
|
||||||
{
|
{
|
||||||
@ -270,7 +270,7 @@ int RTPInternalSourceData::ProcessBYEPacket(const u_int8_t *reason,size_t reason
|
|||||||
}
|
}
|
||||||
|
|
||||||
byetime = receivetime;
|
byetime = receivetime;
|
||||||
byereason = new u_int8_t[reasonlen];
|
byereason = new uint8_t[reasonlen];
|
||||||
if (byereason == 0)
|
if (byereason == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
memcpy(byereason,reason,reasonlen);
|
memcpy(byereason,reason,reasonlen);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -43,21 +43,21 @@
|
|||||||
class RTPInternalSourceData : public RTPSourceData
|
class RTPInternalSourceData : public RTPSourceData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPInternalSourceData(u_int32_t ssrc, RTPSources::ProbationType probtype);
|
RTPInternalSourceData(uint32_t ssrc, RTPSources::ProbationType probtype);
|
||||||
~RTPInternalSourceData();
|
~RTPInternalSourceData();
|
||||||
|
|
||||||
int ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,bool *stored);
|
int ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,bool *stored);
|
||||||
void ProcessSenderInfo(const RTPNTPTime &ntptime,u_int32_t rtptime,u_int32_t packetcount,
|
void ProcessSenderInfo(const RTPNTPTime &ntptime,uint32_t rtptime,uint32_t packetcount,
|
||||||
u_int32_t octetcount,const RTPTime &receivetime) { SRprevinf = SRinf; SRinf.Set(ntptime,rtptime,packetcount,octetcount,receivetime); stats.SetLastMessageTime(receivetime); }
|
uint32_t octetcount,const RTPTime &receivetime) { SRprevinf = SRinf; SRinf.Set(ntptime,rtptime,packetcount,octetcount,receivetime); stats.SetLastMessageTime(receivetime); }
|
||||||
void ProcessReportBlock(u_int8_t fractionlost,int32_t lostpackets,u_int32_t exthighseqnr,
|
void ProcessReportBlock(uint8_t fractionlost,int32_t lostpackets,uint32_t exthighseqnr,
|
||||||
u_int32_t jitter,u_int32_t lsr,u_int32_t dlsr,
|
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); }
|
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); }
|
void UpdateMessageTime(const RTPTime &receivetime) { stats.SetLastMessageTime(receivetime); }
|
||||||
int ProcessSDESItem(u_int8_t id,const u_int8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis);
|
int ProcessSDESItem(uint8_t id,const uint8_t *data,size_t itemlen,const RTPTime &receivetime,bool *cnamecollis);
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int ProcessPrivateSDESItem(const u_int8_t *prefix,size_t prefixlen,const u_int8_t *value,size_t valuelen,const RTPTime &receivetime);
|
int ProcessPrivateSDESItem(const uint8_t *prefix,size_t prefixlen,const uint8_t *value,size_t valuelen,const RTPTime &receivetime);
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
int ProcessBYEPacket(const u_int8_t *reason,size_t reasonlen,const RTPTime &receivetime);
|
int ProcessBYEPacket(const uint8_t *reason,size_t reasonlen,const RTPTime &receivetime);
|
||||||
|
|
||||||
int SetRTPDataAddress(const RTPAddress *a);
|
int SetRTPDataAddress(const RTPAddress *a);
|
||||||
int SetRTCPDataAddress(const RTPAddress *a);
|
int SetRTCPDataAddress(const RTPAddress *a);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -72,9 +72,9 @@ RTPAddress *RTPIPv4Address::CreateCopy() const
|
|||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
std::string RTPIPv4Address::GetAddressString() const
|
std::string RTPIPv4Address::GetAddressString() const
|
||||||
{
|
{
|
||||||
char str[1024];
|
char str[24];
|
||||||
|
|
||||||
sprintf(str,"%d.%d.%d.%d:%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),
|
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);
|
(int)(ip&0xFF),(int)port);
|
||||||
return std::string(str);
|
return std::string(str);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -41,14 +41,14 @@
|
|||||||
class RTPIPv4Address : public RTPAddress
|
class RTPIPv4Address : public RTPAddress
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPIPv4Address(u_int32_t ip = 0, u_int16_t port = 0):RTPAddress(IPv4Address) { RTPIPv4Address::ip = ip; RTPIPv4Address::port = port; }
|
RTPIPv4Address(uint32_t ip = 0, uint16_t port = 0):RTPAddress(IPv4Address) { RTPIPv4Address::ip = ip; RTPIPv4Address::port = port; }
|
||||||
RTPIPv4Address(const u_int8_t ip[4],u_int16_t port = 0):RTPAddress(IPv4Address) { RTPIPv4Address::ip = (u_int32_t)ip[3]; RTPIPv4Address::ip |= (((u_int32_t)ip[2])<<8); RTPIPv4Address::ip |= (((u_int32_t)ip[1])<<16); RTPIPv4Address::ip |= (((u_int32_t)ip[0])<<24); 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() { }
|
~RTPIPv4Address() { }
|
||||||
void SetIP(u_int32_t ip) { RTPIPv4Address::ip = ip; }
|
void SetIP(uint32_t ip) { RTPIPv4Address::ip = ip; }
|
||||||
void SetIP(const u_int8_t ip[4]) { RTPIPv4Address::ip = (u_int32_t)ip[3]; RTPIPv4Address::ip |= (((u_int32_t)ip[2])<<8); RTPIPv4Address::ip |= (((u_int32_t)ip[1])<<16); RTPIPv4Address::ip |= (((u_int32_t)ip[0])<<24); }
|
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(u_int16_t port) { RTPIPv4Address::port = port; }
|
void SetPort(uint16_t port) { RTPIPv4Address::port = port; }
|
||||||
u_int32_t GetIP() const { return ip; }
|
uint32_t GetIP() const { return ip; }
|
||||||
u_int16_t GetPort() const { return port; }
|
uint16_t GetPort() const { return port; }
|
||||||
RTPAddress *CreateCopy() const;
|
RTPAddress *CreateCopy() const;
|
||||||
bool IsSameAddress(const RTPAddress *addr) const;
|
bool IsSameAddress(const RTPAddress *addr) const;
|
||||||
bool IsFromSameHost(const RTPAddress *addr) const;
|
bool IsFromSameHost(const RTPAddress *addr) const;
|
||||||
@ -56,8 +56,8 @@ public:
|
|||||||
std::string GetAddressString() const;
|
std::string GetAddressString() const;
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
private:
|
private:
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
u_int16_t port;
|
uint16_t port;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RTPIPV4ADDRESS_H
|
#endif // RTPIPV4ADDRESS_H
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -30,9 +30,9 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RTPIPV4DESTINATION
|
#ifndef RTPIPV4DESTINATION_H
|
||||||
|
|
||||||
#define RTPIPV4DESTINATION
|
#define RTPIPV4DESTINATION_H
|
||||||
|
|
||||||
#include "rtpconfig.h"
|
#include "rtpconfig.h"
|
||||||
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
#if ! (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
@ -48,32 +48,32 @@ class RTPIPv4Destination
|
|||||||
public:
|
public:
|
||||||
// (nbo = network byte order, hbo = host byte order)
|
// (nbo = network byte order, hbo = host byte order)
|
||||||
|
|
||||||
RTPIPv4Destination(u_int32_t ip,u_int16_t rtpportbase) { ipaddr_hbo = ip; ipaddr_nbo = htonl(ip); rtpport_nbo = htons(rtpportbase); rtcpport_nbo = htons(rtpportbase+1); }
|
RTPIPv4Destination(uint32_t ip,uint16_t rtpportbase) { ipaddr_hbo = ip; ipaddr_nbo = htonl(ip); rtpport_nbo = htons(rtpportbase); rtcpport_nbo = htons(rtpportbase+1); }
|
||||||
u_int32_t GetIP_HBO() const { return ipaddr_hbo; }
|
uint32_t GetIP_HBO() const { return ipaddr_hbo; }
|
||||||
u_int32_t GetIP_NBO() const { return ipaddr_nbo; }
|
uint32_t GetIP_NBO() const { return ipaddr_nbo; }
|
||||||
u_int16_t GetRTPPort_NBO() const { return rtpport_nbo; }
|
uint16_t GetRTPPort_NBO() const { return rtpport_nbo; }
|
||||||
u_int16_t GetRTCPPort_NBO() const { return rtcpport_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
|
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
|
#ifdef RTPDEBUG
|
||||||
std::string GetDestinationString() const;
|
std::string GetDestinationString() const;
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
private:
|
private:
|
||||||
u_int32_t ipaddr_hbo;
|
uint32_t ipaddr_hbo;
|
||||||
u_int32_t ipaddr_nbo;
|
uint32_t ipaddr_nbo;
|
||||||
u_int16_t rtpport_nbo;
|
uint16_t rtpport_nbo;
|
||||||
u_int16_t rtcpport_nbo;
|
uint16_t rtcpport_nbo;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
inline std::string RTPIPv4Destination::GetDestinationString() const
|
inline std::string RTPIPv4Destination::GetDestinationString() const
|
||||||
{
|
{
|
||||||
char str[1024];
|
char str[24];
|
||||||
u_int32_t ip = ipaddr_hbo;
|
uint32_t ip = ipaddr_hbo;
|
||||||
u_int16_t portbase = ntohs(rtpport_nbo);
|
uint16_t portbase = ntohs(rtpport_nbo);
|
||||||
|
|
||||||
sprintf(str,"%d.%d.%d.%d:%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF),(int)(portbase));
|
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);
|
return std::string(str);
|
||||||
}
|
}
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
|
|
||||||
#endif // RTPIPV4DESTINATION
|
#endif // RTPIPV4DESTINATION_H
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ bool RTPIPv6Address::IsSameAddress(const RTPAddress *addr) const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
||||||
const u_int8_t *ip2 = addr2->ip.s6_addr;
|
const uint8_t *ip2 = addr2->ip.s6_addr;
|
||||||
|
|
||||||
if (port != addr2->port)
|
if (port != addr2->port)
|
||||||
return false;
|
return false;
|
||||||
@ -75,7 +75,7 @@ bool RTPIPv6Address::IsFromSameHost(const RTPAddress *addr) const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
const RTPIPv6Address *addr2 = (const RTPIPv6Address *)addr;
|
||||||
const u_int8_t *ip2 = addr2->ip.s6_addr;
|
const uint8_t *ip2 = addr2->ip.s6_addr;
|
||||||
for (int i = 0 ; i < 16 ; i++)
|
for (int i = 0 ; i < 16 ; i++)
|
||||||
{
|
{
|
||||||
if (ip.s6_addr[i] != ip2[i])
|
if (ip.s6_addr[i] != ip2[i])
|
||||||
@ -87,17 +87,17 @@ bool RTPIPv6Address::IsFromSameHost(const RTPAddress *addr) const
|
|||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
std::string RTPIPv6Address::GetAddressString() const
|
std::string RTPIPv6Address::GetAddressString() const
|
||||||
{
|
{
|
||||||
char str[256];
|
char str[48];
|
||||||
u_int16_t ip16[8];
|
uint16_t ip16[8];
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
|
for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
|
||||||
{
|
{
|
||||||
ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8);
|
ip16[j] = (((uint16_t)ip.s6_addr[i])<<8);
|
||||||
ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]);
|
ip16[j] |= ((uint16_t)ip.s6_addr[i+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(str,"%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);
|
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);
|
return std::string(str);
|
||||||
}
|
}
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -48,15 +48,15 @@ class RTPIPv6Address : public RTPAddress
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPIPv6Address():RTPAddress(IPv6Address) { for (int i = 0 ; i < 16 ; i++) ip.s6_addr[i] = 0; port = 0; }
|
RTPIPv6Address():RTPAddress(IPv6Address) { for (int i = 0 ; i < 16 ; i++) ip.s6_addr[i] = 0; port = 0; }
|
||||||
RTPIPv6Address(const u_int8_t ip[16],u_int16_t port = 0):RTPAddress(IPv6Address) { SetIP(ip); RTPIPv6Address::port = port; }
|
RTPIPv6Address(const uint8_t ip[16],uint16_t port = 0):RTPAddress(IPv6Address) { SetIP(ip); RTPIPv6Address::port = port; }
|
||||||
RTPIPv6Address(in6_addr ip,u_int16_t port = 0):RTPAddress(IPv6Address) { RTPIPv6Address::ip = ip; RTPIPv6Address::port = port; }
|
RTPIPv6Address(in6_addr ip,uint16_t port = 0):RTPAddress(IPv6Address) { RTPIPv6Address::ip = ip; RTPIPv6Address::port = port; }
|
||||||
~RTPIPv6Address() { }
|
~RTPIPv6Address() { }
|
||||||
void SetIP(in6_addr ip) { RTPIPv6Address::ip = ip; }
|
void SetIP(in6_addr ip) { RTPIPv6Address::ip = ip; }
|
||||||
void SetIP(const u_int8_t ip[16]) { for (int i = 0 ; i < 16 ; i++) RTPIPv6Address::ip.s6_addr[i] = ip[i]; }
|
void SetIP(const uint8_t ip[16]) { for (int i = 0 ; i < 16 ; i++) RTPIPv6Address::ip.s6_addr[i] = ip[i]; }
|
||||||
void SetPort(u_int16_t port) { RTPIPv6Address::port = port; }
|
void SetPort(uint16_t port) { RTPIPv6Address::port = port; }
|
||||||
void GetIP(u_int8_t ip[16]) const { for (int i = 0 ; i < 16 ; i++) ip[i] = RTPIPv6Address::ip.s6_addr[i]; }
|
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; }
|
in6_addr GetIP() const { return ip; }
|
||||||
u_int16_t GetPort() const { return port; }
|
uint16_t GetPort() const { return port; }
|
||||||
|
|
||||||
RTPAddress *CreateCopy() const;
|
RTPAddress *CreateCopy() const;
|
||||||
bool IsSameAddress(const RTPAddress *addr) const;
|
bool IsSameAddress(const RTPAddress *addr) const;
|
||||||
@ -66,7 +66,7 @@ public:
|
|||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
private:
|
private:
|
||||||
in6_addr ip;
|
in6_addr ip;
|
||||||
u_int16_t port;
|
uint16_t port;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RTP_SUPPORT_IPV6
|
#endif // RTP_SUPPORT_IPV6
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -30,9 +30,9 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef RTPIPV6DESTINATION
|
#ifndef RTPIPV6DESTINATION_H
|
||||||
|
|
||||||
#define RTPIPV6DESTINATION
|
#define RTPIPV6DESTINATION_H
|
||||||
|
|
||||||
#include "rtpconfig.h"
|
#include "rtpconfig.h"
|
||||||
|
|
||||||
@ -51,33 +51,33 @@
|
|||||||
class RTPIPv6Destination
|
class RTPIPv6Destination
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPIPv6Destination(in6_addr ip,u_int16_t portbase) { RTPIPv6Destination::ip = ip; rtpport_nbo = htons(portbase); rtcpport_nbo = htons(portbase+1); }
|
RTPIPv6Destination(in6_addr ip,uint16_t portbase) { RTPIPv6Destination::ip = ip; rtpport_nbo = htons(portbase); rtcpport_nbo = htons(portbase+1); }
|
||||||
in6_addr GetIP() const { return ip; }
|
in6_addr GetIP() const { return ip; }
|
||||||
u_int16_t GetRTPPort_NBO() const { return rtpport_nbo; }
|
uint16_t GetRTPPort_NBO() const { return rtpport_nbo; }
|
||||||
u_int16_t GetRTCPPort_NBO() const { return rtcpport_nbo; }
|
uint16_t GetRTCPPort_NBO() const { return rtcpport_nbo; }
|
||||||
bool operator==(const RTPIPv6Destination &src) const { if (src.rtpport_nbo == rtpport_nbo && (memcmp(&(src.ip),&ip,sizeof(in6_addr)) == 0)) return true; return false; } // NOTE: I only check IP and portbase
|
bool operator==(const RTPIPv6Destination &src) const { if (src.rtpport_nbo == rtpport_nbo && (memcmp(&(src.ip),&ip,sizeof(in6_addr)) == 0)) return true; return false; } // NOTE: I only check IP and portbase
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
std::string GetDestinationString() const;
|
std::string GetDestinationString() const;
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
private:
|
private:
|
||||||
in6_addr ip;
|
in6_addr ip;
|
||||||
u_int16_t rtpport_nbo,rtcpport_nbo;
|
uint16_t rtpport_nbo,rtcpport_nbo;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
inline std::string RTPIPv6Destination::GetDestinationString() const
|
inline std::string RTPIPv6Destination::GetDestinationString() const
|
||||||
{
|
{
|
||||||
u_int16_t ip16[8];
|
uint16_t ip16[8];
|
||||||
char str[1024];
|
char str[48];
|
||||||
u_int16_t portbase = ntohs(rtpport_nbo);
|
uint16_t portbase = ntohs(rtpport_nbo);
|
||||||
int i,j;
|
int i,j;
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2) { ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8); ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]); }
|
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]); }
|
||||||
sprintf(str,"%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)portbase);
|
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)portbase);
|
||||||
return std::string(str);
|
return std::string(str);
|
||||||
}
|
}
|
||||||
#endif // RTPDEBUG
|
#endif // RTPDEBUG
|
||||||
|
|
||||||
#endif // RTP_SUPPORT_IPV6
|
#endif // RTP_SUPPORT_IPV6
|
||||||
|
|
||||||
#endif // RTPIPV6DESTINATION
|
#endif // RTPIPV6DESTINATION_H
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ inline int RTPKeyHashTable<Key,Element,GetIndex,hashsize>::DeleteCurrentElement(
|
|||||||
{
|
{
|
||||||
tmp1->hashnext = tmp2;
|
tmp1->hashnext = tmp2;
|
||||||
if (tmp2 != 0)
|
if (tmp2 != 0)
|
||||||
tmp2->hashprev = 0;
|
tmp2->hashprev = tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relink elements in list
|
// Relink elements in list
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -34,6 +34,6 @@
|
|||||||
|
|
||||||
RTPLibraryVersion RTPLibraryVersion::GetVersion()
|
RTPLibraryVersion RTPLibraryVersion::GetVersion()
|
||||||
{
|
{
|
||||||
return RTPLibraryVersion(3,3,0);
|
return RTPLibraryVersion(3,4,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -55,9 +55,12 @@ private:
|
|||||||
inline std::string RTPLibraryVersion::GetVersionString() const
|
inline std::string RTPLibraryVersion::GetVersionString() const
|
||||||
{
|
{
|
||||||
char str[16];
|
char str[16];
|
||||||
|
|
||||||
sprintf(str,"%d.%d.%d",majornr,minornr,debugnr);
|
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
_snprintf(str,16,"%d.%d.%d",majornr,minornr,debugnr);
|
||||||
|
#else
|
||||||
|
snprintf(str,16,"%d.%d.%d",majornr,minornr,debugnr);
|
||||||
|
#endif // WIN32 || _WIN32_WCE
|
||||||
return std::string(str);
|
return std::string(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -71,9 +71,9 @@ RTPPacket::RTPPacket(RTPRawPacket &rawpack) : receivetime(rawpack.GetReceiveTime
|
|||||||
error = ParseRawPacket(rawpack);
|
error = ParseRawPacket(rawpack);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPPacket::RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
RTPPacket::RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
size_t maxpacksize /* = 0 */ ) : receivetime(0,0)
|
size_t maxpacksize /* = 0 */ ) : receivetime(0,0)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
@ -81,9 +81,9 @@ RTPPacket::RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payload
|
|||||||
csrcs,gotextension,extensionid,extensionlen_numwords,extensiondata,0,maxpacksize);
|
csrcs,gotextension,extensionid,extensionlen_numwords,extensiondata,0,maxpacksize);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPPacket::RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
RTPPacket::RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
void *buffer,size_t buffersize) : receivetime(0,0)
|
void *buffer,size_t buffersize) : receivetime(0,0)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
@ -98,9 +98,9 @@ RTPPacket::RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payload
|
|||||||
|
|
||||||
int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
||||||
{
|
{
|
||||||
u_int8_t *packetbytes;
|
uint8_t *packetbytes;
|
||||||
size_t packetlen;
|
size_t packetlen;
|
||||||
u_int8_t payloadtype;
|
uint8_t payloadtype;
|
||||||
RTPHeader *rtpheader;
|
RTPHeader *rtpheader;
|
||||||
bool marker;
|
bool marker;
|
||||||
int csrccount;
|
int csrccount;
|
||||||
@ -108,12 +108,12 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
int payloadoffset,payloadlength;
|
int payloadoffset,payloadlength;
|
||||||
int numpadbytes;
|
int numpadbytes;
|
||||||
RTPExtensionHeader *rtpextheader;
|
RTPExtensionHeader *rtpextheader;
|
||||||
u_int16_t exthdrlen;
|
uint16_t exthdrlen;
|
||||||
|
|
||||||
if (!rawpack.IsRTP()) // If we didn't receive it on the RTP port, we'll ignore it
|
if (!rawpack.IsRTP()) // If we didn't receive it on the RTP port, we'll ignore it
|
||||||
return ERR_RTP_PACKET_INVALIDPACKET;
|
return ERR_RTP_PACKET_INVALIDPACKET;
|
||||||
|
|
||||||
packetbytes = (u_int8_t *)rawpack.GetData();
|
packetbytes = (uint8_t *)rawpack.GetData();
|
||||||
rtpheader = (RTPHeader *)packetbytes;
|
rtpheader = (RTPHeader *)packetbytes;
|
||||||
|
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
}
|
}
|
||||||
|
|
||||||
csrccount = rtpheader->csrccount;
|
csrccount = rtpheader->csrccount;
|
||||||
payloadoffset = sizeof(RTPHeader)+(int)(csrccount*sizeof(u_int32_t));
|
payloadoffset = sizeof(RTPHeader)+(int)(csrccount*sizeof(uint32_t));
|
||||||
|
|
||||||
if (rtpheader->padding) // adjust payload length to take padding into account
|
if (rtpheader->padding) // adjust payload length to take padding into account
|
||||||
{
|
{
|
||||||
@ -157,7 +157,7 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
rtpextheader = (RTPExtensionHeader *)(packetbytes+payloadoffset);
|
rtpextheader = (RTPExtensionHeader *)(packetbytes+payloadoffset);
|
||||||
payloadoffset += sizeof(RTPExtensionHeader);
|
payloadoffset += sizeof(RTPExtensionHeader);
|
||||||
exthdrlen = ntohs(rtpextheader->length);
|
exthdrlen = ntohs(rtpextheader->length);
|
||||||
payloadoffset += ((int)exthdrlen)*sizeof(u_int32_t);
|
payloadoffset += ((int)exthdrlen)*sizeof(uint32_t);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -176,8 +176,8 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
if (hasextension)
|
if (hasextension)
|
||||||
{
|
{
|
||||||
RTPPacket::extid = ntohs(rtpextheader->id);
|
RTPPacket::extid = ntohs(rtpextheader->id);
|
||||||
RTPPacket::extensionlength = ((int)ntohs(rtpextheader->length))*sizeof(u_int32_t);
|
RTPPacket::extensionlength = ((int)ntohs(rtpextheader->length))*sizeof(uint32_t);
|
||||||
RTPPacket::extension = ((u_int8_t *)rtpextheader)+sizeof(RTPExtensionHeader);
|
RTPPacket::extension = ((uint8_t *)rtpextheader)+sizeof(RTPExtensionHeader);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPPacket::hasmarker = marker;
|
RTPPacket::hasmarker = marker;
|
||||||
@ -187,7 +187,7 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
// Note: we don't fill in the EXTENDED sequence number here, since we
|
// Note: we don't fill in the EXTENDED sequence number here, since we
|
||||||
// don't have information about the source here. We just fill in the low
|
// don't have information about the source here. We just fill in the low
|
||||||
// 16 bits
|
// 16 bits
|
||||||
RTPPacket::extseqnr = (u_int32_t)ntohs(rtpheader->sequencenumber);
|
RTPPacket::extseqnr = (uint32_t)ntohs(rtpheader->sequencenumber);
|
||||||
|
|
||||||
RTPPacket::timestamp = ntohl(rtpheader->timestamp);
|
RTPPacket::timestamp = ntohl(rtpheader->timestamp);
|
||||||
RTPPacket::ssrc = ntohl(rtpheader->ssrc);
|
RTPPacket::ssrc = ntohl(rtpheader->ssrc);
|
||||||
@ -202,24 +202,24 @@ int RTPPacket::ParseRawPacket(RTPRawPacket &rawpack)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPPacket::GetCSRC(int num) const
|
uint32_t RTPPacket::GetCSRC(int num) const
|
||||||
{
|
{
|
||||||
if (num >= numcsrcs)
|
if (num >= numcsrcs)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u_int8_t *csrcpos;
|
uint8_t *csrcpos;
|
||||||
u_int32_t *csrcval_nbo;
|
uint32_t *csrcval_nbo;
|
||||||
u_int32_t csrcval_hbo;
|
uint32_t csrcval_hbo;
|
||||||
|
|
||||||
csrcpos = packet+sizeof(RTPHeader)+num*sizeof(u_int32_t);
|
csrcpos = packet+sizeof(RTPHeader)+num*sizeof(uint32_t);
|
||||||
csrcval_nbo = (u_int32_t *)csrcpos;
|
csrcval_nbo = (uint32_t *)csrcpos;
|
||||||
csrcval_hbo = ntohl(*csrcval_nbo);
|
csrcval_hbo = ntohl(*csrcval_nbo);
|
||||||
return csrcval_hbo;
|
return csrcval_hbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
int RTPPacket::BuildPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
void *buffer,size_t maxsize)
|
void *buffer,size_t maxsize)
|
||||||
{
|
{
|
||||||
if (numcsrcs > RTP_MAXCSRCS)
|
if (numcsrcs > RTP_MAXCSRCS)
|
||||||
@ -231,11 +231,11 @@ int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t p
|
|||||||
return ERR_RTP_PACKET_BADPAYLOADTYPE;
|
return ERR_RTP_PACKET_BADPAYLOADTYPE;
|
||||||
|
|
||||||
packetlength = sizeof(RTPHeader);
|
packetlength = sizeof(RTPHeader);
|
||||||
packetlength += sizeof(u_int32_t)*((size_t)numcsrcs);
|
packetlength += sizeof(uint32_t)*((size_t)numcsrcs);
|
||||||
if (gotextension)
|
if (gotextension)
|
||||||
{
|
{
|
||||||
packetlength += sizeof(RTPExtensionHeader);
|
packetlength += sizeof(RTPExtensionHeader);
|
||||||
packetlength += sizeof(u_int32_t)*((size_t)extensionlen_numwords);
|
packetlength += sizeof(uint32_t)*((size_t)extensionlen_numwords);
|
||||||
}
|
}
|
||||||
packetlength += payloadlen;
|
packetlength += payloadlen;
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t p
|
|||||||
|
|
||||||
if (buffer == 0)
|
if (buffer == 0)
|
||||||
{
|
{
|
||||||
packet = new u_int8_t [packetlength];
|
packet = new uint8_t [packetlength];
|
||||||
if (packet == 0)
|
if (packet == 0)
|
||||||
{
|
{
|
||||||
packetlength = 0;
|
packetlength = 0;
|
||||||
@ -261,7 +261,7 @@ int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t p
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
packet = (u_int8_t *)buffer;
|
packet = (uint8_t *)buffer;
|
||||||
externalbuffer = true;
|
externalbuffer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,12 +269,12 @@ int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t p
|
|||||||
RTPPacket::hasextension = gotextension;
|
RTPPacket::hasextension = gotextension;
|
||||||
RTPPacket::numcsrcs = numcsrcs;
|
RTPPacket::numcsrcs = numcsrcs;
|
||||||
RTPPacket::payloadtype = payloadtype;
|
RTPPacket::payloadtype = payloadtype;
|
||||||
RTPPacket::extseqnr = (u_int32_t)seqnr;
|
RTPPacket::extseqnr = (uint32_t)seqnr;
|
||||||
RTPPacket::timestamp = timestamp;
|
RTPPacket::timestamp = timestamp;
|
||||||
RTPPacket::ssrc = ssrc;
|
RTPPacket::ssrc = ssrc;
|
||||||
RTPPacket::payloadlength = payloadlen;
|
RTPPacket::payloadlength = payloadlen;
|
||||||
RTPPacket::extid = extensionid;
|
RTPPacket::extid = extensionid;
|
||||||
RTPPacket::extensionlength = ((size_t)extensionlen_numwords)*sizeof(u_int32_t);
|
RTPPacket::extensionlength = ((size_t)extensionlen_numwords)*sizeof(uint32_t);
|
||||||
|
|
||||||
rtphdr = (RTPHeader *)packet;
|
rtphdr = (RTPHeader *)packet;
|
||||||
rtphdr->version = RTP_VERSION;
|
rtphdr->version = RTP_VERSION;
|
||||||
@ -293,20 +293,20 @@ int RTPPacket::BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t p
|
|||||||
rtphdr->timestamp = htonl(timestamp);
|
rtphdr->timestamp = htonl(timestamp);
|
||||||
rtphdr->ssrc = htonl(ssrc);
|
rtphdr->ssrc = htonl(ssrc);
|
||||||
|
|
||||||
u_int32_t *curcsrc;
|
uint32_t *curcsrc;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
curcsrc = (u_int32_t *)(packet+sizeof(RTPHeader));
|
curcsrc = (uint32_t *)(packet+sizeof(RTPHeader));
|
||||||
for (i = 0 ; i < numcsrcs ; i++,curcsrc++)
|
for (i = 0 ; i < numcsrcs ; i++,curcsrc++)
|
||||||
*curcsrc = htonl(csrcs[i]);
|
*curcsrc = htonl(csrcs[i]);
|
||||||
|
|
||||||
payload = packet+sizeof(RTPHeader)+((size_t)numcsrcs)*sizeof(u_int32_t);
|
payload = packet+sizeof(RTPHeader)+((size_t)numcsrcs)*sizeof(uint32_t);
|
||||||
if (gotextension)
|
if (gotextension)
|
||||||
{
|
{
|
||||||
RTPExtensionHeader *rtpexthdr = (RTPExtensionHeader *)payload;
|
RTPExtensionHeader *rtpexthdr = (RTPExtensionHeader *)payload;
|
||||||
|
|
||||||
rtpexthdr->id = htons(extensionid);
|
rtpexthdr->id = htons(extensionid);
|
||||||
rtpexthdr->length = htons((u_int16_t)extensionlen_numwords);
|
rtpexthdr->length = htons((uint16_t)extensionlen_numwords);
|
||||||
|
|
||||||
payload += sizeof(RTPExtensionHeader);
|
payload += sizeof(RTPExtensionHeader);
|
||||||
memcpy(payload,extensiondata,RTPPacket::extensionlength);
|
memcpy(payload,extensiondata,RTPPacket::extensionlength);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -47,14 +47,14 @@ public:
|
|||||||
RTPPacket(RTPRawPacket &rawpack);
|
RTPPacket(RTPRawPacket &rawpack);
|
||||||
|
|
||||||
// if maxpacksize == 0, it is ignored
|
// if maxpacksize == 0, it is ignored
|
||||||
RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
size_t maxpacksize = 0);
|
size_t maxpacksize = 0);
|
||||||
// pretty much the same function, except that here the data is placed in an external buffer
|
// pretty much the same function, except that here the data is placed in an external buffer
|
||||||
RTPPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
void *buffer,size_t buffersize);
|
void *buffer,size_t buffersize);
|
||||||
|
|
||||||
virtual ~RTPPacket() { if (packet && !externalbuffer) delete [] packet; }
|
virtual ~RTPPacket() { if (packet && !externalbuffer) delete [] packet; }
|
||||||
@ -64,27 +64,27 @@ public:
|
|||||||
bool HasMarker() const { return hasmarker; }
|
bool HasMarker() const { return hasmarker; }
|
||||||
|
|
||||||
int GetCSRCCount() const { return numcsrcs; }
|
int GetCSRCCount() const { return numcsrcs; }
|
||||||
u_int32_t GetCSRC(int num) const;
|
uint32_t GetCSRC(int num) const;
|
||||||
|
|
||||||
u_int8_t GetPayloadType() const { return payloadtype; }
|
uint8_t GetPayloadType() const { return payloadtype; }
|
||||||
|
|
||||||
// On reception, this is actually a 16 bit value. The high 16 bits
|
// On reception, this is actually a 16 bit value. The high 16 bits
|
||||||
// are filled in when the packet is processed in the source
|
// are filled in when the packet is processed in the source
|
||||||
// table
|
// table
|
||||||
u_int32_t GetExtendedSequenceNumber() const { return extseqnr; }
|
uint32_t GetExtendedSequenceNumber() const { return extseqnr; }
|
||||||
u_int16_t GetSequenceNumber() const { return (u_int16_t)(extseqnr&0x0000FFFF); }
|
uint16_t GetSequenceNumber() const { return (uint16_t)(extseqnr&0x0000FFFF); }
|
||||||
void SetExtendedSequenceNumber(u_int32_t seq) { extseqnr = seq; }
|
void SetExtendedSequenceNumber(uint32_t seq) { extseqnr = seq; }
|
||||||
|
|
||||||
u_int32_t GetTimestamp() const { return timestamp; }
|
uint32_t GetTimestamp() const { return timestamp; }
|
||||||
u_int32_t GetSSRC() const { return ssrc; }
|
uint32_t GetSSRC() const { return ssrc; }
|
||||||
|
|
||||||
u_int8_t *GetPacketData() const { return packet; }
|
uint8_t *GetPacketData() const { return packet; }
|
||||||
u_int8_t *GetPayloadData() const { return payload; }
|
uint8_t *GetPayloadData() const { return payload; }
|
||||||
size_t GetPacketLength() const { return packetlength; }
|
size_t GetPacketLength() const { return packetlength; }
|
||||||
size_t GetPayloadLength() const { return payloadlength; }
|
size_t GetPayloadLength() const { return payloadlength; }
|
||||||
|
|
||||||
u_int16_t GetExtensionID() const { return extid; }
|
uint16_t GetExtensionID() const { return extid; }
|
||||||
u_int8_t *GetExtensionData() const { return extension; }
|
uint8_t *GetExtensionData() const { return extension; }
|
||||||
size_t GetExtensionLength() const { return extensionlength; }
|
size_t GetExtensionLength() const { return extensionlength; }
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
void Dump();
|
void Dump();
|
||||||
@ -96,9 +96,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
void Clear();
|
void Clear();
|
||||||
int ParseRawPacket(RTPRawPacket &rawpack);
|
int ParseRawPacket(RTPRawPacket &rawpack);
|
||||||
int BuildPacket(u_int8_t payloadtype,const void *payloaddata,size_t payloadlen,u_int16_t seqnr,
|
int BuildPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
|
||||||
u_int32_t timestamp,u_int32_t ssrc,bool gotmarker,u_int8_t numcsrcs,const u_int32_t *csrcs,
|
uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
|
||||||
bool gotextension,u_int16_t extensionid,u_int16_t extensionlen_numwords,const void *extensiondata,
|
bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
|
||||||
void *buffer,size_t maxsize);
|
void *buffer,size_t maxsize);
|
||||||
|
|
||||||
int error;
|
int error;
|
||||||
@ -106,13 +106,13 @@ private:
|
|||||||
bool hasextension,hasmarker;
|
bool hasextension,hasmarker;
|
||||||
int numcsrcs;
|
int numcsrcs;
|
||||||
|
|
||||||
u_int8_t payloadtype;
|
uint8_t payloadtype;
|
||||||
u_int32_t extseqnr,timestamp,ssrc;
|
uint32_t extseqnr,timestamp,ssrc;
|
||||||
u_int8_t *packet,*payload;
|
uint8_t *packet,*payload;
|
||||||
size_t packetlength,payloadlength;
|
size_t packetlength,payloadlength;
|
||||||
|
|
||||||
u_int16_t extid;
|
uint16_t extid;
|
||||||
u_int8_t *extension;
|
uint8_t *extension;
|
||||||
size_t extensionlength;
|
size_t extensionlength;
|
||||||
|
|
||||||
bool externalbuffer;
|
bool externalbuffer;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ int RTPPacketBuilder::Init(size_t max)
|
|||||||
return ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE;
|
return ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE;
|
||||||
|
|
||||||
maxpacksize = max;
|
maxpacksize = max;
|
||||||
buffer = new u_int8_t [max];
|
buffer = new uint8_t [max];
|
||||||
if (buffer == 0)
|
if (buffer == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
packetlength = 0;
|
packetlength = 0;
|
||||||
@ -90,11 +90,11 @@ void RTPPacketBuilder::Destroy()
|
|||||||
|
|
||||||
int RTPPacketBuilder::SetMaximumPacketSize(size_t max)
|
int RTPPacketBuilder::SetMaximumPacketSize(size_t max)
|
||||||
{
|
{
|
||||||
u_int8_t *newbuf;
|
uint8_t *newbuf;
|
||||||
|
|
||||||
if (max <= 0)
|
if (max <= 0)
|
||||||
return ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE;
|
return ERR_RTP_PACKBUILD_INVALIDMAXPACKETSIZE;
|
||||||
newbuf = new u_int8_t[max];
|
newbuf = new uint8_t[max];
|
||||||
if (newbuf == 0)
|
if (newbuf == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ int RTPPacketBuilder::SetMaximumPacketSize(size_t max)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::AddCSRC(u_int32_t csrc)
|
int RTPPacketBuilder::AddCSRC(uint32_t csrc)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -123,7 +123,7 @@ int RTPPacketBuilder::AddCSRC(u_int32_t csrc)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::DeleteCSRC(u_int32_t csrc)
|
int RTPPacketBuilder::DeleteCSRC(uint32_t csrc)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -156,7 +156,7 @@ void RTPPacketBuilder::ClearCSRCList()
|
|||||||
numcsrcs = 0;
|
numcsrcs = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPPacketBuilder::CreateNewSSRC()
|
uint32_t RTPPacketBuilder::CreateNewSSRC()
|
||||||
{
|
{
|
||||||
ssrc = rtprnd.GetRandom32();
|
ssrc = rtprnd.GetRandom32();
|
||||||
timestamp = rtprnd.GetRandom32();
|
timestamp = rtprnd.GetRandom32();
|
||||||
@ -168,7 +168,7 @@ u_int32_t RTPPacketBuilder::CreateNewSSRC()
|
|||||||
return ssrc;
|
return ssrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPPacketBuilder::CreateNewSSRC(RTPSources &sources)
|
uint32_t RTPPacketBuilder::CreateNewSSRC(RTPSources &sources)
|
||||||
{
|
{
|
||||||
bool found;
|
bool found;
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ int RTPPacketBuilder::BuildPacket(const void *data,size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc)
|
uint8_t pt,bool mark,uint32_t timestampinc)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -209,7 +209,7 @@ int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq)
|
uint8_t pt,bool mark,uint32_t timestampinc, uint32_t mseq)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -217,7 +217,7 @@ int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -231,8 +231,8 @@ int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,
|
uint8_t pt,bool mark,uint32_t timestampinc,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -241,11 +241,11 @@ int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPPacketBuilder::PrivateBuildPacket(const void *data,size_t len,
|
int RTPPacketBuilder::PrivateBuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,bool gotextension,
|
uint8_t pt,bool mark,uint32_t timestampinc,bool gotextension,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords, u_int32_t mseq)
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords, uint32_t mseq)
|
||||||
{
|
{
|
||||||
RTPPacket p(pt,data,len, mseq ? mseq : seqnr,timestamp,ssrc,mark,numcsrcs,csrcs,gotextension,hdrextID,
|
RTPPacket p(pt,data,len, mseq ? mseq : seqnr,timestamp,ssrc,mark,numcsrcs,csrcs,gotextension,hdrextID,
|
||||||
(u_int16_t)numhdrextwords,hdrextdata,buffer,maxpacksize);
|
(uint16_t)numhdrextwords,hdrextdata,buffer,maxpacksize);
|
||||||
int status = p.GetCreationError();
|
int status = p.GetCreationError();
|
||||||
|
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
@ -265,7 +265,7 @@ int RTPPacketBuilder::PrivateBuildPacket(const void *data,size_t len,
|
|||||||
prevrtptimestamp = timestamp;
|
prevrtptimestamp = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
numpayloadbytes += (u_int32_t)p.GetPayloadLength();
|
numpayloadbytes += (uint32_t)p.GetPayloadLength();
|
||||||
numpackets++;
|
numpackets++;
|
||||||
timestamp += timestampinc;
|
timestamp += timestampinc;
|
||||||
if (!mseq) {
|
if (!mseq) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -50,75 +50,75 @@ public:
|
|||||||
~RTPPacketBuilder();
|
~RTPPacketBuilder();
|
||||||
int Init(size_t maxpacksize);
|
int Init(size_t maxpacksize);
|
||||||
void Destroy();
|
void Destroy();
|
||||||
u_int32_t GetPacketCount() { if (!init) return 0; return numpackets; }
|
uint32_t GetPacketCount() { if (!init) return 0; return numpackets; }
|
||||||
u_int32_t GetPayloadOctetCount() { if (!init) return 0; return numpayloadbytes; }
|
uint32_t GetPayloadOctetCount() { if (!init) return 0; return numpayloadbytes; }
|
||||||
int SetMaximumPacketSize(size_t maxpacksize);
|
int SetMaximumPacketSize(size_t maxpacksize);
|
||||||
|
|
||||||
int AddCSRC(u_int32_t csrc);
|
int AddCSRC(uint32_t csrc);
|
||||||
int DeleteCSRC(u_int32_t csrc);
|
int DeleteCSRC(uint32_t csrc);
|
||||||
void ClearCSRCList();
|
void ClearCSRCList();
|
||||||
|
|
||||||
int BuildPacket(const void *data,size_t len);
|
int BuildPacket(const void *data,size_t len);
|
||||||
int BuildPacket(const void *data,size_t len,
|
int BuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc);
|
uint8_t pt,bool mark,uint32_t timestampinc);
|
||||||
int BuildPacket(const void *data,size_t len,
|
int BuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq);
|
uint8_t pt,bool mark,uint32_t timestampinc, uint32_t mseq);
|
||||||
int BuildPacketEx(const void *data,size_t len,
|
int BuildPacketEx(const void *data,size_t len,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
||||||
int BuildPacketEx(const void *data,size_t len,
|
int BuildPacketEx(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,
|
uint8_t pt,bool mark,uint32_t timestampinc,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
||||||
u_int8_t *GetPacket() { if (!init) return 0; return buffer; }
|
uint8_t *GetPacket() { if (!init) return 0; return buffer; }
|
||||||
size_t GetPacketLength() { if (!init) return 0; return packetlength; }
|
size_t GetPacketLength() { if (!init) return 0; return packetlength; }
|
||||||
|
|
||||||
int SetDefaultPayloadType(u_int8_t pt);
|
int SetDefaultPayloadType(uint8_t pt);
|
||||||
int SetDefaultMark(bool m);
|
int SetDefaultMark(bool m);
|
||||||
int SetDefaultTimestampIncrement(u_int32_t timestampinc);
|
int SetDefaultTimestampIncrement(uint32_t timestampinc);
|
||||||
int IncrementTimestamp(u_int32_t inc);
|
int IncrementTimestamp(uint32_t inc);
|
||||||
int IncrementTimestampDefault();
|
int IncrementTimestampDefault();
|
||||||
|
|
||||||
u_int32_t CreateNewSSRC();
|
uint32_t CreateNewSSRC();
|
||||||
u_int32_t CreateNewSSRC(RTPSources &sources);
|
uint32_t CreateNewSSRC(RTPSources &sources);
|
||||||
u_int32_t GetSSRC() const { if (!init) return 0; return ssrc; }
|
uint32_t GetSSRC() const { if (!init) return 0; return ssrc; }
|
||||||
u_int32_t GetTimestamp() const { if (!init) return 0; return timestamp; }
|
uint32_t GetTimestamp() const { if (!init) return 0; return timestamp; }
|
||||||
u_int16_t GetSequenceNumber() const { if (!init) return 0; return seqnr; }
|
uint16_t GetSequenceNumber() const { if (!init) return 0; return seqnr; }
|
||||||
|
|
||||||
// note: these are not necessarily from the last packet!
|
// note: these are not necessarily from the last packet!
|
||||||
RTPTime GetPacketTime() const { if (!init) return RTPTime(0,0); return lastwallclocktime; }
|
RTPTime GetPacketTime() const { if (!init) return RTPTime(0,0); return lastwallclocktime; }
|
||||||
u_int32_t GetPacketTimestamp() const { if (!init) return 0; return lastrtptimestamp; }
|
uint32_t GetPacketTimestamp() const { if (!init) return 0; return lastrtptimestamp; }
|
||||||
private:
|
private:
|
||||||
int PrivateBuildPacket(const void *data,size_t len,
|
int PrivateBuildPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,bool gotextension,
|
uint8_t pt,bool mark,uint32_t timestampinc,bool gotextension,
|
||||||
u_int16_t hdrextID = 0,const void *hdrextdata = 0,size_t numhdrextwords = 0, u_int32_t mseq = 0);
|
uint16_t hdrextID = 0,const void *hdrextdata = 0,size_t numhdrextwords = 0, uint32_t mseq = 0);
|
||||||
|
|
||||||
RTPRandom rtprnd;
|
RTPRandom rtprnd;
|
||||||
size_t maxpacksize;
|
size_t maxpacksize;
|
||||||
u_int8_t *buffer;
|
uint8_t *buffer;
|
||||||
size_t packetlength;
|
size_t packetlength;
|
||||||
|
|
||||||
u_int32_t numpayloadbytes;
|
uint32_t numpayloadbytes;
|
||||||
u_int32_t numpackets;
|
uint32_t numpackets;
|
||||||
bool init;
|
bool init;
|
||||||
|
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
u_int32_t timestamp;
|
uint32_t timestamp;
|
||||||
u_int16_t seqnr;
|
uint16_t seqnr;
|
||||||
|
|
||||||
u_int32_t defaulttimestampinc;
|
uint32_t defaulttimestampinc;
|
||||||
u_int8_t defaultpayloadtype;
|
uint8_t defaultpayloadtype;
|
||||||
bool defaultmark;
|
bool defaultmark;
|
||||||
|
|
||||||
bool deftsset,defptset,defmarkset;
|
bool deftsset,defptset,defmarkset;
|
||||||
|
|
||||||
u_int32_t csrcs[RTP_MAXCSRCS];
|
uint32_t csrcs[RTP_MAXCSRCS];
|
||||||
int numcsrcs;
|
int numcsrcs;
|
||||||
|
|
||||||
RTPTime lastwallclocktime;
|
RTPTime lastwallclocktime;
|
||||||
u_int32_t lastrtptimestamp;
|
uint32_t lastrtptimestamp;
|
||||||
u_int32_t prevrtptimestamp;
|
uint32_t prevrtptimestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int RTPPacketBuilder::SetDefaultPayloadType(u_int8_t pt)
|
inline int RTPPacketBuilder::SetDefaultPayloadType(uint8_t pt)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -136,7 +136,7 @@ inline int RTPPacketBuilder::SetDefaultMark(bool m)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int RTPPacketBuilder::SetDefaultTimestampIncrement(u_int32_t timestampinc)
|
inline int RTPPacketBuilder::SetDefaultTimestampIncrement(uint32_t timestampinc)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
@ -145,7 +145,7 @@ inline int RTPPacketBuilder::SetDefaultTimestampIncrement(u_int32_t timestampinc
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int RTPPacketBuilder::IncrementTimestamp(u_int32_t inc)
|
inline int RTPPacketBuilder::IncrementTimestamp(uint32_t inc)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_PACKBUILD_NOTINIT;
|
return ERR_RTP_PACKBUILD_NOTINIT;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -53,12 +53,12 @@ bool RTPRandom::init = false;
|
|||||||
RTPRandom::RTPRandom()
|
RTPRandom::RTPRandom()
|
||||||
{
|
{
|
||||||
#if defined(RTP_SUPPORT_GNUDRAND) || defined(RTP_SUPPORT_RANDR)
|
#if defined(RTP_SUPPORT_GNUDRAND) || defined(RTP_SUPPORT_RANDR)
|
||||||
u_int32_t x;
|
uint32_t x;
|
||||||
|
|
||||||
x = (u_int32_t)getpid();
|
x = (uint32_t)getpid();
|
||||||
x += (u_int32_t)time(0);
|
x += (uint32_t)time(0);
|
||||||
x -= (u_int32_t)clock();
|
x -= (uint32_t)clock();
|
||||||
x ^= (u_int32_t)(this);
|
x ^= (uint32_t)(this);
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_GNUDRAND
|
#ifdef RTP_SUPPORT_GNUDRAND
|
||||||
srand48_r(x,&drandbuffer);
|
srand48_r(x,&drandbuffer);
|
||||||
@ -70,14 +70,14 @@ RTPRandom::RTPRandom()
|
|||||||
if (init)
|
if (init)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
u_int32_t x;
|
uint32_t x;
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
x = (u_int32_t)getpid();
|
x = (uint32_t)getpid();
|
||||||
x += (u_int32_t)time(0);
|
x += (uint32_t)time(0);
|
||||||
x -= (u_int32_t)clock();
|
x -= (uint32_t)clock();
|
||||||
#else
|
#else
|
||||||
x = (u_int32_t)GetCurrentProcessId();
|
x = (uint32_t)GetCurrentProcessId();
|
||||||
|
|
||||||
FILETIME ft;
|
FILETIME ft;
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
@ -87,7 +87,7 @@ RTPRandom::RTPRandom()
|
|||||||
|
|
||||||
x += ft.dwLowDateTime;
|
x += ft.dwLowDateTime;
|
||||||
#endif // _WIN32_WCE
|
#endif // _WIN32_WCE
|
||||||
x ^= (u_int32_t)(this);
|
x ^= (uint32_t)(this);
|
||||||
srand((unsigned int)x);
|
srand((unsigned int)x);
|
||||||
|
|
||||||
init = true;
|
init = true;
|
||||||
@ -100,27 +100,27 @@ RTPRandom::~RTPRandom()
|
|||||||
|
|
||||||
#ifdef RTP_SUPPORT_GNUDRAND
|
#ifdef RTP_SUPPORT_GNUDRAND
|
||||||
|
|
||||||
u_int8_t RTPRandom::GetRandom8()
|
uint8_t RTPRandom::GetRandom8()
|
||||||
{
|
{
|
||||||
double x;
|
double x;
|
||||||
drand48_r(&drandbuffer,&x);
|
drand48_r(&drandbuffer,&x);
|
||||||
u_int8_t y = (u_int8_t)(x*256.0);
|
uint8_t y = (uint8_t)(x*256.0);
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int16_t RTPRandom::GetRandom16()
|
uint16_t RTPRandom::GetRandom16()
|
||||||
{
|
{
|
||||||
double x;
|
double x;
|
||||||
drand48_r(&drandbuffer,&x);
|
drand48_r(&drandbuffer,&x);
|
||||||
u_int16_t y = (u_int16_t)(x*65536.0);
|
uint16_t y = (uint16_t)(x*65536.0);
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPRandom::GetRandom32()
|
uint32_t RTPRandom::GetRandom32()
|
||||||
{
|
{
|
||||||
u_int32_t a = GetRandom16();
|
uint32_t a = GetRandom16();
|
||||||
u_int32_t b = GetRandom16();
|
uint32_t b = GetRandom16();
|
||||||
u_int32_t y = (a << 16)|b;
|
uint32_t y = (a << 16)|b;
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,31 +134,31 @@ double RTPRandom::GetRandomDouble()
|
|||||||
#else
|
#else
|
||||||
#ifdef RTP_SUPPORT_RANDR
|
#ifdef RTP_SUPPORT_RANDR
|
||||||
|
|
||||||
u_int8_t RTPRandom::GetRandom8()
|
uint8_t RTPRandom::GetRandom8()
|
||||||
{
|
{
|
||||||
u_int8_t x;
|
uint8_t x;
|
||||||
|
|
||||||
x = (u_int8_t)(256.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
x = (uint8_t)(256.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int16_t RTPRandom::GetRandom16()
|
uint16_t RTPRandom::GetRandom16()
|
||||||
{
|
{
|
||||||
u_int16_t x;
|
uint16_t x;
|
||||||
|
|
||||||
x = (u_int16_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
x = (uint16_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPRandom::GetRandom32()
|
uint32_t RTPRandom::GetRandom32()
|
||||||
{
|
{
|
||||||
u_int32_t x,y;
|
uint32_t x,y;
|
||||||
|
|
||||||
x = (u_int32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
||||||
y = x;
|
y = x;
|
||||||
x = (u_int32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
||||||
y ^= (x<<8);
|
y ^= (x<<8);
|
||||||
x = (u_int32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand_r(&state))/((double)RAND_MAX+1.0));
|
||||||
y ^= (x<<16);
|
y ^= (x<<16);
|
||||||
|
|
||||||
return y;
|
return y;
|
||||||
@ -172,31 +172,31 @@ double RTPRandom::GetRandomDouble()
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
u_int8_t RTPRandom::GetRandom8()
|
uint8_t RTPRandom::GetRandom8()
|
||||||
{
|
{
|
||||||
u_int8_t x;
|
uint8_t x;
|
||||||
|
|
||||||
x = (u_int8_t)(256.0*((double)rand())/((double)RAND_MAX+1.0));
|
x = (uint8_t)(256.0*((double)rand())/((double)RAND_MAX+1.0));
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int16_t RTPRandom::GetRandom16()
|
uint16_t RTPRandom::GetRandom16()
|
||||||
{
|
{
|
||||||
u_int16_t x;
|
uint16_t x;
|
||||||
|
|
||||||
x = (u_int16_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
x = (uint16_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPRandom::GetRandom32()
|
uint32_t RTPRandom::GetRandom32()
|
||||||
{
|
{
|
||||||
u_int32_t x,y;
|
uint32_t x,y;
|
||||||
|
|
||||||
x = (u_int32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
||||||
y = x;
|
y = x;
|
||||||
x = (u_int32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
||||||
y ^= (x<<8);
|
y ^= (x<<8);
|
||||||
x = (u_int32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
x = (uint32_t)(65536.0*((double)rand())/((double)RAND_MAX+1.0));
|
||||||
y ^= (x<<16);
|
y ^= (x<<16);
|
||||||
|
|
||||||
return y;
|
return y;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -43,9 +43,9 @@ class RTPRandom
|
|||||||
public:
|
public:
|
||||||
RTPRandom();
|
RTPRandom();
|
||||||
~RTPRandom();
|
~RTPRandom();
|
||||||
u_int8_t GetRandom8();
|
uint8_t GetRandom8();
|
||||||
u_int16_t GetRandom16();
|
uint16_t GetRandom16();
|
||||||
u_int32_t GetRandom32();
|
uint32_t GetRandom32();
|
||||||
double GetRandomDouble(); // returns random value between 0.0 and 1.0
|
double GetRandomDouble(); // returns random value between 0.0 and 1.0
|
||||||
private:
|
private:
|
||||||
#ifdef RTP_SUPPORT_GNUDRAND
|
#ifdef RTP_SUPPORT_GNUDRAND
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -42,24 +42,24 @@
|
|||||||
class RTPRawPacket
|
class RTPRawPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPRawPacket(u_int8_t *data,size_t datalen,RTPAddress *address,RTPTime &recvtime,bool rtp);
|
RTPRawPacket(uint8_t *data,size_t datalen,RTPAddress *address,RTPTime &recvtime,bool rtp);
|
||||||
~RTPRawPacket();
|
~RTPRawPacket();
|
||||||
|
|
||||||
u_int8_t *GetData() { return packetdata; }
|
uint8_t *GetData() { return packetdata; }
|
||||||
size_t GetDataLength() const { return packetdatalength; }
|
size_t GetDataLength() const { return packetdatalength; }
|
||||||
RTPTime GetReceiveTime() const { return receivetime; }
|
RTPTime GetReceiveTime() const { return receivetime; }
|
||||||
const RTPAddress *GetSenderAddress() const { return senderaddress; }
|
const RTPAddress *GetSenderAddress() const { return senderaddress; }
|
||||||
bool IsRTP() const { return isrtp; }
|
bool IsRTP() const { return isrtp; }
|
||||||
void ZeroData() { packetdata = 0; packetdatalength = 0; }
|
void ZeroData() { packetdata = 0; packetdatalength = 0; }
|
||||||
private:
|
private:
|
||||||
u_int8_t *packetdata;
|
uint8_t *packetdata;
|
||||||
size_t packetdatalength;
|
size_t packetdatalength;
|
||||||
RTPTime receivetime;
|
RTPTime receivetime;
|
||||||
RTPAddress *senderaddress;
|
RTPAddress *senderaddress;
|
||||||
bool isrtp;
|
bool isrtp;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline RTPRawPacket::RTPRawPacket(u_int8_t *data,size_t datalen,RTPAddress *address,RTPTime &recvtime,bool rtp):receivetime(recvtime)
|
inline RTPRawPacket::RTPRawPacket(uint8_t *data,size_t datalen,RTPAddress *address,RTPTime &recvtime,bool rtp):receivetime(recvtime)
|
||||||
{
|
{
|
||||||
packetdata = data;
|
packetdata = data;
|
||||||
packetdatalength = datalen;
|
packetdatalength = datalen;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -35,7 +35,6 @@
|
|||||||
#include "rtppollthread.h"
|
#include "rtppollthread.h"
|
||||||
#include "rtpudpv4transmitter.h"
|
#include "rtpudpv4transmitter.h"
|
||||||
#include "rtpudpv6transmitter.h"
|
#include "rtpudpv6transmitter.h"
|
||||||
#include "rtpgsttransmitter.h"
|
|
||||||
#include "rtpsessionparams.h"
|
#include "rtpsessionparams.h"
|
||||||
#include "rtpdefines.h"
|
#include "rtpdefines.h"
|
||||||
#include "rtprawpacket.h"
|
#include "rtprawpacket.h"
|
||||||
@ -113,11 +112,6 @@ int RTPSession::Create(const RTPSessionParams &sessparams,const RTPTransmissionP
|
|||||||
rtptrans = new RTPUDPv6Transmitter();
|
rtptrans = new RTPUDPv6Transmitter();
|
||||||
break;
|
break;
|
||||||
#endif // RTP_SUPPORT_IPV6
|
#endif // RTP_SUPPORT_IPV6
|
||||||
#ifdef RTP_SUPPORT_GST
|
|
||||||
case RTPTransmitter::IPv4GSTProto:
|
|
||||||
rtptrans = new RTPGSTv4Transmitter();
|
|
||||||
break;
|
|
||||||
#endif // RTP_SUPPORT_GST
|
|
||||||
case RTPTransmitter::UserDefinedProto:
|
case RTPTransmitter::UserDefinedProto:
|
||||||
rtptrans = NewUserDefinedTransmitter();
|
rtptrans = NewUserDefinedTransmitter();
|
||||||
if (rtptrans == 0)
|
if (rtptrans == 0)
|
||||||
@ -177,7 +171,7 @@ int RTPSession::Create(const RTPSessionParams &sessparams,const RTPTransmissionP
|
|||||||
// Init the RTCP packet builder
|
// Init the RTCP packet builder
|
||||||
|
|
||||||
double timestampunit = sessparams.GetOwnTimestampUnit();
|
double timestampunit = sessparams.GetOwnTimestampUnit();
|
||||||
u_int8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
size_t buflen = 1024;
|
size_t buflen = 1024;
|
||||||
|
|
||||||
if ((status = CreateCNAME(buf,&buflen,sessparams.GetResolveLocalHostname())) < 0)
|
if ((status = CreateCNAME(buf,&buflen,sessparams.GetResolveLocalHostname())) < 0)
|
||||||
@ -419,12 +413,12 @@ bool RTPSession::IsActive()
|
|||||||
return created;
|
return created;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPSession::GetLocalSSRC()
|
uint32_t RTPSession::GetLocalSSRC()
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
|
|
||||||
BUILDER_LOCK
|
BUILDER_LOCK
|
||||||
ssrc = packetbuilder.GetSSRC();
|
ssrc = packetbuilder.GetSSRC();
|
||||||
@ -508,7 +502,7 @@ int RTPSession::SendPacket(const void *data,size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::SendPacket(const void *data,size_t len,
|
int RTPSession::SendPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq)
|
uint8_t pt,bool mark,uint32_t timestampinc, uint32_t mseq)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@ -535,7 +529,7 @@ int RTPSession::SendPacket(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::SendPacketEx(const void *data,size_t len,
|
int RTPSession::SendPacketEx(const void *data,size_t len,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@ -562,8 +556,8 @@ int RTPSession::SendPacketEx(const void *data,size_t len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::SendPacketEx(const void *data,size_t len,
|
int RTPSession::SendPacketEx(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,
|
uint8_t pt,bool mark,uint32_t timestampinc,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@ -589,7 +583,7 @@ int RTPSession::SendPacketEx(const void *data,size_t len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::SetDefaultPayloadType(u_int8_t pt)
|
int RTPSession::SetDefaultPayloadType(uint8_t pt)
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
return ERR_RTP_SESSION_NOTCREATED;
|
return ERR_RTP_SESSION_NOTCREATED;
|
||||||
@ -615,7 +609,7 @@ int RTPSession::SetDefaultMark(bool m)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::SetDefaultTimestampIncrement(u_int32_t timestampinc)
|
int RTPSession::SetDefaultTimestampIncrement(uint32_t timestampinc)
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
return ERR_RTP_SESSION_NOTCREATED;
|
return ERR_RTP_SESSION_NOTCREATED;
|
||||||
@ -628,7 +622,7 @@ int RTPSession::SetDefaultTimestampIncrement(u_int32_t timestampinc)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::IncrementTimestamp(u_int32_t inc)
|
int RTPSession::IncrementTimestamp(uint32_t inc)
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
return ERR_RTP_SESSION_NOTCREATED;
|
return ERR_RTP_SESSION_NOTCREATED;
|
||||||
@ -654,6 +648,19 @@ int RTPSession::IncrementTimestampDefault()
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RTPSession::SetPreTransmissionDelay(const RTPTime &delay)
|
||||||
|
{
|
||||||
|
if (!created)
|
||||||
|
return ERR_RTP_SESSION_NOTCREATED;
|
||||||
|
|
||||||
|
int status;
|
||||||
|
|
||||||
|
BUILDER_LOCK
|
||||||
|
status = rtcpbuilder.SetPreTransmissionDelay(delay);
|
||||||
|
BUILDER_UNLOCK
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
RTPTransmissionInfo *RTPSession::GetTransmissionInfo()
|
RTPTransmissionInfo *RTPSession::GetTransmissionInfo()
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
@ -764,7 +771,7 @@ RTPSourceData *RTPSession::GetCurrentSourceInfo()
|
|||||||
return sources.GetCurrentSourceInfo();
|
return sources.GetCurrentSourceInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPSourceData *RTPSession::GetSourceInfo(u_int32_t ssrc)
|
RTPSourceData *RTPSession::GetSourceInfo(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
if (!created)
|
if (!created)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1103,7 +1110,7 @@ int RTPSession::ProcessPolledData()
|
|||||||
// and reset the packet count in the transmitter
|
// and reset the packet count in the transmitter
|
||||||
|
|
||||||
BUILDER_LOCK
|
BUILDER_LOCK
|
||||||
u_int32_t newssrc = packetbuilder.CreateNewSSRC(sources);
|
uint32_t newssrc = packetbuilder.CreateNewSSRC(sources);
|
||||||
BUILDER_UNLOCK
|
BUILDER_UNLOCK
|
||||||
|
|
||||||
rtptrans->ResetPacketCount();
|
rtptrans->ResetPacketCount();
|
||||||
@ -1202,7 +1209,7 @@ int RTPSession::ProcessPolledData()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSession::CreateCNAME(u_int8_t *buffer,size_t *bufferlength,bool resolve)
|
int RTPSession::CreateCNAME(uint8_t *buffer,size_t *bufferlength,bool resolve)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
bool gotlogin = true;
|
bool gotlogin = true;
|
||||||
@ -1253,7 +1260,7 @@ int RTPSession::CreateCNAME(u_int8_t *buffer,size_t *bufferlength,bool resolve)
|
|||||||
|
|
||||||
size_t offset = strlen((const char *)buffer);
|
size_t offset = strlen((const char *)buffer);
|
||||||
if (offset < (*bufferlength-1))
|
if (offset < (*bufferlength-1))
|
||||||
buffer[offset] = (u_int8_t)'@';
|
buffer[offset] = (uint8_t)'@';
|
||||||
offset++;
|
offset++;
|
||||||
|
|
||||||
size_t buflen2 = *bufferlength-offset;
|
size_t buflen2 = *bufferlength-offset;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ public:
|
|||||||
void BYEDestroy(const RTPTime &maxwaittime,const void *reason,size_t reasonlength);
|
void BYEDestroy(const RTPTime &maxwaittime,const void *reason,size_t reasonlength);
|
||||||
bool IsActive();
|
bool IsActive();
|
||||||
|
|
||||||
u_int32_t GetLocalSSRC();
|
uint32_t GetLocalSSRC();
|
||||||
|
|
||||||
int AddDestination(const RTPAddress &addr);
|
int AddDestination(const RTPAddress &addr);
|
||||||
int DeleteDestination(const RTPAddress &addr);
|
int DeleteDestination(const RTPAddress &addr);
|
||||||
@ -85,17 +85,18 @@ public:
|
|||||||
|
|
||||||
int SendPacket(const void *data,size_t len);
|
int SendPacket(const void *data,size_t len);
|
||||||
int SendPacket(const void *data,size_t len,
|
int SendPacket(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq = 0);
|
uint8_t pt,bool mark,uint32_t timestampinc, uint32_t mseq = 0);
|
||||||
int SendPacketEx(const void *data,size_t len,
|
int SendPacketEx(const void *data,size_t len,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
||||||
int SendPacketEx(const void *data,size_t len,
|
int SendPacketEx(const void *data,size_t len,
|
||||||
u_int8_t pt,bool mark,u_int32_t timestampinc,
|
uint8_t pt,bool mark,uint32_t timestampinc,
|
||||||
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
uint16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
|
||||||
int SetDefaultPayloadType(u_int8_t pt);
|
int SetDefaultPayloadType(uint8_t pt);
|
||||||
int SetDefaultMark(bool m);
|
int SetDefaultMark(bool m);
|
||||||
int SetDefaultTimestampIncrement(u_int32_t timestampinc);
|
int SetDefaultTimestampIncrement(uint32_t timestampinc);
|
||||||
int IncrementTimestamp(u_int32_t inc);
|
int IncrementTimestamp(uint32_t inc);
|
||||||
int IncrementTimestampDefault();
|
int IncrementTimestampDefault();
|
||||||
|
int SetPreTransmissionDelay(const RTPTime &delay);
|
||||||
|
|
||||||
RTPTransmissionInfo *GetTransmissionInfo();
|
RTPTransmissionInfo *GetTransmissionInfo();
|
||||||
int Poll();
|
int Poll();
|
||||||
@ -115,7 +116,7 @@ public:
|
|||||||
bool GotoNextSourceWithData();
|
bool GotoNextSourceWithData();
|
||||||
bool GotoPreviousSourceWithData();
|
bool GotoPreviousSourceWithData();
|
||||||
RTPSourceData *GetCurrentSourceInfo();
|
RTPSourceData *GetCurrentSourceInfo();
|
||||||
RTPSourceData *GetSourceInfo(u_int32_t ssrc);
|
RTPSourceData *GetSourceInfo(uint32_t ssrc);
|
||||||
RTPPacket *GetNextPacket();
|
RTPPacket *GetNextPacket();
|
||||||
int EndDataAccess();
|
int EndDataAccess();
|
||||||
|
|
||||||
@ -158,7 +159,7 @@ protected:
|
|||||||
const RTPAddress *senderaddress) { }
|
const RTPAddress *senderaddress) { }
|
||||||
virtual void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp) { }
|
virtual void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp) { }
|
||||||
virtual void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
virtual void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
||||||
const u_int8_t *cname,size_t cnamelength) { }
|
const uint8_t *cname,size_t cnamelength) { }
|
||||||
virtual void OnNewSource(RTPSourceData *srcdat) { }
|
virtual void OnNewSource(RTPSourceData *srcdat) { }
|
||||||
virtual void OnRemoveSource(RTPSourceData *srcdat) { }
|
virtual void OnRemoveSource(RTPSourceData *srcdat) { }
|
||||||
virtual void OnTimeout(RTPSourceData *srcdat) { }
|
virtual void OnTimeout(RTPSourceData *srcdat) { }
|
||||||
@ -179,7 +180,7 @@ protected:
|
|||||||
virtual void OnPollThreadStep() { }
|
virtual void OnPollThreadStep() { }
|
||||||
#endif // RTP_SUPPORT_THREAD
|
#endif // RTP_SUPPORT_THREAD
|
||||||
private:
|
private:
|
||||||
int CreateCNAME(u_int8_t *buffer,size_t *bufferlength,bool resolve);
|
int CreateCNAME(uint8_t *buffer,size_t *bufferlength,bool resolve);
|
||||||
int ProcessPolledData();
|
int ProcessPolledData();
|
||||||
int ProcessRTCPCompoundPacket(RTCPCompoundPacket &rtcpcomppack,RTPRawPacket *pack);
|
int ProcessRTCPCompoundPacket(RTCPCompoundPacket &rtcpcomppack,RTPRawPacket *pack);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ void RTPSessionSources::OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *
|
|||||||
rtpsession.OnSSRCCollision(srcdat,senderaddress,isrtp);
|
rtpsession.OnSSRCCollision(srcdat,senderaddress,isrtp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTPSessionSources::OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,const u_int8_t *cname,size_t cnamelength)
|
void RTPSessionSources::OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,const uint8_t *cname,size_t cnamelength)
|
||||||
{
|
{
|
||||||
rtpsession.OnCNAMECollision(srcdat,senderaddress,cname,cnamelength);
|
rtpsession.OnCNAMECollision(srcdat,senderaddress,cname,cnamelength);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ private:
|
|||||||
const RTPAddress *senderaddress);
|
const RTPAddress *senderaddress);
|
||||||
void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp);
|
void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp);
|
||||||
void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
||||||
const u_int8_t *cname,size_t cnamelength);
|
const uint8_t *cname,size_t cnamelength);
|
||||||
void OnNewSource(RTPSourceData *srcdat);
|
void OnNewSource(RTPSourceData *srcdat);
|
||||||
void OnRemoveSource(RTPSourceData *srcdat);
|
void OnRemoveSource(RTPSourceData *srcdat);
|
||||||
void OnTimeout(RTPSourceData *srcdat);
|
void OnTimeout(RTPSourceData *srcdat);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -88,15 +88,15 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
|
|
||||||
if (probation)
|
if (probation)
|
||||||
{
|
{
|
||||||
u_int16_t pseq;
|
uint16_t pseq;
|
||||||
u_int32_t pseq2;
|
uint32_t pseq2;
|
||||||
|
|
||||||
pseq = prevseqnr;
|
pseq = prevseqnr;
|
||||||
pseq++;
|
pseq++;
|
||||||
pseq2 = (u_int32_t)pseq;
|
pseq2 = (uint32_t)pseq;
|
||||||
if (pseq2 == pack->GetExtendedSequenceNumber()) // ok, its the next expected packet
|
if (pseq2 == pack->GetExtendedSequenceNumber()) // ok, its the next expected packet
|
||||||
{
|
{
|
||||||
prevseqnr = (u_int16_t)pack->GetExtendedSequenceNumber();
|
prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();
|
||||||
probation--;
|
probation--;
|
||||||
if (probation == 0) // probation over
|
if (probation == 0) // probation over
|
||||||
acceptpack = true;
|
acceptpack = true;
|
||||||
@ -106,14 +106,14 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
else // not next packet
|
else // not next packet
|
||||||
{
|
{
|
||||||
probation = RTP_PROBATIONCOUNT;
|
probation = RTP_PROBATIONCOUNT;
|
||||||
prevseqnr = (u_int16_t)pack->GetExtendedSequenceNumber();
|
prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();
|
||||||
*onprobation = true;
|
*onprobation = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // first packet received with this SSRC ID, start probation
|
else // first packet received with this SSRC ID, start probation
|
||||||
{
|
{
|
||||||
probation = RTP_PROBATIONCOUNT;
|
probation = RTP_PROBATIONCOUNT;
|
||||||
prevseqnr = (u_int16_t)pack->GetExtendedSequenceNumber();
|
prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();
|
||||||
*onprobation = true;
|
*onprobation = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,8 +139,8 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
}
|
}
|
||||||
else // already got packets
|
else // already got packets
|
||||||
{
|
{
|
||||||
u_int16_t maxseq16;
|
uint16_t maxseq16;
|
||||||
u_int32_t extseqnr;
|
uint32_t extseqnr;
|
||||||
|
|
||||||
// Adjust max extended sequence number and set extende seq nr of packet
|
// Adjust max extended sequence number and set extende seq nr of packet
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
packetsreceived++;
|
packetsreceived++;
|
||||||
numnewpackets++;
|
numnewpackets++;
|
||||||
|
|
||||||
maxseq16 = (u_int16_t)(exthighseqnr&0x0000FFFF);
|
maxseq16 = (uint16_t)(exthighseqnr&0x0000FFFF);
|
||||||
if (pack->GetExtendedSequenceNumber() >= maxseq16)
|
if (pack->GetExtendedSequenceNumber() >= maxseq16)
|
||||||
{
|
{
|
||||||
extseqnr = numcycles+pack->GetExtendedSequenceNumber();
|
extseqnr = numcycles+pack->GetExtendedSequenceNumber();
|
||||||
@ -156,12 +156,12 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
u_int16_t dif1,dif2;
|
uint16_t dif1,dif2;
|
||||||
|
|
||||||
dif1 = ((u_int16_t)pack->GetExtendedSequenceNumber());
|
dif1 = ((uint16_t)pack->GetExtendedSequenceNumber());
|
||||||
dif1 -= maxseq16;
|
dif1 -= maxseq16;
|
||||||
dif2 = maxseq16;
|
dif2 = maxseq16;
|
||||||
dif2 -= ((u_int16_t)pack->GetExtendedSequenceNumber());
|
dif2 -= ((uint16_t)pack->GetExtendedSequenceNumber());
|
||||||
if (dif1 < dif2)
|
if (dif1 < dif2)
|
||||||
{
|
{
|
||||||
numcycles += 0x00010000;
|
numcycles += 0x00010000;
|
||||||
@ -190,7 +190,7 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
diff -= djitter;
|
diff -= djitter;
|
||||||
diff /= 16.0;
|
diff /= 16.0;
|
||||||
djitter += diff;
|
djitter += diff;
|
||||||
jitter = (u_int32_t)djitter;
|
jitter = (uint32_t)djitter;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -206,7 +206,7 @@ void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,do
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPSourceData::RTPSourceData(u_int32_t s) : byetime(0,0)
|
RTPSourceData::RTPSourceData(uint32_t s) : byetime(0,0)
|
||||||
{
|
{
|
||||||
ssrc = s;
|
ssrc = s;
|
||||||
issender = false;
|
issender = false;
|
||||||
@ -251,7 +251,7 @@ double RTPSourceData::INF_GetEstimatedTimestampUnit() const
|
|||||||
|
|
||||||
t1 -= t2; // get the time difference
|
t1 -= t2; // get the time difference
|
||||||
|
|
||||||
u_int32_t tsdiff = SRinf.GetRTPTimestamp()-SRprevinf.GetRTPTimestamp();
|
uint32_t tsdiff = SRinf.GetRTPTimestamp()-SRprevinf.GetRTPTimestamp();
|
||||||
|
|
||||||
return (t1.GetDouble()/((double)tsdiff));
|
return (t1.GetDouble()/((double)tsdiff));
|
||||||
}
|
}
|
||||||
@ -264,7 +264,7 @@ RTPTime RTPSourceData::INF_GetRoundtripTime() const
|
|||||||
return RTPTime(0,0);
|
return RTPTime(0,0);
|
||||||
|
|
||||||
RTPNTPTime recvtime = RRinf.GetReceiveTime().GetNTPTime();
|
RTPNTPTime recvtime = RRinf.GetReceiveTime().GetNTPTime();
|
||||||
u_int32_t rtt = ((recvtime.GetMSW()&0xFFFF)<<16)|((recvtime.GetLSW()>>16)&0xFFFF);
|
uint32_t rtt = ((recvtime.GetMSW()&0xFFFF)<<16)|((recvtime.GetLSW()>>16)&0xFFFF);
|
||||||
rtt -= RRinf.GetLastSRTimestamp();
|
rtt -= RRinf.GetLastSRTimestamp();
|
||||||
rtt -= RRinf.GetDelaySinceLastSR();
|
rtt -= RRinf.GetDelaySinceLastSR();
|
||||||
|
|
||||||
@ -375,7 +375,7 @@ void RTPSourceData::Dump()
|
|||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
char str[1024];
|
char str[1024];
|
||||||
u_int8_t *val;
|
uint8_t *val;
|
||||||
|
|
||||||
if ((val = SDESinf.GetCNAME(&len)) != 0)
|
if ((val = SDESinf.GetCNAME(&len)) != 0)
|
||||||
{
|
{
|
||||||
@ -421,7 +421,7 @@ void RTPSourceData::Dump()
|
|||||||
}
|
}
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
SDESinf.GotoFirstPrivateValue();
|
SDESinf.GotoFirstPrivateValue();
|
||||||
u_int8_t *pref;
|
uint8_t *pref;
|
||||||
size_t preflen;
|
size_t preflen;
|
||||||
while (SDESinf.GetNextPrivateValue(&pref,&preflen,&val,&len))
|
while (SDESinf.GetNextPrivateValue(&pref,&preflen,&val,&len))
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -48,21 +48,21 @@ class RTCPSenderReportInfo
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPSenderReportInfo():ntptimestamp(0,0),receivetime(0,0) { hasinfo = false; rtptimestamp = 0; packetcount = 0; bytecount = 0; }
|
RTCPSenderReportInfo():ntptimestamp(0,0),receivetime(0,0) { hasinfo = false; rtptimestamp = 0; packetcount = 0; bytecount = 0; }
|
||||||
void Set(const RTPNTPTime &ntptime,u_int32_t rtptime,u_int32_t pcount,
|
void Set(const RTPNTPTime &ntptime,uint32_t rtptime,uint32_t pcount,
|
||||||
u_int32_t bcount,const RTPTime &rcvtime) { ntptimestamp = ntptime; rtptimestamp = rtptime; packetcount = pcount; bytecount = bcount; receivetime = rcvtime; hasinfo = true; }
|
uint32_t bcount,const RTPTime &rcvtime) { ntptimestamp = ntptime; rtptimestamp = rtptime; packetcount = pcount; bytecount = bcount; receivetime = rcvtime; hasinfo = true; }
|
||||||
|
|
||||||
bool HasInfo() const { return hasinfo; }
|
bool HasInfo() const { return hasinfo; }
|
||||||
RTPNTPTime GetNTPTimestamp() const { return ntptimestamp; }
|
RTPNTPTime GetNTPTimestamp() const { return ntptimestamp; }
|
||||||
u_int32_t GetRTPTimestamp() const { return rtptimestamp; }
|
uint32_t GetRTPTimestamp() const { return rtptimestamp; }
|
||||||
u_int32_t GetPacketCount() const { return packetcount; }
|
uint32_t GetPacketCount() const { return packetcount; }
|
||||||
u_int32_t GetByteCount() const { return bytecount; }
|
uint32_t GetByteCount() const { return bytecount; }
|
||||||
RTPTime GetReceiveTime() const { return receivetime; }
|
RTPTime GetReceiveTime() const { return receivetime; }
|
||||||
private:
|
private:
|
||||||
bool hasinfo;
|
bool hasinfo;
|
||||||
RTPNTPTime ntptimestamp;
|
RTPNTPTime ntptimestamp;
|
||||||
u_int32_t rtptimestamp;
|
uint32_t rtptimestamp;
|
||||||
u_int32_t packetcount;
|
uint32_t packetcount;
|
||||||
u_int32_t bytecount;
|
uint32_t bytecount;
|
||||||
RTPTime receivetime;
|
RTPTime receivetime;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,25 +70,25 @@ class RTCPReceiverReportInfo
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTCPReceiverReportInfo():receivetime(0,0) { hasinfo = false; fractionlost = 0; packetslost = 0; exthighseqnr = 0; jitter = 0; lsr = 0; dlsr = 0; }
|
RTCPReceiverReportInfo():receivetime(0,0) { hasinfo = false; fractionlost = 0; packetslost = 0; exthighseqnr = 0; jitter = 0; lsr = 0; dlsr = 0; }
|
||||||
void Set(u_int8_t fraclost,int32_t plost,u_int32_t exthigh,
|
void Set(uint8_t fraclost,int32_t plost,uint32_t exthigh,
|
||||||
u_int32_t jit,u_int32_t l,u_int32_t dl,const RTPTime &rcvtime) { fractionlost = ((double)fraclost)/256.0; packetslost = plost; exthighseqnr = exthigh; jitter = jit; lsr = l; dlsr = dl; receivetime = rcvtime; hasinfo = true; }
|
uint32_t jit,uint32_t l,uint32_t dl,const RTPTime &rcvtime) { fractionlost = ((double)fraclost)/256.0; packetslost = plost; exthighseqnr = exthigh; jitter = jit; lsr = l; dlsr = dl; receivetime = rcvtime; hasinfo = true; }
|
||||||
|
|
||||||
bool HasInfo() const { return hasinfo; }
|
bool HasInfo() const { return hasinfo; }
|
||||||
double GetFractionLost() const { return fractionlost; }
|
double GetFractionLost() const { return fractionlost; }
|
||||||
int32_t GetPacketsLost() const { return packetslost; }
|
int32_t GetPacketsLost() const { return packetslost; }
|
||||||
u_int32_t GetExtendedHighestSequenceNumber() const { return exthighseqnr; }
|
uint32_t GetExtendedHighestSequenceNumber() const { return exthighseqnr; }
|
||||||
u_int32_t GetJitter() const { return jitter; }
|
uint32_t GetJitter() const { return jitter; }
|
||||||
u_int32_t GetLastSRTimestamp() const { return lsr; }
|
uint32_t GetLastSRTimestamp() const { return lsr; }
|
||||||
u_int32_t GetDelaySinceLastSR() const { return dlsr; }
|
uint32_t GetDelaySinceLastSR() const { return dlsr; }
|
||||||
RTPTime GetReceiveTime() const { return receivetime; }
|
RTPTime GetReceiveTime() const { return receivetime; }
|
||||||
private:
|
private:
|
||||||
bool hasinfo;
|
bool hasinfo;
|
||||||
double fractionlost;
|
double fractionlost;
|
||||||
int32_t packetslost;
|
int32_t packetslost;
|
||||||
u_int32_t exthighseqnr;
|
uint32_t exthighseqnr;
|
||||||
u_int32_t jitter;
|
uint32_t jitter;
|
||||||
u_int32_t lsr;
|
uint32_t lsr;
|
||||||
u_int32_t dlsr;
|
uint32_t dlsr;
|
||||||
RTPTime receivetime;
|
RTPTime receivetime;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -99,13 +99,13 @@ public:
|
|||||||
void ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,double tsunit,bool ownpacket,bool *accept,bool applyprobation,bool *onprobation);
|
void ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,double tsunit,bool ownpacket,bool *accept,bool applyprobation,bool *onprobation);
|
||||||
|
|
||||||
bool HasSentData() const { return sentdata; }
|
bool HasSentData() const { return sentdata; }
|
||||||
u_int32_t GetNumPacketsReceived() const { return packetsreceived; }
|
uint32_t GetNumPacketsReceived() const { return packetsreceived; }
|
||||||
u_int32_t GetBaseSequenceNumber() const { return baseseqnr; }
|
uint32_t GetBaseSequenceNumber() const { return baseseqnr; }
|
||||||
u_int32_t GetExtendedHighestSequenceNumber() const { return exthighseqnr; }
|
uint32_t GetExtendedHighestSequenceNumber() const { return exthighseqnr; }
|
||||||
u_int32_t GetJitter() const { return jitter; }
|
uint32_t GetJitter() const { return jitter; }
|
||||||
|
|
||||||
int32_t GetNumPacketsReceivedInInterval() const { return numnewpackets; }
|
int32_t GetNumPacketsReceivedInInterval() const { return numnewpackets; }
|
||||||
u_int32_t GetSavedExtendedSequenceNumber() const { return savedextseqnr; }
|
uint32_t GetSavedExtendedSequenceNumber() const { return savedextseqnr; }
|
||||||
void StartNewInterval() { numnewpackets = 0; savedextseqnr = exthighseqnr; }
|
void StartNewInterval() { numnewpackets = 0; savedextseqnr = exthighseqnr; }
|
||||||
|
|
||||||
void SetLastMessageTime(const RTPTime &t) { lastmsgtime = t; }
|
void SetLastMessageTime(const RTPTime &t) { lastmsgtime = t; }
|
||||||
@ -117,20 +117,20 @@ public:
|
|||||||
RTPTime GetLastNoteTime() const { return lastnotetime; }
|
RTPTime GetLastNoteTime() const { return lastnotetime; }
|
||||||
private:
|
private:
|
||||||
bool sentdata;
|
bool sentdata;
|
||||||
u_int32_t packetsreceived;
|
uint32_t packetsreceived;
|
||||||
u_int32_t numcycles; // shifted left 16 bits
|
uint32_t numcycles; // shifted left 16 bits
|
||||||
u_int32_t baseseqnr;
|
uint32_t baseseqnr;
|
||||||
u_int32_t exthighseqnr,prevexthighseqnr;
|
uint32_t exthighseqnr,prevexthighseqnr;
|
||||||
u_int32_t jitter,prevtimestamp;
|
uint32_t jitter,prevtimestamp;
|
||||||
double djitter;
|
double djitter;
|
||||||
RTPTime prevpacktime;
|
RTPTime prevpacktime;
|
||||||
RTPTime lastmsgtime;
|
RTPTime lastmsgtime;
|
||||||
RTPTime lastrtptime;
|
RTPTime lastrtptime;
|
||||||
RTPTime lastnotetime;
|
RTPTime lastnotetime;
|
||||||
u_int32_t numnewpackets;
|
uint32_t numnewpackets;
|
||||||
u_int32_t savedextseqnr;
|
uint32_t savedextseqnr;
|
||||||
#ifdef RTP_SUPPORT_PROBATION
|
#ifdef RTP_SUPPORT_PROBATION
|
||||||
u_int16_t prevseqnr;
|
uint16_t prevseqnr;
|
||||||
int probation;
|
int probation;
|
||||||
RTPSources::ProbationType probationtype;
|
RTPSources::ProbationType probationtype;
|
||||||
#endif // RTP_SUPPORT_PROBATION
|
#endif // RTP_SUPPORT_PROBATION
|
||||||
@ -158,13 +158,13 @@ inline RTPSourceStats::RTPSourceStats():prevpacktime(0,0),lastmsgtime(0,0),lastr
|
|||||||
class RTPSourceData
|
class RTPSourceData
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
RTPSourceData(u_int32_t ssrc);
|
RTPSourceData(uint32_t ssrc);
|
||||||
virtual ~RTPSourceData();
|
virtual ~RTPSourceData();
|
||||||
public:
|
public:
|
||||||
RTPPacket *GetNextPacket();
|
RTPPacket *GetNextPacket();
|
||||||
void FlushPackets();
|
void FlushPackets();
|
||||||
bool HasData() const { if (!validated) return false; return packetlist.empty()?false:true; }
|
bool HasData() const { if (!validated) return false; return packetlist.empty()?false:true; }
|
||||||
u_int32_t GetSSRC() const { return ssrc; }
|
uint32_t GetSSRC() const { return ssrc; }
|
||||||
bool IsOwnSSRC() const { return ownssrc; }
|
bool IsOwnSSRC() const { return ownssrc; }
|
||||||
bool IsCSRC() const { return iscsrc; }
|
bool IsCSRC() const { return iscsrc; }
|
||||||
bool IsSender() const { return issender; }
|
bool IsSender() const { return issender; }
|
||||||
@ -180,7 +180,7 @@ public:
|
|||||||
const RTPAddress *GetRTCPDataAddress() const { return rtcpaddr; }
|
const RTPAddress *GetRTCPDataAddress() const { return rtcpaddr; }
|
||||||
|
|
||||||
bool ReceivedBYE() const { return receivedbye; }
|
bool ReceivedBYE() const { return receivedbye; }
|
||||||
u_int8_t *GetBYEReason(size_t *len) const { *len = byereasonlen; return byereason; }
|
uint8_t *GetBYEReason(size_t *len) const { *len = byereasonlen; return byereason; }
|
||||||
RTPTime GetBYETime() const { return byetime; }
|
RTPTime GetBYETime() const { return byetime; }
|
||||||
|
|
||||||
void SetTimestampUnit(double tsu) { timestampunit = tsu; }
|
void SetTimestampUnit(double tsu) { timestampunit = tsu; }
|
||||||
@ -189,66 +189,66 @@ public:
|
|||||||
// Here is the info received in the last RTCP SR packet from this source
|
// Here is the info received in the last RTCP SR packet from this source
|
||||||
bool SR_HasInfo() const { return SRinf.HasInfo(); }
|
bool SR_HasInfo() const { return SRinf.HasInfo(); }
|
||||||
RTPNTPTime SR_GetNTPTimestamp() const { return SRinf.GetNTPTimestamp(); }
|
RTPNTPTime SR_GetNTPTimestamp() const { return SRinf.GetNTPTimestamp(); }
|
||||||
u_int32_t SR_GetRTPTimestamp() const { return SRinf.GetRTPTimestamp(); }
|
uint32_t SR_GetRTPTimestamp() const { return SRinf.GetRTPTimestamp(); }
|
||||||
u_int32_t SR_GetPacketCount() const { return SRinf.GetPacketCount(); }
|
uint32_t SR_GetPacketCount() const { return SRinf.GetPacketCount(); }
|
||||||
u_int32_t SR_GetByteCount() const { return SRinf.GetByteCount(); }
|
uint32_t SR_GetByteCount() const { return SRinf.GetByteCount(); }
|
||||||
RTPTime SR_GetReceiveTime() const { return SRinf.GetReceiveTime(); }
|
RTPTime SR_GetReceiveTime() const { return SRinf.GetReceiveTime(); }
|
||||||
|
|
||||||
// Here is the info received in the previous RTCP SR packet from this source
|
// Here is the info received in the previous RTCP SR packet from this source
|
||||||
bool SR_Prev_HasInfo() const { return SRprevinf.HasInfo(); }
|
bool SR_Prev_HasInfo() const { return SRprevinf.HasInfo(); }
|
||||||
RTPNTPTime SR_Prev_GetNTPTimestamp() const { return SRprevinf.GetNTPTimestamp(); }
|
RTPNTPTime SR_Prev_GetNTPTimestamp() const { return SRprevinf.GetNTPTimestamp(); }
|
||||||
u_int32_t SR_Prev_GetRTPTimestamp() const { return SRprevinf.GetRTPTimestamp(); }
|
uint32_t SR_Prev_GetRTPTimestamp() const { return SRprevinf.GetRTPTimestamp(); }
|
||||||
u_int32_t SR_Prev_GetPacketCount() const { return SRprevinf.GetPacketCount(); }
|
uint32_t SR_Prev_GetPacketCount() const { return SRprevinf.GetPacketCount(); }
|
||||||
u_int32_t SR_Prev_GetByteCount() const { return SRprevinf.GetByteCount(); }
|
uint32_t SR_Prev_GetByteCount() const { return SRprevinf.GetByteCount(); }
|
||||||
RTPTime SR_Prev_GetReceiveTime() const { return SRprevinf.GetReceiveTime(); }
|
RTPTime SR_Prev_GetReceiveTime() const { return SRprevinf.GetReceiveTime(); }
|
||||||
|
|
||||||
// Here is the info received in the last RTCP RR packet from this source
|
// Here is the info received in the last RTCP RR packet from this source
|
||||||
bool RR_HasInfo() const { return RRinf.HasInfo(); }
|
bool RR_HasInfo() const { return RRinf.HasInfo(); }
|
||||||
double RR_GetFractionLost() const { return RRinf.GetFractionLost(); }
|
double RR_GetFractionLost() const { return RRinf.GetFractionLost(); }
|
||||||
int32_t RR_GetPacketsLost() const { return RRinf.GetPacketsLost(); }
|
int32_t RR_GetPacketsLost() const { return RRinf.GetPacketsLost(); }
|
||||||
u_int32_t RR_GetExtendedHighestSequenceNumber() const { return RRinf.GetExtendedHighestSequenceNumber(); }
|
uint32_t RR_GetExtendedHighestSequenceNumber() const { return RRinf.GetExtendedHighestSequenceNumber(); }
|
||||||
u_int32_t RR_GetJitter() const { return RRinf.GetJitter(); }
|
uint32_t RR_GetJitter() const { return RRinf.GetJitter(); }
|
||||||
u_int32_t RR_GetLastSRTimestamp() const { return RRinf.GetLastSRTimestamp(); }
|
uint32_t RR_GetLastSRTimestamp() const { return RRinf.GetLastSRTimestamp(); }
|
||||||
u_int32_t RR_GetDelaySinceLastSR() const { return RRinf.GetDelaySinceLastSR(); }
|
uint32_t RR_GetDelaySinceLastSR() const { return RRinf.GetDelaySinceLastSR(); }
|
||||||
RTPTime RR_GetReceiveTime() const { return RRinf.GetReceiveTime(); }
|
RTPTime RR_GetReceiveTime() const { return RRinf.GetReceiveTime(); }
|
||||||
|
|
||||||
// Here is the info received in the last RTCP RR packet from this source
|
// Here is the info received in the last RTCP RR packet from this source
|
||||||
bool RR_Prev_HasInfo() const { return RRprevinf.HasInfo(); }
|
bool RR_Prev_HasInfo() const { return RRprevinf.HasInfo(); }
|
||||||
double RR_Prev_GetFractionLost() const { return RRprevinf.GetFractionLost(); }
|
double RR_Prev_GetFractionLost() const { return RRprevinf.GetFractionLost(); }
|
||||||
int32_t RR_Prev_GetPacketsLost() const { return RRprevinf.GetPacketsLost(); }
|
int32_t RR_Prev_GetPacketsLost() const { return RRprevinf.GetPacketsLost(); }
|
||||||
u_int32_t RR_Prev_GetExtendedHighestSequenceNumber() const { return RRprevinf.GetExtendedHighestSequenceNumber(); }
|
uint32_t RR_Prev_GetExtendedHighestSequenceNumber() const { return RRprevinf.GetExtendedHighestSequenceNumber(); }
|
||||||
u_int32_t RR_Prev_GetJitter() const { return RRprevinf.GetJitter(); }
|
uint32_t RR_Prev_GetJitter() const { return RRprevinf.GetJitter(); }
|
||||||
u_int32_t RR_Prev_GetLastSRTimestamp() const { return RRprevinf.GetLastSRTimestamp(); }
|
uint32_t RR_Prev_GetLastSRTimestamp() const { return RRprevinf.GetLastSRTimestamp(); }
|
||||||
u_int32_t RR_Prev_GetDelaySinceLastSR() const { return RRprevinf.GetDelaySinceLastSR(); }
|
uint32_t RR_Prev_GetDelaySinceLastSR() const { return RRprevinf.GetDelaySinceLastSR(); }
|
||||||
RTPTime RR_Prev_GetReceiveTime() const { return RRprevinf.GetReceiveTime(); }
|
RTPTime RR_Prev_GetReceiveTime() const { return RRprevinf.GetReceiveTime(); }
|
||||||
|
|
||||||
// Here is info which is used when sending RTCP packets to this source
|
// Here is info which is used when sending RTCP packets to this source
|
||||||
bool INF_HasSentData() const { return stats.HasSentData(); }
|
bool INF_HasSentData() const { return stats.HasSentData(); }
|
||||||
int32_t INF_GetNumPacketsReceived() const { return stats.GetNumPacketsReceived(); }
|
int32_t INF_GetNumPacketsReceived() const { return stats.GetNumPacketsReceived(); }
|
||||||
u_int32_t INF_GetBaseSequenceNumber() const { return stats.GetBaseSequenceNumber(); }
|
uint32_t INF_GetBaseSequenceNumber() const { return stats.GetBaseSequenceNumber(); }
|
||||||
u_int32_t INF_GetExtendedHighestSequenceNumber() const { return stats.GetExtendedHighestSequenceNumber(); }
|
uint32_t INF_GetExtendedHighestSequenceNumber() const { return stats.GetExtendedHighestSequenceNumber(); }
|
||||||
u_int32_t INF_GetJitter() const { return stats.GetJitter(); }
|
uint32_t INF_GetJitter() const { return stats.GetJitter(); }
|
||||||
RTPTime INF_GetLastMessageTime() const { return stats.GetLastMessageTime(); }
|
RTPTime INF_GetLastMessageTime() const { return stats.GetLastMessageTime(); }
|
||||||
RTPTime INF_GetLastRTPPacketTime() const { return stats.GetLastRTPPacketTime(); }
|
RTPTime INF_GetLastRTPPacketTime() const { return stats.GetLastRTPPacketTime(); }
|
||||||
double INF_GetEstimatedTimestampUnit() const;
|
double INF_GetEstimatedTimestampUnit() const;
|
||||||
u_int32_t INF_GetNumPacketsReceivedInInterval() const { return stats.GetNumPacketsReceivedInInterval(); }
|
uint32_t INF_GetNumPacketsReceivedInInterval() const { return stats.GetNumPacketsReceivedInInterval(); }
|
||||||
u_int32_t INF_GetSavedExtendedSequenceNumber() const { return stats.GetSavedExtendedSequenceNumber(); }
|
uint32_t INF_GetSavedExtendedSequenceNumber() const { return stats.GetSavedExtendedSequenceNumber(); }
|
||||||
void INF_StartNewInterval() { stats.StartNewInterval(); }
|
void INF_StartNewInterval() { stats.StartNewInterval(); }
|
||||||
RTPTime INF_GetRoundtripTime() const;
|
RTPTime INF_GetRoundtripTime() const;
|
||||||
RTPTime INF_GetLastSDESNoteTime() const { return stats.GetLastNoteTime(); }
|
RTPTime INF_GetLastSDESNoteTime() const { return stats.GetLastNoteTime(); }
|
||||||
|
|
||||||
u_int8_t *SDES_GetCNAME(size_t *len) const { return SDESinf.GetCNAME(len); }
|
uint8_t *SDES_GetCNAME(size_t *len) const { return SDESinf.GetCNAME(len); }
|
||||||
u_int8_t *SDES_GetName(size_t *len) const { return SDESinf.GetName(len); }
|
uint8_t *SDES_GetName(size_t *len) const { return SDESinf.GetName(len); }
|
||||||
u_int8_t *SDES_GetEMail(size_t *len) const { return SDESinf.GetEMail(len); }
|
uint8_t *SDES_GetEMail(size_t *len) const { return SDESinf.GetEMail(len); }
|
||||||
u_int8_t *SDES_GetPhone(size_t *len) const { return SDESinf.GetPhone(len); }
|
uint8_t *SDES_GetPhone(size_t *len) const { return SDESinf.GetPhone(len); }
|
||||||
u_int8_t *SDES_GetLocation(size_t *len) const { return SDESinf.GetLocation(len); }
|
uint8_t *SDES_GetLocation(size_t *len) const { return SDESinf.GetLocation(len); }
|
||||||
u_int8_t *SDES_GetTool(size_t *len) const { return SDESinf.GetTool(len); }
|
uint8_t *SDES_GetTool(size_t *len) const { return SDESinf.GetTool(len); }
|
||||||
u_int8_t *SDES_GetNote(size_t *len) const { return SDESinf.GetNote(len); }
|
uint8_t *SDES_GetNote(size_t *len) const { return SDESinf.GetNote(len); }
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
void SDES_GotoFirstPrivateValue() { SDESinf.GotoFirstPrivateValue(); }
|
void SDES_GotoFirstPrivateValue() { SDESinf.GotoFirstPrivateValue(); }
|
||||||
bool SDES_GetNextPrivateValue(u_int8_t **prefix,size_t *prefixlen,u_int8_t **value,size_t *valuelen) { return SDESinf.GetNextPrivateValue(prefix,prefixlen,value,valuelen); }
|
bool SDES_GetNextPrivateValue(uint8_t **prefix,size_t *prefixlen,uint8_t **value,size_t *valuelen) { return SDESinf.GetNextPrivateValue(prefix,prefixlen,value,valuelen); }
|
||||||
bool SDES_GetPrivateValue(u_int8_t *prefix,size_t prefixlen,u_int8_t **value,size_t *valuelen) const { return SDESinf.GetPrivateValue(prefix,prefixlen,value,valuelen); }
|
bool SDES_GetPrivateValue(uint8_t *prefix,size_t prefixlen,uint8_t **value,size_t *valuelen) const { return SDESinf.GetPrivateValue(prefix,prefixlen,value,valuelen); }
|
||||||
#endif // RTP_SUPPORT_SDESPRIV
|
#endif // RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
@ -257,7 +257,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
std::list<RTPPacket *> packetlist;
|
std::list<RTPPacket *> packetlist;
|
||||||
|
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
bool ownssrc;
|
bool ownssrc;
|
||||||
bool iscsrc;
|
bool iscsrc;
|
||||||
double timestampunit;
|
double timestampunit;
|
||||||
@ -275,7 +275,7 @@ protected:
|
|||||||
RTPAddress *rtpaddr,*rtcpaddr;
|
RTPAddress *rtpaddr,*rtcpaddr;
|
||||||
|
|
||||||
RTPTime byetime;
|
RTPTime byetime;
|
||||||
u_int8_t *byereason;
|
uint8_t *byereason;
|
||||||
size_t byereasonlen;
|
size_t byereasonlen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -52,7 +52,7 @@
|
|||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
int RTPSources_GetHashIndex(const u_int32_t &ssrc) { return ssrc%RTPSOURCES_HASHSIZE; }
|
int RTPSources_GetHashIndex(const uint32_t &ssrc) { return ssrc%RTPSOURCES_HASHSIZE; }
|
||||||
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
|
|
||||||
RTPSources::RTPSources(ProbationType probtype)
|
RTPSources::RTPSources(ProbationType probtype)
|
||||||
@ -89,9 +89,12 @@ void RTPSources::ClearSourceList()
|
|||||||
}
|
}
|
||||||
sourcelist.Clear();
|
sourcelist.Clear();
|
||||||
owndata = 0;
|
owndata = 0;
|
||||||
|
totalcount = 0;
|
||||||
|
sendercount = 0;
|
||||||
|
activecount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::CreateOwnSSRC(u_int32_t ssrc)
|
int RTPSources::CreateOwnSSRC(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
if (owndata != 0)
|
if (owndata != 0)
|
||||||
return ERR_RTP_SOURCES_ALREADYHAVEOWNSSRC;
|
return ERR_RTP_SOURCES_ALREADYHAVEOWNSSRC;
|
||||||
@ -123,7 +126,7 @@ int RTPSources::DeleteOwnSSRC()
|
|||||||
if (owndata == 0)
|
if (owndata == 0)
|
||||||
return ERR_RTP_SOURCES_DONTHAVEOWNSSRC;
|
return ERR_RTP_SOURCES_DONTHAVEOWNSSRC;
|
||||||
|
|
||||||
u_int32_t ssrc = owndata->GetSSRC();
|
uint32_t ssrc = owndata->GetSSRC();
|
||||||
|
|
||||||
sourcelist.GotoElement(ssrc);
|
sourcelist.GotoElement(ssrc);
|
||||||
sourcelist.DeleteCurrentElement();
|
sourcelist.DeleteCurrentElement();
|
||||||
@ -286,7 +289,7 @@ int RTPSources::ProcessRawPacket(RTPRawPacket *rawpack,RTPTransmitter *rtptrans[
|
|||||||
|
|
||||||
int RTPSources::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,const RTPAddress *senderaddress,bool *stored)
|
int RTPSources::ProcessRTPPacket(RTPPacket *rtppack,const RTPTime &receivetime,const RTPAddress *senderaddress,bool *stored)
|
||||||
{
|
{
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
int status;
|
int status;
|
||||||
bool created;
|
bool created;
|
||||||
@ -362,7 +365,7 @@ int RTPSources::ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const
|
|||||||
RTCPPacket *rtcppack;
|
RTCPPacket *rtcppack;
|
||||||
int status;
|
int status;
|
||||||
bool gotownssrc = ((owndata == 0)?false:true);
|
bool gotownssrc = ((owndata == 0)?false:true);
|
||||||
u_int32_t ownssrc = ((owndata != 0)?owndata->GetSSRC():0);
|
uint32_t ownssrc = ((owndata != 0)?owndata->GetSSRC():0);
|
||||||
|
|
||||||
OnRTCPCompoundPacket(rtcpcomppack,receivetime,senderaddress);
|
OnRTCPCompoundPacket(rtcpcomppack,receivetime,senderaddress);
|
||||||
|
|
||||||
@ -376,7 +379,7 @@ int RTPSources::ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const
|
|||||||
case RTCPPacket::SR:
|
case RTCPPacket::SR:
|
||||||
{
|
{
|
||||||
RTCPSRPacket *p = (RTCPSRPacket *)rtcppack;
|
RTCPSRPacket *p = (RTCPSRPacket *)rtcppack;
|
||||||
u_int32_t senderssrc = p->GetSenderSSRC();
|
uint32_t senderssrc = p->GetSenderSSRC();
|
||||||
|
|
||||||
status = ProcessRTCPSenderInfo(senderssrc,p->GetNTPTimestamp(),p->GetRTPTimestamp(),
|
status = ProcessRTCPSenderInfo(senderssrc,p->GetNTPTimestamp(),p->GetRTPTimestamp(),
|
||||||
p->GetSenderPacketCount(),p->GetSenderOctetCount(),
|
p->GetSenderPacketCount(),p->GetSenderOctetCount(),
|
||||||
@ -413,7 +416,7 @@ int RTPSources::ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const
|
|||||||
case RTCPPacket::RR:
|
case RTCPPacket::RR:
|
||||||
{
|
{
|
||||||
RTCPRRPacket *p = (RTCPRRPacket *)rtcppack;
|
RTCPRRPacket *p = (RTCPRRPacket *)rtcppack;
|
||||||
u_int32_t senderssrc = p->GetSenderSSRC();
|
uint32_t senderssrc = p->GetSenderSSRC();
|
||||||
|
|
||||||
bool gotinfo = false;
|
bool gotinfo = false;
|
||||||
|
|
||||||
@ -450,7 +453,7 @@ int RTPSources::ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const
|
|||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
u_int32_t sdesssrc = p->GetChunkSSRC();
|
uint32_t sdesssrc = p->GetChunkSSRC();
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
if (p->GotoFirstItem())
|
if (p->GotoFirstItem())
|
||||||
{
|
{
|
||||||
@ -495,7 +498,7 @@ int RTPSources::ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const
|
|||||||
|
|
||||||
for (i = 0 ; i < num ; i++)
|
for (i = 0 ; i < num ; i++)
|
||||||
{
|
{
|
||||||
u_int32_t byessrc = p->GetSSRC(i);
|
uint32_t byessrc = p->GetSSRC(i);
|
||||||
status = ProcessBYE(byessrc,p->GetReasonLength(),p->GetReasonData(),receivetime,senderaddress);
|
status = ProcessBYE(byessrc,p->GetReasonLength(),p->GetReasonData(),receivetime,senderaddress);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return status;
|
return status;
|
||||||
@ -614,7 +617,7 @@ RTPSourceData *RTPSources::GetCurrentSourceInfo()
|
|||||||
return sourcelist.GetCurrentElement();
|
return sourcelist.GetCurrentElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPSourceData *RTPSources::GetSourceInfo(u_int32_t ssrc)
|
RTPSourceData *RTPSources::GetSourceInfo(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
if (sourcelist.GotoElement(ssrc) < 0)
|
if (sourcelist.GotoElement(ssrc) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -623,7 +626,7 @@ RTPSourceData *RTPSources::GetSourceInfo(u_int32_t ssrc)
|
|||||||
return sourcelist.GetCurrentElement();
|
return sourcelist.GetCurrentElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTPSources::GotEntry(u_int32_t ssrc)
|
bool RTPSources::GotEntry(uint32_t ssrc)
|
||||||
{
|
{
|
||||||
return sourcelist.HasElement(ssrc);
|
return sourcelist.HasElement(ssrc);
|
||||||
}
|
}
|
||||||
@ -638,8 +641,8 @@ RTPPacket *RTPSources::GetNextPacket()
|
|||||||
return pack;
|
return pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::ProcessRTCPSenderInfo(u_int32_t ssrc,const RTPNTPTime &ntptime,u_int32_t rtptime,
|
int RTPSources::ProcessRTCPSenderInfo(uint32_t ssrc,const RTPNTPTime &ntptime,uint32_t rtptime,
|
||||||
u_int32_t packetcount,u_int32_t octetcount,const RTPTime &receivetime,
|
uint32_t packetcount,uint32_t octetcount,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress)
|
const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
@ -661,9 +664,9 @@ int RTPSources::ProcessRTCPSenderInfo(u_int32_t ssrc,const RTPNTPTime &ntptime,u
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::ProcessRTCPReportBlock(u_int32_t ssrc,u_int8_t fractionlost,int32_t lostpackets,
|
int RTPSources::ProcessRTCPReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t lostpackets,
|
||||||
u_int32_t exthighseqnr,u_int32_t jitter,u_int32_t lsr,
|
uint32_t exthighseqnr,uint32_t jitter,uint32_t lsr,
|
||||||
u_int32_t dlsr,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
uint32_t dlsr,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
bool created;
|
bool created;
|
||||||
@ -684,13 +687,13 @@ int RTPSources::ProcessRTCPReportBlock(u_int32_t ssrc,u_int8_t fractionlost,int3
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::ProcessSDESNormalItem(u_int32_t ssrc,RTCPSDESPacket::ItemType t,size_t itemlength,
|
int RTPSources::ProcessSDESNormalItem(uint32_t ssrc,RTCPSDESPacket::ItemType t,size_t itemlength,
|
||||||
const void *itemdata,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
const void *itemdata,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
bool created,cnamecollis;
|
bool created,cnamecollis;
|
||||||
int status;
|
int status;
|
||||||
u_int8_t id;
|
uint8_t id;
|
||||||
bool prevactive;
|
bool prevactive;
|
||||||
|
|
||||||
switch(t)
|
switch(t)
|
||||||
@ -727,7 +730,7 @@ int RTPSources::ProcessSDESNormalItem(u_int32_t ssrc,RTCPSDESPacket::ItemType t,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
prevactive = srcdat->IsActive();
|
prevactive = srcdat->IsActive();
|
||||||
status = srcdat->ProcessSDESItem(id,(const u_int8_t *)itemdata,itemlength,receivetime,&cnamecollis);
|
status = srcdat->ProcessSDESItem(id,(const uint8_t *)itemdata,itemlength,receivetime,&cnamecollis);
|
||||||
if (!prevactive && srcdat->IsActive())
|
if (!prevactive && srcdat->IsActive())
|
||||||
activecount++;
|
activecount++;
|
||||||
|
|
||||||
@ -735,13 +738,13 @@ int RTPSources::ProcessSDESNormalItem(u_int32_t ssrc,RTCPSDESPacket::ItemType t,
|
|||||||
if (created)
|
if (created)
|
||||||
OnNewSource(srcdat);
|
OnNewSource(srcdat);
|
||||||
if (cnamecollis)
|
if (cnamecollis)
|
||||||
OnCNAMECollision(srcdat,senderaddress,(const u_int8_t *)itemdata,itemlength);
|
OnCNAMECollision(srcdat,senderaddress,(const uint8_t *)itemdata,itemlength);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int RTPSources::ProcessSDESPrivateItem(u_int32_t ssrc,size_t prefixlen,const void *prefixdata,
|
int RTPSources::ProcessSDESPrivateItem(uint32_t ssrc,size_t prefixlen,const void *prefixdata,
|
||||||
size_t valuelen,const void *valuedata,const RTPTime &receivetime,
|
size_t valuelen,const void *valuedata,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress)
|
const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
@ -755,7 +758,7 @@ int RTPSources::ProcessSDESPrivateItem(u_int32_t ssrc,size_t prefixlen,const voi
|
|||||||
if (srcdat == 0)
|
if (srcdat == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
status = srcdat->ProcessPrivateSDESItem((const u_int8_t *)prefixdata,prefixlen,(const u_int8_t *)valuedata,valuelen,receivetime);
|
status = srcdat->ProcessPrivateSDESItem((const uint8_t *)prefixdata,prefixlen,(const uint8_t *)valuedata,valuelen,receivetime);
|
||||||
// Call the callback
|
// Call the callback
|
||||||
if (created)
|
if (created)
|
||||||
OnNewSource(srcdat);
|
OnNewSource(srcdat);
|
||||||
@ -763,7 +766,7 @@ int RTPSources::ProcessSDESPrivateItem(u_int32_t ssrc,size_t prefixlen,const voi
|
|||||||
}
|
}
|
||||||
#endif //RTP_SUPPORT_SDESPRIV
|
#endif //RTP_SUPPORT_SDESPRIV
|
||||||
|
|
||||||
int RTPSources::ProcessBYE(u_int32_t ssrc,size_t reasonlength,const void *reasondata,
|
int RTPSources::ProcessBYE(uint32_t ssrc,size_t reasonlength,const void *reasondata,
|
||||||
const RTPTime &receivetime,const RTPAddress *senderaddress)
|
const RTPTime &receivetime,const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
@ -782,7 +785,7 @@ int RTPSources::ProcessBYE(u_int32_t ssrc,size_t reasonlength,const void *reason
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
prevactive = srcdat->IsActive();
|
prevactive = srcdat->IsActive();
|
||||||
srcdat->ProcessBYEPacket((const u_int8_t *)reasondata,reasonlength,receivetime);
|
srcdat->ProcessBYEPacket((const uint8_t *)reasondata,reasonlength,receivetime);
|
||||||
if (prevactive && !srcdat->IsActive())
|
if (prevactive && !srcdat->IsActive())
|
||||||
activecount--;
|
activecount--;
|
||||||
|
|
||||||
@ -793,7 +796,7 @@ int RTPSources::ProcessBYE(u_int32_t ssrc,size_t reasonlength,const void *reason
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::ObtainSourceDataInstance(u_int32_t ssrc,RTPInternalSourceData **srcdat,bool *created)
|
int RTPSources::ObtainSourceDataInstance(uint32_t ssrc,RTPInternalSourceData **srcdat,bool *created)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat2;
|
RTPInternalSourceData *srcdat2;
|
||||||
int status;
|
int status;
|
||||||
@ -825,7 +828,7 @@ int RTPSources::ObtainSourceDataInstance(u_int32_t ssrc,RTPInternalSourceData **
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int RTPSources::GetRTCPSourceData(u_int32_t ssrc,const RTPAddress *senderaddress,
|
int RTPSources::GetRTCPSourceData(uint32_t ssrc,const RTPAddress *senderaddress,
|
||||||
RTPInternalSourceData **srcdat2,bool *newsource)
|
RTPInternalSourceData **srcdat2,bool *newsource)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
@ -854,7 +857,7 @@ int RTPSources::GetRTCPSourceData(u_int32_t ssrc,const RTPAddress *senderaddress
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPSources::UpdateReceiveTime(u_int32_t ssrc,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
int RTPSources::UpdateReceiveTime(uint32_t ssrc,const RTPTime &receivetime,const RTPAddress *senderaddress)
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat;
|
RTPInternalSourceData *srcdat;
|
||||||
bool created;
|
bool created;
|
||||||
@ -1080,7 +1083,7 @@ void RTPSources::NoteTimeout(const RTPTime &curtime,const RTPTime &timeoutdelay)
|
|||||||
while (sourcelist.HasCurrentElement())
|
while (sourcelist.HasCurrentElement())
|
||||||
{
|
{
|
||||||
RTPInternalSourceData *srcdat = sourcelist.GetCurrentElement();
|
RTPInternalSourceData *srcdat = sourcelist.GetCurrentElement();
|
||||||
u_int8_t *note;
|
uint8_t *note;
|
||||||
size_t notelen;
|
size_t notelen;
|
||||||
|
|
||||||
note = srcdat->SDES_GetNote(¬elen);
|
note = srcdat->SDES_GetNote(¬elen);
|
||||||
@ -1147,7 +1150,7 @@ void RTPSources::MultipleTimeouts(const RTPTime &curtime,const RTPTime &senderti
|
|||||||
RTPInternalSourceData *srcdat = sourcelist.GetCurrentElement();
|
RTPInternalSourceData *srcdat = sourcelist.GetCurrentElement();
|
||||||
bool deleted,issender,isactive;
|
bool deleted,issender,isactive;
|
||||||
bool byetimeout,normaltimeout,notetimeout;
|
bool byetimeout,normaltimeout,notetimeout;
|
||||||
u_int8_t *note;
|
uint8_t *note;
|
||||||
size_t notelen;
|
size_t notelen;
|
||||||
|
|
||||||
issender = srcdat->IsSender();
|
issender = srcdat->IsSender();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -42,9 +42,9 @@
|
|||||||
#define RTPSOURCES_HASHSIZE 8317
|
#define RTPSOURCES_HASHSIZE 8317
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
inline int RTPSources_GetHashIndex(const u_int32_t &ssrc) { return ssrc%RTPSOURCES_HASHSIZE; }
|
inline int RTPSources_GetHashIndex(const uint32_t &ssrc) { return ssrc%RTPSOURCES_HASHSIZE; }
|
||||||
#else // can't use inline function as template parameter
|
#else // can't use inline function as template parameter
|
||||||
int RTPSources_GetHashIndex(const u_int32_t &ssrc);
|
int RTPSources_GetHashIndex(const uint32_t &ssrc);
|
||||||
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
|
|
||||||
class RTPNTPTime;
|
class RTPNTPTime;
|
||||||
@ -69,7 +69,7 @@ public:
|
|||||||
void SetProbationType(ProbationType probtype) { probationtype = probtype; }
|
void SetProbationType(ProbationType probtype) { probationtype = probtype; }
|
||||||
#endif // RTP_SUPPORT_PROBATION
|
#endif // RTP_SUPPORT_PROBATION
|
||||||
|
|
||||||
int CreateOwnSSRC(u_int32_t ssrc);
|
int CreateOwnSSRC(uint32_t ssrc);
|
||||||
int DeleteOwnSSRC();
|
int DeleteOwnSSRC();
|
||||||
void SentRTPPacket();
|
void SentRTPPacket();
|
||||||
|
|
||||||
@ -81,26 +81,26 @@ public:
|
|||||||
int ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const RTPTime &receivetime,
|
int ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress);
|
const RTPAddress *senderaddress);
|
||||||
|
|
||||||
int ProcessRTCPSenderInfo(u_int32_t ssrc,const RTPNTPTime &ntptime,u_int32_t rtptime,
|
int ProcessRTCPSenderInfo(uint32_t ssrc,const RTPNTPTime &ntptime,uint32_t rtptime,
|
||||||
u_int32_t packetcount,u_int32_t octetcount,const RTPTime &receivetime,
|
uint32_t packetcount,uint32_t octetcount,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress);
|
const RTPAddress *senderaddress);
|
||||||
int ProcessRTCPReportBlock(u_int32_t ssrc,u_int8_t fractionlost,int32_t lostpackets,
|
int ProcessRTCPReportBlock(uint32_t ssrc,uint8_t fractionlost,int32_t lostpackets,
|
||||||
u_int32_t exthighseqnr,u_int32_t jitter,u_int32_t lsr,
|
uint32_t exthighseqnr,uint32_t jitter,uint32_t lsr,
|
||||||
u_int32_t dlsr,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
uint32_t dlsr,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
||||||
int ProcessSDESNormalItem(u_int32_t ssrc,RTCPSDESPacket::ItemType t,size_t itemlength,
|
int ProcessSDESNormalItem(uint32_t ssrc,RTCPSDESPacket::ItemType t,size_t itemlength,
|
||||||
const void *itemdata,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
const void *itemdata,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
||||||
#ifdef RTP_SUPPORT_SDESPRIV
|
#ifdef RTP_SUPPORT_SDESPRIV
|
||||||
int ProcessSDESPrivateItem(u_int32_t ssrc,size_t prefixlen,const void *prefixdata,
|
int ProcessSDESPrivateItem(uint32_t ssrc,size_t prefixlen,const void *prefixdata,
|
||||||
size_t valuelen,const void *valuedata,const RTPTime &receivetime,
|
size_t valuelen,const void *valuedata,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress);
|
const RTPAddress *senderaddress);
|
||||||
#endif //RTP_SUPPORT_SDESPRIV
|
#endif //RTP_SUPPORT_SDESPRIV
|
||||||
int ProcessBYE(u_int32_t ssrc,size_t reasonlength,const void *reasondata,const RTPTime &receivetime,
|
int ProcessBYE(uint32_t ssrc,size_t reasonlength,const void *reasondata,const RTPTime &receivetime,
|
||||||
const RTPAddress *senderaddress);
|
const RTPAddress *senderaddress);
|
||||||
|
|
||||||
// If no specific info was sent to us, but we did receive a packet from a SSRC, the following
|
// If no specific info was sent to us, but we did receive a packet from a SSRC, the following
|
||||||
// function can be used to update the time at which we last heard something from the SSRC.
|
// function can be used to update the time at which we last heard something from the SSRC.
|
||||||
// This way, premature timeouts can be avoided.
|
// This way, premature timeouts can be avoided.
|
||||||
int UpdateReceiveTime(u_int32_t ssrc,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
int UpdateReceiveTime(uint32_t ssrc,const RTPTime &receivetime,const RTPAddress *senderaddress);
|
||||||
|
|
||||||
bool GotoFirstSource();
|
bool GotoFirstSource();
|
||||||
bool GotoNextSource();
|
bool GotoNextSource();
|
||||||
@ -109,9 +109,9 @@ public:
|
|||||||
bool GotoNextSourceWithData();
|
bool GotoNextSourceWithData();
|
||||||
bool GotoPreviousSourceWithData();
|
bool GotoPreviousSourceWithData();
|
||||||
RTPSourceData *GetCurrentSourceInfo();
|
RTPSourceData *GetCurrentSourceInfo();
|
||||||
RTPSourceData *GetSourceInfo(u_int32_t ssrc);
|
RTPSourceData *GetSourceInfo(uint32_t ssrc);
|
||||||
RTPPacket *GetNextPacket();
|
RTPPacket *GetNextPacket();
|
||||||
bool GotEntry(u_int32_t ssrc);
|
bool GotEntry(uint32_t ssrc);
|
||||||
RTPSourceData *GetOwnSourceInfo() { return (RTPSourceData *)owndata; }
|
RTPSourceData *GetOwnSourceInfo() { return (RTPSourceData *)owndata; }
|
||||||
|
|
||||||
void Timeout(const RTPTime &curtime,const RTPTime &timeoutdelay);
|
void Timeout(const RTPTime &curtime,const RTPTime &timeoutdelay);
|
||||||
@ -138,7 +138,7 @@ protected:
|
|||||||
const RTPAddress *senderaddress) { }
|
const RTPAddress *senderaddress) { }
|
||||||
virtual void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp) { }
|
virtual void OnSSRCCollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp) { }
|
||||||
virtual void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
virtual void OnCNAMECollision(RTPSourceData *srcdat,const RTPAddress *senderaddress,
|
||||||
const u_int8_t *cname,size_t cnamelength) { }
|
const uint8_t *cname,size_t cnamelength) { }
|
||||||
virtual void OnNewSource(RTPSourceData *srcdat) { }
|
virtual void OnNewSource(RTPSourceData *srcdat) { }
|
||||||
virtual void OnRemoveSource(RTPSourceData *srcdat) { }
|
virtual void OnRemoveSource(RTPSourceData *srcdat) { }
|
||||||
virtual void OnTimeout(RTPSourceData *srcdat) { }
|
virtual void OnTimeout(RTPSourceData *srcdat) { }
|
||||||
@ -153,11 +153,11 @@ protected:
|
|||||||
virtual void OnNoteTimeout(RTPSourceData *srcdat) { }
|
virtual void OnNoteTimeout(RTPSourceData *srcdat) { }
|
||||||
private:
|
private:
|
||||||
void ClearSourceList();
|
void ClearSourceList();
|
||||||
int ObtainSourceDataInstance(u_int32_t ssrc,RTPInternalSourceData **srcdat,bool *created);
|
int ObtainSourceDataInstance(uint32_t ssrc,RTPInternalSourceData **srcdat,bool *created);
|
||||||
int GetRTCPSourceData(u_int32_t ssrc,const RTPAddress *senderaddress,RTPInternalSourceData **srcdat,bool *newsource);
|
int GetRTCPSourceData(uint32_t ssrc,const RTPAddress *senderaddress,RTPInternalSourceData **srcdat,bool *newsource);
|
||||||
bool CheckCollision(RTPInternalSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp);
|
bool CheckCollision(RTPInternalSourceData *srcdat,const RTPAddress *senderaddress,bool isrtp);
|
||||||
|
|
||||||
RTPKeyHashTable<const u_int32_t,RTPInternalSourceData*,RTPSources_GetHashIndex,RTPSOURCES_HASHSIZE> sourcelist;
|
RTPKeyHashTable<const uint32_t,RTPInternalSourceData*,RTPSources_GetHashIndex,RTPSOURCES_HASHSIZE> sourcelist;
|
||||||
|
|
||||||
int sendercount;
|
int sendercount;
|
||||||
int totalcount;
|
int totalcount;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -40,79 +40,79 @@
|
|||||||
struct RTPHeader
|
struct RTPHeader
|
||||||
{
|
{
|
||||||
#ifdef RTP_BIG_ENDIAN
|
#ifdef RTP_BIG_ENDIAN
|
||||||
u_int8_t version:2;
|
uint8_t version:2;
|
||||||
u_int8_t padding:1;
|
uint8_t padding:1;
|
||||||
u_int8_t extension:1;
|
uint8_t extension:1;
|
||||||
u_int8_t csrccount:4;
|
uint8_t csrccount:4;
|
||||||
|
|
||||||
u_int8_t marker:1;
|
uint8_t marker:1;
|
||||||
u_int8_t payloadtype:7;
|
uint8_t payloadtype:7;
|
||||||
#else // little endian
|
#else // little endian
|
||||||
u_int8_t csrccount:4;
|
uint8_t csrccount:4;
|
||||||
u_int8_t extension:1;
|
uint8_t extension:1;
|
||||||
u_int8_t padding:1;
|
uint8_t padding:1;
|
||||||
u_int8_t version:2;
|
uint8_t version:2;
|
||||||
|
|
||||||
u_int8_t payloadtype:7;
|
uint8_t payloadtype:7;
|
||||||
u_int8_t marker:1;
|
uint8_t marker:1;
|
||||||
#endif // RTP_BIG_ENDIAN
|
#endif // RTP_BIG_ENDIAN
|
||||||
|
|
||||||
u_int16_t sequencenumber;
|
uint16_t sequencenumber;
|
||||||
u_int32_t timestamp;
|
uint32_t timestamp;
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTPExtensionHeader
|
struct RTPExtensionHeader
|
||||||
{
|
{
|
||||||
u_int16_t id;
|
uint16_t id;
|
||||||
u_int16_t length;
|
uint16_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTPSourceIdentifier
|
struct RTPSourceIdentifier
|
||||||
{
|
{
|
||||||
u_int32_t ssrc;
|
uint32_t ssrc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTCPCommonHeader
|
struct RTCPCommonHeader
|
||||||
{
|
{
|
||||||
#ifdef RTP_BIG_ENDIAN
|
#ifdef RTP_BIG_ENDIAN
|
||||||
u_int8_t version:2;
|
uint8_t version:2;
|
||||||
u_int8_t padding:1;
|
uint8_t padding:1;
|
||||||
u_int8_t count:5;
|
uint8_t count:5;
|
||||||
#else // little endian
|
#else // little endian
|
||||||
u_int8_t count:5;
|
uint8_t count:5;
|
||||||
u_int8_t padding:1;
|
uint8_t padding:1;
|
||||||
u_int8_t version:2;
|
uint8_t version:2;
|
||||||
#endif // RTP_BIG_ENDIAN
|
#endif // RTP_BIG_ENDIAN
|
||||||
|
|
||||||
u_int8_t packettype;
|
uint8_t packettype;
|
||||||
u_int16_t length;
|
uint16_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTCPSenderReport
|
struct RTCPSenderReport
|
||||||
{
|
{
|
||||||
u_int32_t ntptime_msw;
|
uint32_t ntptime_msw;
|
||||||
u_int32_t ntptime_lsw;
|
uint32_t ntptime_lsw;
|
||||||
u_int32_t rtptimestamp;
|
uint32_t rtptimestamp;
|
||||||
u_int32_t packetcount;
|
uint32_t packetcount;
|
||||||
u_int32_t octetcount;
|
uint32_t octetcount;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTCPReceiverReport
|
struct RTCPReceiverReport
|
||||||
{
|
{
|
||||||
u_int32_t ssrc; // Identifies about which SSRC's data this report is...
|
uint32_t ssrc; // Identifies about which SSRC's data this report is...
|
||||||
u_int8_t fractionlost;
|
uint8_t fractionlost;
|
||||||
u_int8_t packetslost[3];
|
uint8_t packetslost[3];
|
||||||
u_int32_t exthighseqnr;
|
uint32_t exthighseqnr;
|
||||||
u_int32_t jitter;
|
uint32_t jitter;
|
||||||
u_int32_t lsr;
|
uint32_t lsr;
|
||||||
u_int32_t dlsr;
|
uint32_t dlsr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RTCPSDESHeader
|
struct RTCPSDESHeader
|
||||||
{
|
{
|
||||||
u_int8_t id;
|
uint8_t id;
|
||||||
u_int8_t length;
|
uint8_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RTPSTRUCTS
|
#endif // RTPSTRUCTS
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -50,11 +50,11 @@
|
|||||||
class RTPNTPTime
|
class RTPNTPTime
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPNTPTime(u_int32_t m,u_int32_t l) { msw = m ; lsw = l; }
|
RTPNTPTime(uint32_t m,uint32_t l) { msw = m ; lsw = l; }
|
||||||
u_int32_t GetMSW() const { return msw; }
|
uint32_t GetMSW() const { return msw; }
|
||||||
u_int32_t GetLSW() const { return lsw; }
|
uint32_t GetLSW() const { return lsw; }
|
||||||
private:
|
private:
|
||||||
u_int32_t msw,lsw;
|
uint32_t msw,lsw;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RTPTime
|
class RTPTime
|
||||||
@ -65,9 +65,9 @@ public:
|
|||||||
|
|
||||||
RTPTime(double t);
|
RTPTime(double t);
|
||||||
RTPTime(RTPNTPTime ntptime);
|
RTPTime(RTPNTPTime ntptime);
|
||||||
RTPTime(u_int32_t seconds,u_int32_t microseconds) { sec = seconds; microsec = microseconds; }
|
RTPTime(uint32_t seconds,uint32_t microseconds) { sec = seconds; microsec = microseconds; }
|
||||||
u_int32_t GetSeconds() const { return sec; }
|
uint32_t GetSeconds() const { return sec; }
|
||||||
u_int32_t GetMicroSeconds() const { return microsec; }
|
uint32_t GetMicroSeconds() const { return microsec; }
|
||||||
double GetDouble() const { return (((double)sec)+(((double)microsec)/1000000.0)); }
|
double GetDouble() const { return (((double)sec)+(((double)microsec)/1000000.0)); }
|
||||||
RTPTime &operator-=(const RTPTime &t);
|
RTPTime &operator-=(const RTPTime &t);
|
||||||
RTPTime &operator+=(const RTPTime &t);
|
RTPTime &operator+=(const RTPTime &t);
|
||||||
@ -77,16 +77,16 @@ public:
|
|||||||
bool operator<=(const RTPTime &t) const;
|
bool operator<=(const RTPTime &t) const;
|
||||||
bool operator>=(const RTPTime &t) const;
|
bool operator>=(const RTPTime &t) const;
|
||||||
private:
|
private:
|
||||||
u_int32_t sec,microsec;
|
uint32_t sec,microsec;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline RTPTime::RTPTime(double t)
|
inline RTPTime::RTPTime(double t)
|
||||||
{
|
{
|
||||||
sec = (u_int32_t)t;
|
sec = (uint32_t)t;
|
||||||
|
|
||||||
double t2 = t-((double)sec);
|
double t2 = t-((double)sec);
|
||||||
t2 *= 1000000.0;
|
t2 *= 1000000.0;
|
||||||
microsec = (u_int32_t)t2;
|
microsec = (uint32_t)t2;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline RTPTime::RTPTime(RTPNTPTime ntptime)
|
inline RTPTime::RTPTime(RTPNTPTime ntptime)
|
||||||
@ -103,7 +103,7 @@ inline RTPTime::RTPTime(RTPNTPTime ntptime)
|
|||||||
double x = (double)ntptime.GetLSW();
|
double x = (double)ntptime.GetLSW();
|
||||||
x /= (65536.0*65536.0);
|
x /= (65536.0*65536.0);
|
||||||
x *= 1000000.0;
|
x *= 1000000.0;
|
||||||
microsec = (u_int32_t)x;
|
microsec = (uint32_t)x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ inline RTPTime RTPTime::CurrentTime()
|
|||||||
|
|
||||||
microdiff = emulate_microseconds - initmicroseconds;
|
microdiff = emulate_microseconds - initmicroseconds;
|
||||||
|
|
||||||
return RTPTime((u_int32_t)((microseconds + microdiff) / 1000000ui64),((u_int32_t)((microseconds + microdiff) % 1000000ui64)));
|
return RTPTime((uint32_t)((microseconds + microdiff) / 1000000ui64),((uint32_t)((microseconds + microdiff) % 1000000ui64)));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void RTPTime::Wait(const RTPTime &delay)
|
inline void RTPTime::Wait(const RTPTime &delay)
|
||||||
@ -164,7 +164,7 @@ inline RTPTime RTPTime::CurrentTime()
|
|||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
gettimeofday(&tv,0);
|
gettimeofday(&tv,0);
|
||||||
return RTPTime((u_int32_t)tv.tv_sec,(u_int32_t)tv.tv_usec);
|
return RTPTime((uint32_t)tv.tv_sec,(uint32_t)tv.tv_usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void RTPTime::Wait(const RTPTime &delay)
|
inline void RTPTime::Wait(const RTPTime &delay)
|
||||||
@ -204,13 +204,13 @@ inline RTPTime &RTPTime::operator+=(const RTPTime &t)
|
|||||||
|
|
||||||
inline RTPNTPTime RTPTime::GetNTPTime() const
|
inline RTPNTPTime RTPTime::GetNTPTime() const
|
||||||
{
|
{
|
||||||
u_int32_t msw = sec+RTP_NTPTIMEOFFSET;
|
uint32_t msw = sec+RTP_NTPTIMEOFFSET;
|
||||||
u_int32_t lsw;
|
uint32_t lsw;
|
||||||
double x;
|
double x;
|
||||||
|
|
||||||
x = microsec/1000000.0;
|
x = microsec/1000000.0;
|
||||||
x *= (65536.0*65536.0);
|
x *= (65536.0*65536.0);
|
||||||
lsw = (u_int32_t)x;
|
lsw = (uint32_t)x;
|
||||||
|
|
||||||
return RTPNTPTime(msw,lsw);
|
return RTPNTPTime(msw,lsw);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ class RTPTransmissionInfo;
|
|||||||
class RTPTransmitter
|
class RTPTransmitter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum TransmissionProtocol { IPv4UDPProto, IPv6UDPProto, IPv4GSTProto, UserDefinedProto };
|
enum TransmissionProtocol { IPv4UDPProto, IPv6UDPProto, UserDefinedProto };
|
||||||
enum ReceiveMode { AcceptAll,AcceptSome,IgnoreSome };
|
enum ReceiveMode { AcceptAll,AcceptSome,IgnoreSome };
|
||||||
protected:
|
protected:
|
||||||
RTPTransmitter() { }
|
RTPTransmitter() { }
|
||||||
@ -72,7 +72,7 @@ public:
|
|||||||
// If the size is ok, bufferlength is adjusted so that it indicates the
|
// If the size is ok, bufferlength is adjusted so that it indicates the
|
||||||
// amount of bytes in the buffer that are part of the hostname.
|
// amount of bytes in the buffer that are part of the hostname.
|
||||||
// The buffer is NOT null terminated!
|
// The buffer is NOT null terminated!
|
||||||
virtual int GetLocalHostName(u_int8_t *buffer,size_t *bufferlength) = 0;
|
virtual int GetLocalHostName(uint8_t *buffer,size_t *bufferlength) = 0;
|
||||||
|
|
||||||
virtual bool ComesFromThisTransmitter(const RTPAddress *addr) = 0;
|
virtual bool ComesFromThisTransmitter(const RTPAddress *addr) = 0;
|
||||||
virtual size_t GetHeaderOverhead() = 0;
|
virtual size_t GetHeaderOverhead() = 0;
|
||||||
@ -87,8 +87,8 @@ public:
|
|||||||
virtual int SendRTCPData(const void *data,size_t len) = 0;
|
virtual int SendRTCPData(const void *data,size_t len) = 0;
|
||||||
|
|
||||||
virtual void ResetPacketCount() = 0;
|
virtual void ResetPacketCount() = 0;
|
||||||
virtual u_int32_t GetNumRTPPacketsSent() = 0;
|
virtual uint32_t GetNumRTPPacketsSent() = 0;
|
||||||
virtual u_int32_t GetNumRTCPPacketsSent() = 0;
|
virtual uint32_t GetNumRTCPPacketsSent() = 0;
|
||||||
|
|
||||||
virtual int AddDestination(const RTPAddress &addr) = 0;
|
virtual int AddDestination(const RTPAddress &addr) = 0;
|
||||||
virtual int DeleteDestination(const RTPAddress &addr) = 0;
|
virtual int DeleteDestination(const RTPAddress &addr) = 0;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -41,15 +41,22 @@
|
|||||||
#else
|
#else
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
|
|
||||||
typedef short int16_t;
|
|
||||||
typedef char int8_t;
|
|
||||||
#endif // _WIN32_WCE
|
#endif // _WIN32_WCE
|
||||||
|
|
||||||
typedef unsigned long u_int32_t;
|
#ifndef INTTYPES_DEFINED
|
||||||
typedef unsigned short u_int16_t;
|
|
||||||
typedef unsigned char u_int8_t;
|
#define INTTYPES_DEFINED
|
||||||
typedef long int32_t;
|
|
||||||
|
typedef char int8_t;
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
|
||||||
|
#endif // INTTYPES_DEFINED
|
||||||
|
|
||||||
#endif // RTPTYPES_H
|
#endif // RTPTYPES_H
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -77,6 +77,8 @@
|
|||||||
|
|
||||||
#include "rtpdebug.h"
|
#include "rtpdebug.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
#define RTPUDPV4TRANS_RTPRECEIVEBUFFER 32768
|
#define RTPUDPV4TRANS_RTPRECEIVEBUFFER 32768
|
||||||
#define RTPUDPV4TRANS_RTCPRECEIVEBUFFER 32768
|
#define RTPUDPV4TRANS_RTCPRECEIVEBUFFER 32768
|
||||||
@ -99,12 +101,12 @@
|
|||||||
struct ip_mreq mreq;\
|
struct ip_mreq mreq;\
|
||||||
\
|
\
|
||||||
mreq.imr_multiaddr.s_addr = htonl(mcastip);\
|
mreq.imr_multiaddr.s_addr = htonl(mcastip);\
|
||||||
mreq.imr_interface.s_addr = htonl(bindIP);\
|
mreq.imr_interface.s_addr = htonl(mcastifaceIP);\
|
||||||
status = setsockopt(socket,IPPROTO_IP,type,(const char *)&mreq,sizeof(struct ip_mreq));\
|
status = setsockopt(socket,IPPROTO_IP,type,(const char *)&mreq,sizeof(struct ip_mreq));\
|
||||||
}
|
}
|
||||||
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPUDPV4TRANS_HASHSIZE; }
|
int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPUDPV4TRANS_HASHSIZE; }
|
||||||
int RTPUDPv4Trans_GetHashIndex_u_int32_t(const u_int32_t &k) { return k%RTPUDPV4TRANS_HASHSIZE; }
|
int RTPUDPv4Trans_GetHashIndex_uint32_t(const uint32_t &k) { return k%RTPUDPV4TRANS_HASHSIZE; }
|
||||||
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_THREAD
|
#ifdef RTP_SUPPORT_THREAD
|
||||||
@ -253,6 +255,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize,const RTPTransmissionPa
|
|||||||
// bind sockets
|
// bind sockets
|
||||||
|
|
||||||
bindIP = params->GetBindIP();
|
bindIP = params->GetBindIP();
|
||||||
|
mcastifaceIP = params->GetMulticastInterfaceIP();
|
||||||
|
|
||||||
memset(&addr,0,sizeof(struct sockaddr_in));
|
memset(&addr,0,sizeof(struct sockaddr_in));
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
@ -294,7 +297,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize,const RTPTransmissionPa
|
|||||||
#ifdef RTPDEBUG
|
#ifdef RTPDEBUG
|
||||||
std::cout << "Found these local IP addresses:" << std::endl;
|
std::cout << "Found these local IP addresses:" << std::endl;
|
||||||
|
|
||||||
std::list<u_int32_t>::const_iterator it;
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
|
||||||
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
||||||
{
|
{
|
||||||
@ -403,7 +406,7 @@ RTPTransmissionInfo *RTPUDPv4Transmitter::GetTransmissionInfo()
|
|||||||
return tinf;
|
return tinf;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv4Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
int RTPUDPv4Transmitter::GetLocalHostName(uint8_t *buffer,size_t *bufferlength)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||||
@ -423,24 +426,55 @@ int RTPUDPv4Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
return ERR_RTP_UDPV4TRANS_NOLOCALIPS;
|
return ERR_RTP_UDPV4TRANS_NOLOCALIPS;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<u_int32_t>::const_iterator it;
|
std::list<uint32_t>::const_iterator it;
|
||||||
std::list<std::string> hostnames;
|
std::list<std::string> hostnames;
|
||||||
|
|
||||||
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
||||||
{
|
{
|
||||||
struct hostent *he;
|
bool founddouble = false;
|
||||||
u_int8_t addr[4];
|
bool foundentry = true;
|
||||||
u_int32_t ip = (*it);
|
|
||||||
|
while (!founddouble && foundentry)
|
||||||
addr[0] = (u_int8_t)((ip>>24)&0xFF);
|
|
||||||
addr[1] = (u_int8_t)((ip>>16)&0xFF);
|
|
||||||
addr[2] = (u_int8_t)((ip>>8)&0xFF);
|
|
||||||
addr[3] = (u_int8_t)(ip&0xFF);
|
|
||||||
he = gethostbyaddr((char *)addr,4,AF_INET);
|
|
||||||
if (he != 0)
|
|
||||||
{
|
{
|
||||||
std::string hname = std::string(he->h_name);
|
struct hostent *he;
|
||||||
hostnames.push_back(hname);
|
uint8_t addr[4];
|
||||||
|
uint32_t ip = (*it);
|
||||||
|
|
||||||
|
addr[0] = (uint8_t)((ip>>24)&0xFF);
|
||||||
|
addr[1] = (uint8_t)((ip>>16)&0xFF);
|
||||||
|
addr[2] = (uint8_t)((ip>>8)&0xFF);
|
||||||
|
addr[3] = (uint8_t)(ip&0xFF);
|
||||||
|
he = gethostbyaddr((char *)addr,4,AF_INET);
|
||||||
|
if (he != 0)
|
||||||
|
{
|
||||||
|
std::string hname = std::string(he->h_name);
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)
|
||||||
|
if ((*it) == hname)
|
||||||
|
founddouble = true;
|
||||||
|
|
||||||
|
if (!founddouble)
|
||||||
|
hostnames.push_back(hname);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (!founddouble && he->h_aliases[i] != 0)
|
||||||
|
{
|
||||||
|
std::string hname = std::string(he->h_aliases[i]);
|
||||||
|
|
||||||
|
for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)
|
||||||
|
if ((*it) == hname)
|
||||||
|
founddouble = true;
|
||||||
|
|
||||||
|
if (!founddouble)
|
||||||
|
{
|
||||||
|
hostnames.push_back(hname);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
foundentry = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,14 +483,15 @@ int RTPUDPv4Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
if (!hostnames.empty()) // try to select the most appropriate hostname
|
if (!hostnames.empty()) // try to select the most appropriate hostname
|
||||||
{
|
{
|
||||||
std::list<std::string>::const_iterator it;
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
hostnames.sort();
|
||||||
for (it = hostnames.begin() ; !found && it != hostnames.end() ; it++)
|
for (it = hostnames.begin() ; !found && it != hostnames.end() ; it++)
|
||||||
{
|
{
|
||||||
if ((*it).find('.') != std::string::npos)
|
if ((*it).find('.') != std::string::npos)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
localhostnamelength = (*it).length();
|
localhostnamelength = (*it).length();
|
||||||
localhostname = new u_int8_t [localhostnamelength+1];
|
localhostname = new uint8_t [localhostnamelength+1];
|
||||||
if (localhostname == 0)
|
if (localhostname == 0)
|
||||||
{
|
{
|
||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
@ -470,18 +505,22 @@ int RTPUDPv4Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
|
|
||||||
if (!found) // use an IP address
|
if (!found) // use an IP address
|
||||||
{
|
{
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
int len;
|
int len;
|
||||||
char str[256];
|
char str[16];
|
||||||
|
|
||||||
it = localIPs.begin();
|
it = localIPs.begin();
|
||||||
ip = (*it);
|
ip = (*it);
|
||||||
|
|
||||||
sprintf(str,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
_snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
|
#else
|
||||||
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
|
#endif // WIN32 || _WIN32_WCE
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
|
|
||||||
localhostnamelength = len;
|
localhostnamelength = len;
|
||||||
localhostname = new u_int8_t [localhostnamelength + 1];
|
localhostname = new uint8_t [localhostnamelength + 1];
|
||||||
if (localhostname == 0)
|
if (localhostname == 0)
|
||||||
{
|
{
|
||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
@ -522,7 +561,7 @@ bool RTPUDPv4Transmitter::ComesFromThisTransmitter(const RTPAddress *addr)
|
|||||||
{
|
{
|
||||||
const RTPIPv4Address *addr2 = (const RTPIPv4Address *)addr;
|
const RTPIPv4Address *addr2 = (const RTPIPv4Address *)addr;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
std::list<u_int32_t>::const_iterator it;
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
|
||||||
it = localIPs.begin();
|
it = localIPs.begin();
|
||||||
while (!found && it != localIPs.end())
|
while (!found && it != localIPs.end())
|
||||||
@ -770,14 +809,14 @@ void RTPUDPv4Transmitter::ResetPacketCount()
|
|||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPUDPv4Transmitter::GetNumRTPPacketsSent()
|
uint32_t RTPUDPv4Transmitter::GetNumRTPPacketsSent()
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
MAINMUTEX_LOCK
|
MAINMUTEX_LOCK
|
||||||
|
|
||||||
u_int32_t num;
|
uint32_t num;
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
num = 0;
|
num = 0;
|
||||||
@ -789,14 +828,14 @@ u_int32_t RTPUDPv4Transmitter::GetNumRTPPacketsSent()
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPUDPv4Transmitter::GetNumRTCPPacketsSent()
|
uint32_t RTPUDPv4Transmitter::GetNumRTCPPacketsSent()
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
MAINMUTEX_LOCK
|
MAINMUTEX_LOCK
|
||||||
|
|
||||||
u_int32_t num;
|
uint32_t num;
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
num = 0;
|
num = 0;
|
||||||
@ -912,7 +951,7 @@ int RTPUDPv4Transmitter::JoinMulticastGroup(const RTPAddress &addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const RTPIPv4Address &address = (const RTPIPv4Address &)addr;
|
const RTPIPv4Address &address = (const RTPIPv4Address &)addr;
|
||||||
u_int32_t mcastIP = address.GetIP();
|
uint32_t mcastIP = address.GetIP();
|
||||||
|
|
||||||
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
||||||
{
|
{
|
||||||
@ -964,7 +1003,7 @@ int RTPUDPv4Transmitter::LeaveMulticastGroup(const RTPAddress &addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const RTPIPv4Address &address = (const RTPIPv4Address &)addr;
|
const RTPIPv4Address &address = (const RTPIPv4Address &)addr;
|
||||||
u_int32_t mcastIP = address.GetIP();
|
uint32_t mcastIP = address.GetIP();
|
||||||
|
|
||||||
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
||||||
{
|
{
|
||||||
@ -995,7 +1034,7 @@ void RTPUDPv4Transmitter::LeaveAllMulticastGroups()
|
|||||||
multicastgroups.GotoFirstElement();
|
multicastgroups.GotoFirstElement();
|
||||||
while (multicastgroups.HasCurrentElement())
|
while (multicastgroups.HasCurrentElement())
|
||||||
{
|
{
|
||||||
u_int32_t mcastIP;
|
uint32_t mcastIP;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
mcastIP = multicastgroups.GetCurrentElement();
|
mcastIP = multicastgroups.GetCurrentElement();
|
||||||
@ -1270,7 +1309,7 @@ RTPRawPacket *RTPUDPv4Transmitter::GetNextPacket()
|
|||||||
// Here the private functions start...
|
// Here the private functions start...
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||||
bool RTPUDPv4Transmitter::SetMulticastTTL(u_int8_t ttl)
|
bool RTPUDPv4Transmitter::SetMulticastTTL(uint8_t ttl)
|
||||||
{
|
{
|
||||||
int ttl2,status;
|
int ttl2,status;
|
||||||
|
|
||||||
@ -1336,12 +1375,12 @@ int RTPUDPv4Transmitter::PollSocket(bool rtp)
|
|||||||
{
|
{
|
||||||
RTPRawPacket *pack;
|
RTPRawPacket *pack;
|
||||||
RTPIPv4Address *addr;
|
RTPIPv4Address *addr;
|
||||||
u_int8_t *datacopy;
|
uint8_t *datacopy;
|
||||||
|
|
||||||
addr = new RTPIPv4Address(ntohl(srcaddr.sin_addr.s_addr),ntohs(srcaddr.sin_port));
|
addr = new RTPIPv4Address(ntohl(srcaddr.sin_addr.s_addr),ntohs(srcaddr.sin_port));
|
||||||
if (addr == 0)
|
if (addr == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
datacopy = new u_int8_t[recvlen];
|
datacopy = new uint8_t[recvlen];
|
||||||
if (datacopy == 0)
|
if (datacopy == 0)
|
||||||
{
|
{
|
||||||
delete addr;
|
delete addr;
|
||||||
@ -1365,7 +1404,7 @@ int RTPUDPv4Transmitter::PollSocket(bool rtp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv4Transmitter::ProcessAddAcceptIgnoreEntry(u_int32_t ip,u_int16_t port)
|
int RTPUDPv4Transmitter::ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port)
|
||||||
{
|
{
|
||||||
acceptignoreinfo.GotoElement(ip);
|
acceptignoreinfo.GotoElement(ip);
|
||||||
if (acceptignoreinfo.HasCurrentElement()) // An entry for this IP address already exists
|
if (acceptignoreinfo.HasCurrentElement()) // An entry for this IP address already exists
|
||||||
@ -1379,7 +1418,7 @@ int RTPUDPv4Transmitter::ProcessAddAcceptIgnoreEntry(u_int32_t ip,u_int16_t port
|
|||||||
}
|
}
|
||||||
else if (!portinf->all)
|
else if (!portinf->all)
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = portinf->portlist.begin();
|
begin = portinf->portlist.begin();
|
||||||
end = portinf->portlist.end();
|
end = portinf->portlist.end();
|
||||||
@ -1427,7 +1466,7 @@ void RTPUDPv4Transmitter::ClearAcceptIgnoreInfo()
|
|||||||
acceptignoreinfo.Clear();
|
acceptignoreinfo.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv4Transmitter::ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t port)
|
int RTPUDPv4Transmitter::ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port)
|
||||||
{
|
{
|
||||||
acceptignoreinfo.GotoElement(ip);
|
acceptignoreinfo.GotoElement(ip);
|
||||||
if (!acceptignoreinfo.HasCurrentElement())
|
if (!acceptignoreinfo.HasCurrentElement())
|
||||||
@ -1446,7 +1485,7 @@ int RTPUDPv4Transmitter::ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t p
|
|||||||
if (inf->all) // currently, all ports are selected. Add the one to remove to the list
|
if (inf->all) // currently, all ports are selected. Add the one to remove to the list
|
||||||
{
|
{
|
||||||
// we have to check if the list doesn't contain the port already
|
// we have to check if the list doesn't contain the port already
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1459,7 +1498,7 @@ int RTPUDPv4Transmitter::ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t p
|
|||||||
}
|
}
|
||||||
else // check if we can find the port in the list
|
else // check if we can find the port in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::iterator it,begin,end;
|
std::list<uint16_t>::iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1478,7 +1517,7 @@ int RTPUDPv4Transmitter::ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t p
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTPUDPv4Transmitter::ShouldAcceptData(u_int32_t srcip,u_int16_t srcport)
|
bool RTPUDPv4Transmitter::ShouldAcceptData(uint32_t srcip,uint16_t srcport)
|
||||||
{
|
{
|
||||||
if (receivemode == RTPTransmitter::AcceptSome)
|
if (receivemode == RTPTransmitter::AcceptSome)
|
||||||
{
|
{
|
||||||
@ -1491,7 +1530,7 @@ bool RTPUDPv4Transmitter::ShouldAcceptData(u_int32_t srcip,u_int16_t srcport)
|
|||||||
inf = acceptignoreinfo.GetCurrentElement();
|
inf = acceptignoreinfo.GetCurrentElement();
|
||||||
if (!inf->all) // only accept the ones in the list
|
if (!inf->all) // only accept the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1504,7 +1543,7 @@ bool RTPUDPv4Transmitter::ShouldAcceptData(u_int32_t srcip,u_int16_t srcport)
|
|||||||
}
|
}
|
||||||
else // accept all, except the ones in the list
|
else // accept all, except the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1527,7 +1566,7 @@ bool RTPUDPv4Transmitter::ShouldAcceptData(u_int32_t srcip,u_int16_t srcport)
|
|||||||
inf = acceptignoreinfo.GetCurrentElement();
|
inf = acceptignoreinfo.GetCurrentElement();
|
||||||
if (!inf->all) // ignore the ports in the list
|
if (!inf->all) // ignore the ports in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1540,7 +1579,7 @@ bool RTPUDPv4Transmitter::ShouldAcceptData(u_int32_t srcip,u_int16_t srcport)
|
|||||||
}
|
}
|
||||||
else // ignore all, except the ones in the list
|
else // ignore all, except the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1716,7 +1755,7 @@ bool RTPUDPv4Transmitter::GetLocalIPList_Interfaces()
|
|||||||
|
|
||||||
while (tmp != 0)
|
while (tmp != 0)
|
||||||
{
|
{
|
||||||
if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_INET)
|
if (tmp->ifa_addr != 0 && tmp->ifa_addr->sa_family == AF_INET)
|
||||||
{
|
{
|
||||||
struct sockaddr_in *inaddr = (struct sockaddr_in *)tmp->ifa_addr;
|
struct sockaddr_in *inaddr = (struct sockaddr_in *)tmp->ifa_addr;
|
||||||
localIPs.push_back(ntohl(inaddr->sin_addr.s_addr));
|
localIPs.push_back(ntohl(inaddr->sin_addr.s_addr));
|
||||||
@ -1761,7 +1800,7 @@ bool RTPUDPv4Transmitter::GetLocalIPList_Interfaces()
|
|||||||
{
|
{
|
||||||
if (sa->sa_len == sizeof(struct sockaddr_in) && sa->sa_family == PF_INET)
|
if (sa->sa_len == sizeof(struct sockaddr_in) && sa->sa_family == PF_INET)
|
||||||
{
|
{
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
struct sockaddr_in *addr = (struct sockaddr_in *)sa;
|
struct sockaddr_in *addr = (struct sockaddr_in *)sa;
|
||||||
|
|
||||||
ip = ntohl(addr->sin_addr.s_addr);
|
ip = ntohl(addr->sin_addr.s_addr);
|
||||||
@ -1780,7 +1819,7 @@ bool RTPUDPv4Transmitter::GetLocalIPList_Interfaces()
|
|||||||
#else // don't have sa_len in struct sockaddr
|
#else // don't have sa_len in struct sockaddr
|
||||||
if (sa->sa_family == PF_INET)
|
if (sa->sa_family == PF_INET)
|
||||||
{
|
{
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
struct sockaddr_in *addr = (struct sockaddr_in *)sa;
|
struct sockaddr_in *addr = (struct sockaddr_in *)sa;
|
||||||
|
|
||||||
ip = ntohl(addr->sin_addr.s_addr);
|
ip = ntohl(addr->sin_addr.s_addr);
|
||||||
@ -1805,7 +1844,7 @@ void RTPUDPv4Transmitter::GetLocalIPList_DNS()
|
|||||||
{
|
{
|
||||||
struct hostent *he;
|
struct hostent *he;
|
||||||
char name[1024];
|
char name[1024];
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
bool done;
|
bool done;
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
@ -1826,7 +1865,7 @@ void RTPUDPv4Transmitter::GetLocalIPList_DNS()
|
|||||||
{
|
{
|
||||||
ip = 0;
|
ip = 0;
|
||||||
for (j = 0 ; j < 4 ; j++)
|
for (j = 0 ; j < 4 ; j++)
|
||||||
ip |= ((u_int32_t)((unsigned char)he->h_addr_list[i][j])<<((3-j)*8));
|
ip |= ((uint32_t)((unsigned char)he->h_addr_list[i][j])<<((3-j)*8));
|
||||||
localIPs.push_back(ip);
|
localIPs.push_back(ip);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -1844,8 +1883,8 @@ void RTPUDPv4Transmitter::AbortWaitInternal()
|
|||||||
|
|
||||||
void RTPUDPv4Transmitter::AddLoopbackAddress()
|
void RTPUDPv4Transmitter::AddLoopbackAddress()
|
||||||
{
|
{
|
||||||
u_int32_t loopbackaddr = (((u_int32_t)127)<<24)|((u_int32_t)1);
|
uint32_t loopbackaddr = (((uint32_t)127)<<24)|((uint32_t)1);
|
||||||
std::list<u_int32_t>::const_iterator it;
|
std::list<uint32_t>::const_iterator it;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
for (it = localIPs.begin() ; !found && it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; !found && it != localIPs.end() ; it++)
|
||||||
@ -1871,21 +1910,24 @@ void RTPUDPv4Transmitter::Dump()
|
|||||||
std::cout << "Not created" << std::endl;
|
std::cout << "Not created" << std::endl;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char str[1024];
|
char str[16];
|
||||||
u_int32_t ip;
|
uint32_t ip;
|
||||||
std::list<u_int32_t>::const_iterator it;
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
|
||||||
std::cout << "Portbase: " << portbase << std::endl;
|
std::cout << "Portbase: " << portbase << std::endl;
|
||||||
std::cout << "RTP socket descriptor: " << rtpsock << std::endl;
|
std::cout << "RTP socket descriptor: " << rtpsock << std::endl;
|
||||||
std::cout << "RTCP socket descriptor: " << rtcpsock << std::endl;
|
std::cout << "RTCP socket descriptor: " << rtcpsock << std::endl;
|
||||||
ip = bindIP;
|
ip = bindIP;
|
||||||
sprintf(str,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
std::cout << "Bind IP address: " << str << std::endl;
|
std::cout << "Bind IP address: " << str << std::endl;
|
||||||
|
ip = mcastifaceIP;
|
||||||
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
|
std::cout << "Multicast interface IP address: " << str << std::endl;
|
||||||
std::cout << "Local IP addresses:" << std::endl;
|
std::cout << "Local IP addresses:" << std::endl;
|
||||||
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
||||||
{
|
{
|
||||||
ip = (*it);
|
ip = (*it);
|
||||||
sprintf(str,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
std::cout << " " << str << std::endl;
|
std::cout << " " << str << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << "Multicast TTL: " << (int)multicastTTL << std::endl;
|
std::cout << "Multicast TTL: " << (int)multicastTTL << std::endl;
|
||||||
@ -1908,7 +1950,7 @@ void RTPUDPv4Transmitter::Dump()
|
|||||||
while(acceptignoreinfo.HasCurrentElement())
|
while(acceptignoreinfo.HasCurrentElement())
|
||||||
{
|
{
|
||||||
ip = acceptignoreinfo.GetCurrentKey();
|
ip = acceptignoreinfo.GetCurrentKey();
|
||||||
sprintf(str,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
PortInfo *pinfo = acceptignoreinfo.GetCurrentElement();
|
PortInfo *pinfo = acceptignoreinfo.GetCurrentElement();
|
||||||
std::cout << " " << str << ": ";
|
std::cout << " " << str << ": ";
|
||||||
if (pinfo->all)
|
if (pinfo->all)
|
||||||
@ -1918,7 +1960,7 @@ void RTPUDPv4Transmitter::Dump()
|
|||||||
std::cout << ", except ";
|
std::cout << ", except ";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<u_int16_t>::const_iterator it;
|
std::list<uint16_t>::const_iterator it;
|
||||||
|
|
||||||
for (it = pinfo->portlist.begin() ; it != pinfo->portlist.end() ; )
|
for (it = pinfo->portlist.begin() ; it != pinfo->portlist.end() ; )
|
||||||
{
|
{
|
||||||
@ -1962,7 +2004,7 @@ void RTPUDPv4Transmitter::Dump()
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
ip = multicastgroups.GetCurrentElement();
|
ip = multicastgroups.GetCurrentElement();
|
||||||
sprintf(str,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
snprintf(str,16,"%d.%d.%d.%d",(int)((ip>>24)&0xFF),(int)((ip>>16)&0xFF),(int)((ip>>8)&0xFF),(int)(ip&0xFF));
|
||||||
std::cout << " " << str << std::endl;
|
std::cout << " " << str << std::endl;
|
||||||
multicastgroups.GotoNextElement();
|
multicastgroups.GotoNextElement();
|
||||||
} while (multicastgroups.HasCurrentElement());
|
} while (multicastgroups.HasCurrentElement());
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -51,44 +51,46 @@
|
|||||||
class RTPUDPv4TransmissionParams : public RTPTransmissionParams
|
class RTPUDPv4TransmissionParams : public RTPTransmissionParams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPUDPv4TransmissionParams():RTPTransmissionParams(RTPTransmitter::IPv4UDPProto) { portbase = RTPUDPV4TRANS_DEFAULTPORTBASE; bindIP = 0; multicastTTL = 1; }
|
RTPUDPv4TransmissionParams():RTPTransmissionParams(RTPTransmitter::IPv4UDPProto) { portbase = RTPUDPV4TRANS_DEFAULTPORTBASE; bindIP = 0; multicastTTL = 1; mcastifaceIP = 0; }
|
||||||
void SetBindIP(u_int32_t ip) { bindIP = ip; }
|
void SetBindIP(uint32_t ip) { bindIP = ip; }
|
||||||
void SetPortbase(u_int16_t pbase) { portbase = pbase; }
|
void SetMulticastInterfaceIP(uint32_t ip) { mcastifaceIP = ip; }
|
||||||
void SetMulticastTTL(u_int8_t mcastTTL) { multicastTTL = mcastTTL; }
|
void SetPortbase(uint16_t pbase) { portbase = pbase; }
|
||||||
void SetLocalIPList(std::list<u_int32_t> &iplist) { localIPs = iplist; }
|
void SetMulticastTTL(uint8_t mcastTTL) { multicastTTL = mcastTTL; }
|
||||||
|
void SetLocalIPList(std::list<uint32_t> &iplist) { localIPs = iplist; }
|
||||||
void ClearLocalIPList() { localIPs.clear(); }
|
void ClearLocalIPList() { localIPs.clear(); }
|
||||||
u_int32_t GetBindIP() const { return bindIP; }
|
uint32_t GetBindIP() const { return bindIP; }
|
||||||
u_int16_t GetPortbase() const { return portbase; }
|
uint32_t GetMulticastInterfaceIP() const { return mcastifaceIP; }
|
||||||
u_int8_t GetMulticastTTL() const { return multicastTTL; }
|
uint16_t GetPortbase() const { return portbase; }
|
||||||
const std::list<u_int32_t> &GetLocalIPList() const { return localIPs; }
|
uint8_t GetMulticastTTL() const { return multicastTTL; }
|
||||||
|
const std::list<uint32_t> &GetLocalIPList() const { return localIPs; }
|
||||||
private:
|
private:
|
||||||
u_int16_t portbase;
|
uint16_t portbase;
|
||||||
u_int32_t bindIP;
|
uint32_t bindIP, mcastifaceIP;
|
||||||
std::list<u_int32_t> localIPs;
|
std::list<uint32_t> localIPs;
|
||||||
u_int8_t multicastTTL;
|
uint8_t multicastTTL;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RTPUDPv4TransmissionInfo : public RTPTransmissionInfo
|
class RTPUDPv4TransmissionInfo : public RTPTransmissionInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RTPUDPv4TransmissionInfo(std::list<u_int32_t> iplist,jrtp_socket_t rtpsock,jrtp_socket_t rtcpsock) : RTPTransmissionInfo(RTPTransmitter::IPv4UDPProto)
|
RTPUDPv4TransmissionInfo(std::list<uint32_t> iplist,jrtp_socket_t rtpsock,jrtp_socket_t rtcpsock) : RTPTransmissionInfo(RTPTransmitter::IPv4UDPProto)
|
||||||
{ localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
|
{ localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
|
||||||
|
|
||||||
~RTPUDPv4TransmissionInfo() { }
|
~RTPUDPv4TransmissionInfo() { }
|
||||||
std::list<u_int32_t> GetLocalIPList() const { return localIPlist; }
|
std::list<uint32_t> GetLocalIPList() const { return localIPlist; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::list<u_int32_t> localIPlist;
|
std::list<uint32_t> localIPlist;
|
||||||
jrtp_socket_t rtpsocket,rtcpsocket;
|
jrtp_socket_t rtpsocket,rtcpsocket;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
inline int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPUDPV4TRANS_HASHSIZE; }
|
inline int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d) { return d.GetIP_HBO()%RTPUDPV4TRANS_HASHSIZE; }
|
||||||
inline int RTPUDPv4Trans_GetHashIndex_u_int32_t(const u_int32_t &k) { return k%RTPUDPV4TRANS_HASHSIZE; }
|
inline int RTPUDPv4Trans_GetHashIndex_uint32_t(const uint32_t &k) { return k%RTPUDPV4TRANS_HASHSIZE; }
|
||||||
#else // No support for inline function as template parameter
|
#else // No support for inline function as template parameter
|
||||||
int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d);
|
int RTPUDPv4Trans_GetHashIndex_IPv4Dest(const RTPIPv4Destination &d);
|
||||||
int RTPUDPv4Trans_GetHashIndex_u_int32_t(const u_int32_t &k);
|
int RTPUDPv4Trans_GetHashIndex_uint32_t(const uint32_t &k);
|
||||||
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
#endif // RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
|
|
||||||
#define RTPUDPV4TRANS_HEADERSIZE (20+8)
|
#define RTPUDPV4TRANS_HEADERSIZE (20+8)
|
||||||
@ -106,7 +108,7 @@ public:
|
|||||||
void Destroy();
|
void Destroy();
|
||||||
RTPTransmissionInfo *GetTransmissionInfo();
|
RTPTransmissionInfo *GetTransmissionInfo();
|
||||||
|
|
||||||
int GetLocalHostName(u_int8_t *buffer,size_t *bufferlength);
|
int GetLocalHostName(uint8_t *buffer,size_t *bufferlength);
|
||||||
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
||||||
size_t GetHeaderOverhead() { return RTPUDPV4TRANS_HEADERSIZE; }
|
size_t GetHeaderOverhead() { return RTPUDPV4TRANS_HEADERSIZE; }
|
||||||
|
|
||||||
@ -118,8 +120,8 @@ public:
|
|||||||
int SendRTCPData(const void *data,size_t len);
|
int SendRTCPData(const void *data,size_t len);
|
||||||
|
|
||||||
void ResetPacketCount();
|
void ResetPacketCount();
|
||||||
u_int32_t GetNumRTPPacketsSent();
|
uint32_t GetNumRTPPacketsSent();
|
||||||
u_int32_t GetNumRTCPPacketsSent();
|
uint32_t GetNumRTCPPacketsSent();
|
||||||
|
|
||||||
int AddDestination(const RTPAddress &addr);
|
int AddDestination(const RTPAddress &addr);
|
||||||
int DeleteDestination(const RTPAddress &addr);
|
int DeleteDestination(const RTPAddress &addr);
|
||||||
@ -151,30 +153,30 @@ private:
|
|||||||
void AddLoopbackAddress();
|
void AddLoopbackAddress();
|
||||||
void FlushPackets();
|
void FlushPackets();
|
||||||
int PollSocket(bool rtp);
|
int PollSocket(bool rtp);
|
||||||
int ProcessAddAcceptIgnoreEntry(u_int32_t ip,u_int16_t port);
|
int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
|
||||||
int ProcessDeleteAcceptIgnoreEntry(u_int32_t ip,u_int16_t port);
|
int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
|
||||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||||
bool SetMulticastTTL(u_int8_t ttl);
|
bool SetMulticastTTL(uint8_t ttl);
|
||||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||||
bool ShouldAcceptData(u_int32_t srcip,u_int16_t srcport);
|
bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
|
||||||
void ClearAcceptIgnoreInfo();
|
void ClearAcceptIgnoreInfo();
|
||||||
|
|
||||||
bool init;
|
bool init;
|
||||||
bool created;
|
bool created;
|
||||||
bool waitingfordata;
|
bool waitingfordata;
|
||||||
jrtp_socket_t rtpsock,rtcpsock;
|
jrtp_socket_t rtpsock,rtcpsock;
|
||||||
u_int32_t bindIP;
|
uint32_t bindIP, mcastifaceIP;
|
||||||
std::list<u_int32_t> localIPs;
|
std::list<uint32_t> localIPs;
|
||||||
u_int16_t portbase;
|
uint16_t portbase;
|
||||||
u_int8_t multicastTTL;
|
uint8_t multicastTTL;
|
||||||
RTPTransmitter::ReceiveMode receivemode;
|
RTPTransmitter::ReceiveMode receivemode;
|
||||||
|
|
||||||
u_int8_t *localhostname;
|
uint8_t *localhostname;
|
||||||
size_t localhostnamelength;
|
size_t localhostnamelength;
|
||||||
|
|
||||||
RTPHashTable<const RTPIPv4Destination,RTPUDPv4Trans_GetHashIndex_IPv4Dest,RTPUDPV4TRANS_HASHSIZE> destinations;
|
RTPHashTable<const RTPIPv4Destination,RTPUDPv4Trans_GetHashIndex_IPv4Dest,RTPUDPV4TRANS_HASHSIZE> destinations;
|
||||||
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
#ifdef RTP_SUPPORT_IPV4MULTICAST
|
||||||
RTPHashTable<const u_int32_t,RTPUDPv4Trans_GetHashIndex_u_int32_t,RTPUDPV4TRANS_HASHSIZE> multicastgroups;
|
RTPHashTable<const uint32_t,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> multicastgroups;
|
||||||
#endif // RTP_SUPPORT_IPV4MULTICAST
|
#endif // RTP_SUPPORT_IPV4MULTICAST
|
||||||
std::list<RTPRawPacket*> rawpacketlist;
|
std::list<RTPRawPacket*> rawpacketlist;
|
||||||
|
|
||||||
@ -187,10 +189,10 @@ private:
|
|||||||
PortInfo() { all = false; }
|
PortInfo() { all = false; }
|
||||||
|
|
||||||
bool all;
|
bool all;
|
||||||
std::list<u_int16_t> portlist;
|
std::list<uint16_t> portlist;
|
||||||
};
|
};
|
||||||
|
|
||||||
RTPKeyHashTable<const u_int32_t,PortInfo*,RTPUDPv4Trans_GetHashIndex_u_int32_t,RTPUDPV4TRANS_HASHSIZE> acceptignoreinfo;
|
RTPKeyHashTable<const uint32_t,PortInfo*,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> acceptignoreinfo;
|
||||||
|
|
||||||
// notification descriptors for AbortWait (0 is for reading, 1 for writing)
|
// notification descriptors for AbortWait (0 is for reading, 1 for writing)
|
||||||
jrtp_socket_t abortdesc[2];
|
jrtp_socket_t abortdesc[2];
|
||||||
@ -202,7 +204,7 @@ private:
|
|||||||
int threadsafe;
|
int threadsafe;
|
||||||
#endif // RTP_SUPPORT_THREAD
|
#endif // RTP_SUPPORT_THREAD
|
||||||
|
|
||||||
u_int32_t rtppackcount,rtcppackcount;
|
uint32_t rtppackcount,rtcppackcount;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RTPUDPV4TRANSMITTER_H
|
#endif // RTPUDPV4TRANSMITTER_H
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -100,12 +100,12 @@
|
|||||||
struct ipv6_mreq mreq;\
|
struct ipv6_mreq mreq;\
|
||||||
\
|
\
|
||||||
mreq.ipv6mr_multiaddr = mcastip;\
|
mreq.ipv6mr_multiaddr = mcastip;\
|
||||||
mreq.ipv6mr_interface = 0;\
|
mreq.ipv6mr_interface = mcastifidx;\
|
||||||
status = setsockopt(socket,IPPROTO_IPV6,type,(const char *)&mreq,sizeof(struct ipv6_mreq));\
|
status = setsockopt(socket,IPPROTO_IPV6,type,(const char *)&mreq,sizeof(struct ipv6_mreq));\
|
||||||
}
|
}
|
||||||
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifndef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d) { in6_addr ip = d.GetIP(); return ((((u_int32_t)ip.s6_addr[12])<<24)|(((u_int32_t)ip.s6_addr[13])<<16)|(((u_int32_t)ip.s6_addr[14])<<8)|((u_int32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d) { in6_addr ip = d.GetIP(); return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
||||||
int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip) { return ((((u_int32_t)ip.s6_addr[12])<<24)|(((u_int32_t)ip.s6_addr[13])<<16)|(((u_int32_t)ip.s6_addr[14])<<8)|((u_int32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip) { return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
||||||
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
#endif // !RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_THREAD
|
#ifdef RTP_SUPPORT_THREAD
|
||||||
@ -261,6 +261,7 @@ int RTPUDPv6Transmitter::Create(size_t maximumpacketsize,const RTPTransmissionPa
|
|||||||
// bind sockets
|
// bind sockets
|
||||||
|
|
||||||
bindIP = params->GetBindIP();
|
bindIP = params->GetBindIP();
|
||||||
|
mcastifidx = params->GetMulticastInterfaceIndex();
|
||||||
|
|
||||||
memset(&addr,0,sizeof(struct sockaddr_in6));
|
memset(&addr,0,sizeof(struct sockaddr_in6));
|
||||||
addr.sin6_family = AF_INET6;
|
addr.sin6_family = AF_INET6;
|
||||||
@ -412,7 +413,7 @@ RTPTransmissionInfo *RTPUDPv6Transmitter::GetTransmissionInfo()
|
|||||||
return tinf;
|
return tinf;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv6Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
int RTPUDPv6Transmitter::GetLocalHostName(uint8_t *buffer,size_t *bufferlength)
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return ERR_RTP_UDPV6TRANS_NOTINIT;
|
return ERR_RTP_UDPV6TRANS_NOTINIT;
|
||||||
@ -437,14 +438,45 @@ int RTPUDPv6Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
|
|
||||||
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
||||||
{
|
{
|
||||||
struct hostent *he;
|
bool founddouble = false;
|
||||||
in6_addr ip = (*it);
|
bool foundentry = true;
|
||||||
|
|
||||||
he = gethostbyaddr((char *)&ip,sizeof(in6_addr),AF_INET6);
|
while (!founddouble && foundentry)
|
||||||
if (he != 0)
|
|
||||||
{
|
{
|
||||||
std::string hname = std::string(he->h_name);
|
struct hostent *he;
|
||||||
hostnames.push_back(hname);
|
in6_addr ip = (*it);
|
||||||
|
|
||||||
|
he = gethostbyaddr((char *)&ip,sizeof(in6_addr),AF_INET6);
|
||||||
|
if (he != 0)
|
||||||
|
{
|
||||||
|
std::string hname = std::string(he->h_name);
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)
|
||||||
|
if ((*it) == hname)
|
||||||
|
founddouble = true;
|
||||||
|
|
||||||
|
if (!founddouble)
|
||||||
|
hostnames.push_back(hname);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (!founddouble && he->h_aliases[i] != 0)
|
||||||
|
{
|
||||||
|
std::string hname = std::string(he->h_aliases[i]);
|
||||||
|
|
||||||
|
for (it = hostnames.begin() ; !founddouble && it != hostnames.end() ; it++)
|
||||||
|
if ((*it) == hname)
|
||||||
|
founddouble = true;
|
||||||
|
|
||||||
|
if (!founddouble)
|
||||||
|
{
|
||||||
|
hostnames.push_back(hname);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
foundentry = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,13 +486,14 @@ int RTPUDPv6Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
{
|
{
|
||||||
std::list<std::string>::const_iterator it;
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
hostnames.sort();
|
||||||
for (it = hostnames.begin() ; !found && it != hostnames.end() ; it++)
|
for (it = hostnames.begin() ; !found && it != hostnames.end() ; it++)
|
||||||
{
|
{
|
||||||
if ((*it).find('.') != std::string::npos)
|
if ((*it).find('.') != std::string::npos)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
localhostnamelength = (*it).length();
|
localhostnamelength = (*it).length();
|
||||||
localhostname = new u_int8_t [localhostnamelength+1];
|
localhostname = new uint8_t [localhostnamelength+1];
|
||||||
if (localhostname == 0)
|
if (localhostname == 0)
|
||||||
{
|
{
|
||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
@ -476,8 +509,8 @@ int RTPUDPv6Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
{
|
{
|
||||||
in6_addr ip;
|
in6_addr ip;
|
||||||
int len;
|
int len;
|
||||||
char str[256];
|
char str[48];
|
||||||
u_int16_t ip16[8];
|
uint16_t ip16[8];
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
it = localIPs.begin();
|
it = localIPs.begin();
|
||||||
@ -485,15 +518,19 @@ int RTPUDPv6Transmitter::GetLocalHostName(u_int8_t *buffer,size_t *bufferlength)
|
|||||||
|
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
|
for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
|
||||||
{
|
{
|
||||||
ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8);
|
ip16[j] = (((uint16_t)ip.s6_addr[i])<<8);
|
||||||
ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]);
|
ip16[j] |= ((uint16_t)ip.s6_addr[i+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(str,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
_snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
|
#else
|
||||||
|
snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
|
#endif // WIN32 || _WIN32_WCE
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
|
|
||||||
localhostnamelength = len;
|
localhostnamelength = len;
|
||||||
localhostname = new u_int8_t [localhostnamelength+1];
|
localhostname = new uint8_t [localhostnamelength+1];
|
||||||
if (localhostname == 0)
|
if (localhostname == 0)
|
||||||
{
|
{
|
||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
@ -783,14 +820,14 @@ void RTPUDPv6Transmitter::ResetPacketCount()
|
|||||||
MAINMUTEX_UNLOCK
|
MAINMUTEX_UNLOCK
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPUDPv6Transmitter::GetNumRTPPacketsSent()
|
uint32_t RTPUDPv6Transmitter::GetNumRTPPacketsSent()
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
MAINMUTEX_LOCK
|
MAINMUTEX_LOCK
|
||||||
|
|
||||||
u_int32_t num;
|
uint32_t num;
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
num = 0;
|
num = 0;
|
||||||
@ -802,14 +839,14 @@ u_int32_t RTPUDPv6Transmitter::GetNumRTPPacketsSent()
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t RTPUDPv6Transmitter::GetNumRTCPPacketsSent()
|
uint32_t RTPUDPv6Transmitter::GetNumRTCPPacketsSent()
|
||||||
{
|
{
|
||||||
if (!init)
|
if (!init)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
MAINMUTEX_LOCK
|
MAINMUTEX_LOCK
|
||||||
|
|
||||||
u_int32_t num;
|
uint32_t num;
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
num = 0;
|
num = 0;
|
||||||
@ -1284,7 +1321,7 @@ RTPRawPacket *RTPUDPv6Transmitter::GetNextPacket()
|
|||||||
|
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_IPV6MULTICAST
|
#ifdef RTP_SUPPORT_IPV6MULTICAST
|
||||||
bool RTPUDPv6Transmitter::SetMulticastTTL(u_int8_t ttl)
|
bool RTPUDPv6Transmitter::SetMulticastTTL(uint8_t ttl)
|
||||||
{
|
{
|
||||||
int ttl2,status;
|
int ttl2,status;
|
||||||
|
|
||||||
@ -1351,12 +1388,12 @@ int RTPUDPv6Transmitter::PollSocket(bool rtp)
|
|||||||
{
|
{
|
||||||
RTPRawPacket *pack;
|
RTPRawPacket *pack;
|
||||||
RTPIPv6Address *addr;
|
RTPIPv6Address *addr;
|
||||||
u_int8_t *datacopy;
|
uint8_t *datacopy;
|
||||||
|
|
||||||
addr = new RTPIPv6Address(srcaddr.sin6_addr,ntohs(srcaddr.sin6_port));
|
addr = new RTPIPv6Address(srcaddr.sin6_addr,ntohs(srcaddr.sin6_port));
|
||||||
if (addr == 0)
|
if (addr == 0)
|
||||||
return ERR_RTP_OUTOFMEM;
|
return ERR_RTP_OUTOFMEM;
|
||||||
datacopy = new u_int8_t[recvlen];
|
datacopy = new uint8_t[recvlen];
|
||||||
if (datacopy == 0)
|
if (datacopy == 0)
|
||||||
{
|
{
|
||||||
delete addr;
|
delete addr;
|
||||||
@ -1379,7 +1416,7 @@ int RTPUDPv6Transmitter::PollSocket(bool rtp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv6Transmitter::ProcessAddAcceptIgnoreEntry(in6_addr ip,u_int16_t port)
|
int RTPUDPv6Transmitter::ProcessAddAcceptIgnoreEntry(in6_addr ip,uint16_t port)
|
||||||
{
|
{
|
||||||
acceptignoreinfo.GotoElement(ip);
|
acceptignoreinfo.GotoElement(ip);
|
||||||
if (acceptignoreinfo.HasCurrentElement()) // An entry for this IP address already exists
|
if (acceptignoreinfo.HasCurrentElement()) // An entry for this IP address already exists
|
||||||
@ -1393,7 +1430,7 @@ int RTPUDPv6Transmitter::ProcessAddAcceptIgnoreEntry(in6_addr ip,u_int16_t port)
|
|||||||
}
|
}
|
||||||
else if (!portinf->all)
|
else if (!portinf->all)
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = portinf->portlist.begin();
|
begin = portinf->portlist.begin();
|
||||||
end = portinf->portlist.end();
|
end = portinf->portlist.end();
|
||||||
@ -1440,7 +1477,7 @@ void RTPUDPv6Transmitter::ClearAcceptIgnoreInfo()
|
|||||||
acceptignoreinfo.Clear();
|
acceptignoreinfo.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int RTPUDPv6Transmitter::ProcessDeleteAcceptIgnoreEntry(in6_addr ip,u_int16_t port)
|
int RTPUDPv6Transmitter::ProcessDeleteAcceptIgnoreEntry(in6_addr ip,uint16_t port)
|
||||||
{
|
{
|
||||||
acceptignoreinfo.GotoElement(ip);
|
acceptignoreinfo.GotoElement(ip);
|
||||||
if (!acceptignoreinfo.HasCurrentElement())
|
if (!acceptignoreinfo.HasCurrentElement())
|
||||||
@ -1459,7 +1496,7 @@ int RTPUDPv6Transmitter::ProcessDeleteAcceptIgnoreEntry(in6_addr ip,u_int16_t po
|
|||||||
if (inf->all) // currently, all ports are selected. Add the one to remove to the list
|
if (inf->all) // currently, all ports are selected. Add the one to remove to the list
|
||||||
{
|
{
|
||||||
// we have to check if the list doesn't contain the port already
|
// we have to check if the list doesn't contain the port already
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1472,7 +1509,7 @@ int RTPUDPv6Transmitter::ProcessDeleteAcceptIgnoreEntry(in6_addr ip,u_int16_t po
|
|||||||
}
|
}
|
||||||
else // check if we can find the port in the list
|
else // check if we can find the port in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::iterator it,begin,end;
|
std::list<uint16_t>::iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1491,7 +1528,7 @@ int RTPUDPv6Transmitter::ProcessDeleteAcceptIgnoreEntry(in6_addr ip,u_int16_t po
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,u_int16_t srcport)
|
bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,uint16_t srcport)
|
||||||
{
|
{
|
||||||
if (receivemode == RTPTransmitter::AcceptSome)
|
if (receivemode == RTPTransmitter::AcceptSome)
|
||||||
{
|
{
|
||||||
@ -1504,7 +1541,7 @@ bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,u_int16_t srcport)
|
|||||||
inf = acceptignoreinfo.GetCurrentElement();
|
inf = acceptignoreinfo.GetCurrentElement();
|
||||||
if (!inf->all) // only accept the ones in the list
|
if (!inf->all) // only accept the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1517,7 +1554,7 @@ bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,u_int16_t srcport)
|
|||||||
}
|
}
|
||||||
else // accept all, except the ones in the list
|
else // accept all, except the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1540,7 +1577,7 @@ bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,u_int16_t srcport)
|
|||||||
inf = acceptignoreinfo.GetCurrentElement();
|
inf = acceptignoreinfo.GetCurrentElement();
|
||||||
if (!inf->all) // ignore the ports in the list
|
if (!inf->all) // ignore the ports in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1553,7 +1590,7 @@ bool RTPUDPv6Transmitter::ShouldAcceptData(in6_addr srcip,u_int16_t srcport)
|
|||||||
}
|
}
|
||||||
else // ignore all, except the ones in the list
|
else // ignore all, except the ones in the list
|
||||||
{
|
{
|
||||||
std::list<u_int16_t>::const_iterator it,begin,end;
|
std::list<uint16_t>::const_iterator it,begin,end;
|
||||||
|
|
||||||
begin = inf->portlist.begin();
|
begin = inf->portlist.begin();
|
||||||
end = inf->portlist.end();
|
end = inf->portlist.end();
|
||||||
@ -1728,7 +1765,7 @@ bool RTPUDPv6Transmitter::GetLocalIPList_Interfaces()
|
|||||||
|
|
||||||
while (tmp != 0)
|
while (tmp != 0)
|
||||||
{
|
{
|
||||||
if (tmp->ifa_addr->sa_family == AF_INET6)
|
if (tmp->ifa_addr != 0 && tmp->ifa_addr->sa_family == AF_INET6)
|
||||||
{
|
{
|
||||||
struct sockaddr_in6 *inaddr = (struct sockaddr_in6 *)tmp->ifa_addr;
|
struct sockaddr_in6 *inaddr = (struct sockaddr_in6 *)tmp->ifa_addr;
|
||||||
localIPs.push_back(inaddr->sin6_addr);
|
localIPs.push_back(inaddr->sin6_addr);
|
||||||
@ -1826,9 +1863,9 @@ void RTPUDPv6Transmitter::Dump()
|
|||||||
std::cout << "Not created" << std::endl;
|
std::cout << "Not created" << std::endl;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char str[1024];
|
char str[48];
|
||||||
in6_addr ip;
|
in6_addr ip;
|
||||||
u_int16_t ip16[8];
|
uint16_t ip16[8];
|
||||||
std::list<in6_addr>::const_iterator it;
|
std::list<in6_addr>::const_iterator it;
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
@ -1836,15 +1873,16 @@ void RTPUDPv6Transmitter::Dump()
|
|||||||
std::cout << "RTP socket descriptor: " << rtpsock << std::endl;
|
std::cout << "RTP socket descriptor: " << rtpsock << std::endl;
|
||||||
std::cout << "RTCP socket descriptor: " << rtcpsock << std::endl;
|
std::cout << "RTCP socket descriptor: " << rtcpsock << std::endl;
|
||||||
ip = bindIP;
|
ip = bindIP;
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2) { ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8); ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]); }
|
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]); }
|
||||||
sprintf(str,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
std::cout << "Bind IP address: " << str << std::endl;
|
std::cout << "Bind IP address: " << str << std::endl;
|
||||||
|
std::Cout << "Multicast interface index: " << mcastifidx << std::endl;
|
||||||
std::cout << "Local IP addresses:" << std::endl;
|
std::cout << "Local IP addresses:" << std::endl;
|
||||||
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
for (it = localIPs.begin() ; it != localIPs.end() ; it++)
|
||||||
{
|
{
|
||||||
ip = (*it);
|
ip = (*it);
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2) { ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8); ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]); }
|
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]); }
|
||||||
sprintf(str,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
std::cout << " " << str << std::endl;
|
std::cout << " " << str << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << "Multicast TTL: " << (int)multicastTTL << std::endl;
|
std::cout << "Multicast TTL: " << (int)multicastTTL << std::endl;
|
||||||
@ -1867,8 +1905,8 @@ void RTPUDPv6Transmitter::Dump()
|
|||||||
while(acceptignoreinfo.HasCurrentElement())
|
while(acceptignoreinfo.HasCurrentElement())
|
||||||
{
|
{
|
||||||
ip = acceptignoreinfo.GetCurrentKey();
|
ip = acceptignoreinfo.GetCurrentKey();
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2) { ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8); ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]); }
|
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]); }
|
||||||
sprintf(str,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
PortInfo *pinfo = acceptignoreinfo.GetCurrentElement();
|
PortInfo *pinfo = acceptignoreinfo.GetCurrentElement();
|
||||||
std::cout << " " << str << ": ";
|
std::cout << " " << str << ": ";
|
||||||
if (pinfo->all)
|
if (pinfo->all)
|
||||||
@ -1878,7 +1916,7 @@ void RTPUDPv6Transmitter::Dump()
|
|||||||
std::cout << ", except ";
|
std::cout << ", except ";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<u_int16_t>::const_iterator it;
|
std::list<uint16_t>::const_iterator it;
|
||||||
|
|
||||||
for (it = pinfo->portlist.begin() ; it != pinfo->portlist.end() ; )
|
for (it = pinfo->portlist.begin() ; it != pinfo->portlist.end() ; )
|
||||||
{
|
{
|
||||||
@ -1922,8 +1960,8 @@ void RTPUDPv6Transmitter::Dump()
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
ip = multicastgroups.GetCurrentElement();
|
ip = multicastgroups.GetCurrentElement();
|
||||||
for (i = 0,j = 0 ; j < 8 ; j++,i += 2) { ip16[j] = (((u_int16_t)ip.s6_addr[i])<<8); ip16[j] |= ((u_int16_t)ip.s6_addr[i+1]); }
|
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]); }
|
||||||
sprintf(str,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
snprintf(str,48,"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X",(int)ip16[0],(int)ip16[1],(int)ip16[2],(int)ip16[3],(int)ip16[4],(int)ip16[5],(int)ip16[6],(int)ip16[7]);
|
||||||
std::cout << " " << str << std::endl;
|
std::cout << " " << str << std::endl;
|
||||||
multicastgroups.GotoNextElement();
|
multicastgroups.GotoNextElement();
|
||||||
} while (multicastgroups.HasCurrentElement());
|
} while (multicastgroups.HasCurrentElement());
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
This file is a part of JRTPLIB
|
This file is a part of JRTPLIB
|
||||||
Copyright (c) 1999-2005 Jori Liesenborgs
|
Copyright (c) 1999-2006 Jori Liesenborgs
|
||||||
|
|
||||||
Contact: jori@lumumba.uhasselt.be
|
Contact: jori@lumumba.uhasselt.be
|
||||||
|
|
||||||
@ -58,21 +58,24 @@
|
|||||||
class RTPUDPv6TransmissionParams : public RTPTransmissionParams
|
class RTPUDPv6TransmissionParams : public RTPTransmissionParams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RTPUDPv6TransmissionParams():RTPTransmissionParams(RTPTransmitter::IPv6UDPProto) { portbase = RTPUDPV6TRANS_DEFAULTPORTBASE; for (int i = 0 ; i < 16 ; i++) bindIP.s6_addr[i] = 0; multicastTTL = 1; }
|
RTPUDPv6TransmissionParams():RTPTransmissionParams(RTPTransmitter::IPv6UDPProto) { portbase = RTPUDPV6TRANS_DEFAULTPORTBASE; for (int i = 0 ; i < 16 ; i++) bindIP.s6_addr[i] = 0; multicastTTL = 1; mcastifidx = 0; }
|
||||||
void SetBindIP(in6_addr ip) { bindIP = ip; }
|
void SetBindIP(in6_addr ip) { bindIP = ip; }
|
||||||
void SetPortbase(u_int16_t pbase) { portbase = pbase; }
|
void SetMulticastInterfaceIndex(unsigned int idx) { mcastifidx = idx; }
|
||||||
void SetMulticastTTL(u_int8_t mcastTTL) { multicastTTL = mcastTTL; }
|
void SetPortbase(uint16_t pbase) { portbase = pbase; }
|
||||||
|
void SetMulticastTTL(uint8_t mcastTTL) { multicastTTL = mcastTTL; }
|
||||||
void SetLocalIPList(std::list<in6_addr> &iplist) { localIPs = iplist; }
|
void SetLocalIPList(std::list<in6_addr> &iplist) { localIPs = iplist; }
|
||||||
void ClearLocalIPList() { localIPs.clear(); }
|
void ClearLocalIPList() { localIPs.clear(); }
|
||||||
in6_addr GetBindIP() const { return bindIP; }
|
in6_addr GetBindIP() const { return bindIP; }
|
||||||
u_int16_t GetPortbase() const { return portbase; }
|
unsigned int GetMulticastInterfaceIndex() const { return mcastifidx; }
|
||||||
u_int8_t GetMulticastTTL() const { return multicastTTL; }
|
uint16_t GetPortbase() const { return portbase; }
|
||||||
|
uint8_t GetMulticastTTL() const { return multicastTTL; }
|
||||||
const std::list<in6_addr> &GetLocalIPList() const { return localIPs; }
|
const std::list<in6_addr> &GetLocalIPList() const { return localIPs; }
|
||||||
private:
|
private:
|
||||||
u_int16_t portbase;
|
uint16_t portbase;
|
||||||
in6_addr bindIP;
|
in6_addr bindIP;
|
||||||
|
unsigned int mcastifidx;
|
||||||
std::list<in6_addr> localIPs;
|
std::list<in6_addr> localIPs;
|
||||||
u_int8_t multicastTTL;
|
uint8_t multicastTTL;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RTPUDPv6TransmissionInfo : public RTPTransmissionInfo
|
class RTPUDPv6TransmissionInfo : public RTPTransmissionInfo
|
||||||
@ -91,8 +94,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
#ifdef RTP_SUPPORT_INLINETEMPLATEPARAM
|
||||||
inline int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d) { in6_addr ip = d.GetIP(); return ((((u_int32_t)ip.s6_addr[12])<<24)|(((u_int32_t)ip.s6_addr[13])<<16)|(((u_int32_t)ip.s6_addr[14])<<8)|((u_int32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
inline int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d) { in6_addr ip = d.GetIP(); return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
||||||
inline int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip) { return ((((u_int32_t)ip.s6_addr[12])<<24)|(((u_int32_t)ip.s6_addr[13])<<16)|(((u_int32_t)ip.s6_addr[14])<<8)|((u_int32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
inline int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip) { return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
|
||||||
#else // No support for inline function as template parameter
|
#else // No support for inline function as template parameter
|
||||||
int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d);
|
int RTPUDPv6Trans_GetHashIndex_IPv6Dest(const RTPIPv6Destination &d);
|
||||||
int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip);
|
int RTPUDPv6Trans_GetHashIndex_in6_addr(const in6_addr &ip);
|
||||||
@ -113,7 +116,7 @@ public:
|
|||||||
void Destroy();
|
void Destroy();
|
||||||
RTPTransmissionInfo *GetTransmissionInfo();
|
RTPTransmissionInfo *GetTransmissionInfo();
|
||||||
|
|
||||||
int GetLocalHostName(u_int8_t *buffer,size_t *bufferlength);
|
int GetLocalHostName(uint8_t *buffer,size_t *bufferlength);
|
||||||
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
bool ComesFromThisTransmitter(const RTPAddress *addr);
|
||||||
size_t GetHeaderOverhead() { return RTPUDPV6TRANS_HEADERSIZE; }
|
size_t GetHeaderOverhead() { return RTPUDPV6TRANS_HEADERSIZE; }
|
||||||
|
|
||||||
@ -125,8 +128,8 @@ public:
|
|||||||
int SendRTCPData(const void *data,size_t len);
|
int SendRTCPData(const void *data,size_t len);
|
||||||
|
|
||||||
void ResetPacketCount();
|
void ResetPacketCount();
|
||||||
u_int32_t GetNumRTPPacketsSent();
|
uint32_t GetNumRTPPacketsSent();
|
||||||
u_int32_t GetNumRTCPPacketsSent();
|
uint32_t GetNumRTCPPacketsSent();
|
||||||
|
|
||||||
int AddDestination(const RTPAddress &addr);
|
int AddDestination(const RTPAddress &addr);
|
||||||
int DeleteDestination(const RTPAddress &addr);
|
int DeleteDestination(const RTPAddress &addr);
|
||||||
@ -158,12 +161,12 @@ private:
|
|||||||
void AddLoopbackAddress();
|
void AddLoopbackAddress();
|
||||||
void FlushPackets();
|
void FlushPackets();
|
||||||
int PollSocket(bool rtp);
|
int PollSocket(bool rtp);
|
||||||
int ProcessAddAcceptIgnoreEntry(in6_addr ip,u_int16_t port);
|
int ProcessAddAcceptIgnoreEntry(in6_addr ip,uint16_t port);
|
||||||
int ProcessDeleteAcceptIgnoreEntry(in6_addr ip,u_int16_t port);
|
int ProcessDeleteAcceptIgnoreEntry(in6_addr ip,uint16_t port);
|
||||||
#ifdef RTP_SUPPORT_IPV6MULTICAST
|
#ifdef RTP_SUPPORT_IPV6MULTICAST
|
||||||
bool SetMulticastTTL(u_int8_t ttl);
|
bool SetMulticastTTL(uint8_t ttl);
|
||||||
#endif // RTP_SUPPORT_IPV6MULTICAST
|
#endif // RTP_SUPPORT_IPV6MULTICAST
|
||||||
bool ShouldAcceptData(in6_addr srcip,u_int16_t srcport);
|
bool ShouldAcceptData(in6_addr srcip,uint16_t srcport);
|
||||||
void ClearAcceptIgnoreInfo();
|
void ClearAcceptIgnoreInfo();
|
||||||
|
|
||||||
bool init;
|
bool init;
|
||||||
@ -171,12 +174,13 @@ private:
|
|||||||
bool waitingfordata;
|
bool waitingfordata;
|
||||||
jrtp_socket_t rtpsock,rtcpsock;
|
jrtp_socket_t rtpsock,rtcpsock;
|
||||||
in6_addr bindIP;
|
in6_addr bindIP;
|
||||||
|
unsigned int mcastifidx;
|
||||||
std::list<in6_addr> localIPs;
|
std::list<in6_addr> localIPs;
|
||||||
u_int16_t portbase;
|
uint16_t portbase;
|
||||||
u_int8_t multicastTTL;
|
uint8_t multicastTTL;
|
||||||
RTPTransmitter::ReceiveMode receivemode;
|
RTPTransmitter::ReceiveMode receivemode;
|
||||||
|
|
||||||
u_int8_t *localhostname;
|
uint8_t *localhostname;
|
||||||
size_t localhostnamelength;
|
size_t localhostnamelength;
|
||||||
|
|
||||||
RTPHashTable<const RTPIPv6Destination,RTPUDPv6Trans_GetHashIndex_IPv6Dest,RTPUDPV6TRANS_HASHSIZE> destinations;
|
RTPHashTable<const RTPIPv6Destination,RTPUDPv6Trans_GetHashIndex_IPv6Dest,RTPUDPV6TRANS_HASHSIZE> destinations;
|
||||||
@ -194,7 +198,7 @@ private:
|
|||||||
PortInfo() { all = false; }
|
PortInfo() { all = false; }
|
||||||
|
|
||||||
bool all;
|
bool all;
|
||||||
std::list<u_int16_t> portlist;
|
std::list<uint16_t> portlist;
|
||||||
};
|
};
|
||||||
|
|
||||||
RTPKeyHashTable<const in6_addr,PortInfo*,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> acceptignoreinfo;
|
RTPKeyHashTable<const in6_addr,PortInfo*,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> acceptignoreinfo;
|
||||||
@ -209,7 +213,7 @@ private:
|
|||||||
int threadsafe;
|
int threadsafe;
|
||||||
#endif // RTP_SUPPORT_THREAD
|
#endif // RTP_SUPPORT_THREAD
|
||||||
|
|
||||||
u_int32_t rtppackcount,rtcppackcount;
|
uint32_t rtppackcount,rtcppackcount;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RTP_SUPPORT_IPV6
|
#endif // RTP_SUPPORT_IPV6
|
||||||
|
@ -75,10 +75,6 @@ EGREP = @EGREP@
|
|||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
F77 = @F77@
|
||||||
FFLAGS = @FFLAGS@
|
FFLAGS = @FFLAGS@
|
||||||
GST_CFLAGS = @GST_CFLAGS@
|
|
||||||
GST_LIBS = @GST_LIBS@
|
|
||||||
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
|
|
||||||
GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
@ -100,18 +96,15 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
|||||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
RTP_ENDIAN = @RTP_ENDIAN@
|
RTP_ENDIAN = @RTP_ENDIAN@
|
||||||
RTP_FILIO = @RTP_FILIO@
|
RTP_FILIO = @RTP_FILIO@
|
||||||
RTP_GSTINCLUDES = @RTP_GSTINCLUDES@
|
|
||||||
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
RTP_HAVE_SOCKADDR_LEN = @RTP_HAVE_SOCKADDR_LEN@
|
||||||
RTP_LINKLIBS = @RTP_LINKLIBS@
|
RTP_LINKLIBS = @RTP_LINKLIBS@
|
||||||
RTP_SOCKIO = @RTP_SOCKIO@
|
RTP_SOCKIO = @RTP_SOCKIO@
|
||||||
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
RTP_SOCKLENTYPE_UINT = @RTP_SOCKLENTYPE_UINT@
|
||||||
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
RTP_SUPPORT_GETLOGINR = @RTP_SUPPORT_GETLOGINR@
|
||||||
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
RTP_SUPPORT_GNUDRAND = @RTP_SUPPORT_GNUDRAND@
|
||||||
RTP_SUPPORT_GST = @RTP_SUPPORT_GST@
|
|
||||||
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
RTP_SUPPORT_IFADDRS = @RTP_SUPPORT_IFADDRS@
|
||||||
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
RTP_SUPPORT_INLINETEMPLATEPARAM = @RTP_SUPPORT_INLINETEMPLATEPARAM@
|
||||||
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
RTP_SUPPORT_IPV4MULTICAST = @RTP_SUPPORT_IPV4MULTICAST@
|
||||||
|
@ -9,7 +9,7 @@ int main(void)
|
|||||||
if (sizeof(char) == 1)
|
if (sizeof(char) == 1)
|
||||||
{
|
{
|
||||||
printf("typedef char int8_t;\n");
|
printf("typedef char int8_t;\n");
|
||||||
printf("typedef unsigned char u_int8_t;\n");
|
printf("typedef unsigned char uint8_t;\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
@ -17,7 +17,7 @@ int main(void)
|
|||||||
if (sizeof(short) == 2)
|
if (sizeof(short) == 2)
|
||||||
{
|
{
|
||||||
printf("typedef short int16_t;\n");
|
printf("typedef short int16_t;\n");
|
||||||
printf("typedef unsigned short u_int16_t;\n");
|
printf("typedef unsigned short uint16_t;\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
@ -25,14 +25,14 @@ int main(void)
|
|||||||
if (sizeof(int) == 4)
|
if (sizeof(int) == 4)
|
||||||
{
|
{
|
||||||
printf("typedef int int32_t;\n");
|
printf("typedef int int32_t;\n");
|
||||||
printf("typedef unsigned int u_int32_t;\n\n");
|
printf("typedef unsigned int uint32_t;\n\n");
|
||||||
printf("#endif // RTPTYPES_H\n");
|
printf("#endif // RTPTYPES_H\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (sizeof(long) == 4)
|
if (sizeof(long) == 4)
|
||||||
{
|
{
|
||||||
printf("typedef long int32_t;\n");
|
printf("typedef long int32_t;\n");
|
||||||
printf("typedef unsigned long u_int32_t;\n\n");
|
printf("typedef unsigned long uint32_t;\n\n");
|
||||||
printf("#endif // RTPTYPES_H\n");
|
printf("#endif // RTPTYPES_H\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user