Attempt to autodetect the nonportable pthread kill all other threads.
YSIP channel supports reinvite and config file (for codecs for now). git-svn-id: http://voip.null.ro/svn/yate@180 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
734b91e980
commit
dbbd564a9b
|
@ -226,6 +226,9 @@ DataBlock.o: @srcdir@/DataBlock.cpp $(MKDEPS) @srcdir@/telengine.h @srcdir@/tele
|
||||||
Mutex.o: @srcdir@/Mutex.cpp $(MKDEPS) @srcdir@/telengine.h
|
Mutex.o: @srcdir@/Mutex.cpp $(MKDEPS) @srcdir@/telengine.h
|
||||||
$(COMPILE) @MUTEX_HACK@ -c $<
|
$(COMPILE) @MUTEX_HACK@ -c $<
|
||||||
|
|
||||||
|
Thread.o: @srcdir@/Thread.cpp $(MKDEPS) @srcdir@/telengine.h
|
||||||
|
$(COMPILE) @THREAD_KILL@ -c $<
|
||||||
|
|
||||||
%.o: @srcdir@/%.cpp $(MKDEPS) @srcdir@/telengine.h
|
%.o: @srcdir@/%.cpp $(MKDEPS) @srcdir@/telengine.h
|
||||||
$(COMPILE) -c $<
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
[general]
|
||||||
|
; This section sets global variables of the implementation
|
||||||
|
|
||||||
|
; port: int: SIP UDP port
|
||||||
|
;port=5060
|
||||||
|
|
||||||
|
|
||||||
|
[codecs]
|
||||||
|
; This section allows to individually enable or disable the codecs
|
||||||
|
|
||||||
|
; default: bool: Enable all unlisted codecs by default
|
||||||
|
;default=enable
|
||||||
|
|
||||||
|
; mulaw: bool: Companded-only G711 mu-law (PCMU/8000)
|
||||||
|
;mulaw=default
|
||||||
|
|
||||||
|
; alaw: bool: Companded-only G711 a-law (PCMU/8000)
|
||||||
|
;alaw=default
|
||||||
|
|
||||||
|
; gsm: bool: European GSM 06.10 (GSM/8000)
|
||||||
|
;gsm=default
|
||||||
|
|
||||||
|
; lpc10: bool: Linear Prediction Codec (LPC/8000)
|
||||||
|
;lpc10=default
|
||||||
|
|
||||||
|
; slin: bool: Signed Linear 16-bit uncompressed (L16/8000)
|
||||||
|
;slin=default
|
||||||
|
|
||||||
|
; g723: bool: ITU G.723 all variations (G723/8000)
|
||||||
|
;g723=default
|
||||||
|
|
||||||
|
; g726: bool: ITU G.726 32-bit (G726-32/8000)
|
||||||
|
;g726=default
|
||||||
|
|
||||||
|
; g728: bool: ITU G.728 all variations (G728/8000)
|
||||||
|
;g728=default
|
||||||
|
|
||||||
|
; g729: bool: ITU G.729 all variations (G729/8000)
|
||||||
|
;g729=default
|
||||||
|
|
23
configure.in
23
configure.in
|
@ -73,6 +73,29 @@ fi
|
||||||
AC_MSG_RESULT([$have_mutex_settype])
|
AC_MSG_RESULT([$have_mutex_settype])
|
||||||
AC_SUBST(MUTEX_HACK)
|
AC_SUBST(MUTEX_HACK)
|
||||||
|
|
||||||
|
THREAD_KILL=""
|
||||||
|
AC_MSG_CHECKING([for pthread_kill_other_threads_np declaration])
|
||||||
|
AC_LANG_SAVE
|
||||||
|
AC_LANG_C
|
||||||
|
SAVE_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -Wall -Werror"
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
],[
|
||||||
|
pthread_kill_other_threads_np();
|
||||||
|
],
|
||||||
|
have_pthread_kill="yes",
|
||||||
|
have_pthread_kill="no"
|
||||||
|
)
|
||||||
|
CFLAGS="$SAVE_CFLAGS"
|
||||||
|
AC_LANG_RESTORE
|
||||||
|
if [[ "$have_pthread_kill" = "yes" ]]; then
|
||||||
|
THREAD_KILL="-DTHREAD_KILL"
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$have_pthread_kill])
|
||||||
|
AC_SUBST(THREAD_KILL)
|
||||||
|
|
||||||
# Check for compile options
|
# Check for compile options
|
||||||
INLINE_FLAGS=""
|
INLINE_FLAGS=""
|
||||||
AC_ARG_ENABLE(inline,AC_HELP_STRING([--enable-inline],[Enable inlining of functions]),want_inline=$enableval,want_inline=auto)
|
AC_ARG_ENABLE(inline,AC_HELP_STRING([--enable-inline],[Enable inlining of functions]),want_inline=$enableval,want_inline=auto)
|
||||||
|
|
|
@ -237,7 +237,7 @@ void ThreadPrivate::killall()
|
||||||
// last solution - a REALLY BIG tool!
|
// last solution - a REALLY BIG tool!
|
||||||
// usually too big since many libraries have threads of their own...
|
// usually too big since many libraries have threads of their own...
|
||||||
if (sledgehammer) {
|
if (sledgehammer) {
|
||||||
#ifdef __linux__
|
#ifdef THREAD_KILL
|
||||||
Debug(DebugGoOn,"Brutally killing remaining threads!");
|
Debug(DebugGoOn,"Brutally killing remaining threads!");
|
||||||
::pthread_kill_other_threads_np();
|
::pthread_kill_other_threads_np();
|
||||||
#else
|
#else
|
||||||
|
@ -355,7 +355,7 @@ void Thread::yield()
|
||||||
|
|
||||||
void Thread::preExec()
|
void Thread::preExec()
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#ifdef THREAD_KILL
|
||||||
::pthread_kill_other_threads_np();
|
::pthread_kill_other_threads_np();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,6 +195,8 @@ private:
|
||||||
String m_rtpAddr;
|
String m_rtpAddr;
|
||||||
String m_rtpPort;
|
String m_rtpPort;
|
||||||
String m_rtpFormat;
|
String m_rtpFormat;
|
||||||
|
int m_rtpSession;
|
||||||
|
int m_rtpVersion;
|
||||||
String m_formats;
|
String m_formats;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -616,7 +618,8 @@ YateSIPConnection* YateSIPConnection::find(const SIPDialog& id)
|
||||||
|
|
||||||
// Incoming call constructor - after call.route but before call.execute
|
// Incoming call constructor - after call.route but before call.execute
|
||||||
YateSIPConnection::YateSIPConnection(Message& msg, SIPTransaction* tr)
|
YateSIPConnection::YateSIPConnection(Message& msg, SIPTransaction* tr)
|
||||||
: m_tr(tr), m_hungup(false), m_byebye(true), m_state(Incoming)
|
: m_tr(tr), m_hungup(false), m_byebye(true), m_state(Incoming),
|
||||||
|
m_rtpSession(0), m_rtpVersion(0)
|
||||||
{
|
{
|
||||||
Debug(DebugAll,"YateSIPConnection::YateSIPConnection(%p) [%p]",tr,this);
|
Debug(DebugAll,"YateSIPConnection::YateSIPConnection(%p) [%p]",tr,this);
|
||||||
s_mutex.lock();
|
s_mutex.lock();
|
||||||
|
@ -637,7 +640,8 @@ YateSIPConnection::YateSIPConnection(Message& msg, SIPTransaction* tr)
|
||||||
|
|
||||||
// Outgoing call constructor - in call.execute handler
|
// Outgoing call constructor - in call.execute handler
|
||||||
YateSIPConnection::YateSIPConnection(Message& msg, const String& uri)
|
YateSIPConnection::YateSIPConnection(Message& msg, const String& uri)
|
||||||
: m_tr(0), m_hungup(false), m_byebye(true), m_state(Outgoing), m_uri(uri)
|
: m_tr(0), m_hungup(false), m_byebye(true), m_state(Outgoing), m_uri(uri),
|
||||||
|
m_rtpSession(0), m_rtpVersion(0)
|
||||||
{
|
{
|
||||||
Debug(DebugAll,"YateSIPConnection::YateSIPConnection(%p,'%s') [%p]",
|
Debug(DebugAll,"YateSIPConnection::YateSIPConnection(%p,'%s') [%p]",
|
||||||
&msg,uri.c_str(),this);
|
&msg,uri.c_str(),this);
|
||||||
|
@ -814,11 +818,14 @@ SDPBody* YateSIPConnection::createSDP(const char* addr, const char* port, const
|
||||||
{
|
{
|
||||||
Debug(DebugAll,"YateSIPConnection::createSDP('%s','%s','%s') [%p]",
|
Debug(DebugAll,"YateSIPConnection::createSDP('%s','%s','%s') [%p]",
|
||||||
addr,port,formats,this);
|
addr,port,formats,this);
|
||||||
int t = Time::now() / 10000000000ULL;
|
if (m_rtpSession)
|
||||||
|
++m_rtpVersion;
|
||||||
|
else
|
||||||
|
m_rtpVersion = m_rtpSession = Time::now() / 10000000000ULL;
|
||||||
String tmp;
|
String tmp;
|
||||||
tmp << "IN IP4 " << addr;
|
tmp << "IN IP4 " << addr;
|
||||||
String owner;
|
String owner;
|
||||||
owner << "1001 " << t << " " << t << " " << tmp;
|
owner << "1 " << m_rtpSession << " " << m_rtpVersion << " " << tmp;
|
||||||
String frm(format ? format : formats);
|
String frm(format ? format : formats);
|
||||||
if (frm.null())
|
if (frm.null())
|
||||||
frm = "alaw,mulaw";
|
frm = "alaw,mulaw";
|
||||||
|
|
Loading…
Reference in New Issue