Skip to content
Snippets Groups Projects
Commit b529ed68 authored by Yun Liu's avatar Yun Liu
Browse files

Merge branch 'sip_dev' of ssh://192.168.1.16/home-local/manu/dev/sfl/sflphone into yun-pjsip

parents 188e7d7a be2757d1
No related branches found
No related tags found
No related merge requests found
......@@ -126,9 +126,7 @@ AC_CHECK_FUNCS([bzero floor gethostbyname gethrtime gettimeofday \
inet_ntoa memset mkdir pathconf pow regcomp select setlocale socket \
strchr strdup strerror strrchr strstr strtol utime])
dnl Check for exosip2
LP_CHECK_EXOSIP2
SFLPHONE_LIBS="$SFLPHONE_LIBS $EXOSIP_LIBS"
SFLPHONE_LIBS="$SFLPHONE_LIBS"
dnl Check for GNU ccRTP
PKG_PROG_PKG_CONFIG
......@@ -139,12 +137,6 @@ if test "x${have_libpj}" = "xfalse" ; then
AC_MSG_ERROR([PJSIP not found. http://www.pjsip.org/download.htm])
fi
LIBOSIP2_OSIPLISTNOPOINTER_MIN_VERSION=3.0.0
PKG_CHECK_MODULES([libosip2], [libosip2 >= ${LIBOSIP2_OSIPLISTNOPOINTER_MIN_VERSION}],
[LIBOSIP2_CFLAGS=""], [LIBOSIP2_CFLAGS="-DLIBOSIP2_WITHPOINTER"])
SIP_CFLAGS="$SIP_CFLAGS $LIBOSIP2_CFLAGS";
AC_SUBST(SIP_CFLAGS)
LIBASOUND2_MIN_VERSION=1.0
PKG_CHECK_MODULES(alsa, alsa >= ${LIBASOUND2_MIN_VERSION})
SFLPHONE_CFLAGS="$SFLPHONE_CFLAGS $libasound2_CFLAGS"
......@@ -349,26 +341,6 @@ DBUS_SERVICES_DIR="$datadir/dbus-1/services"
AC_SUBST(DBUS_SERVICES_DIR)
AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is])
dnl QT interface
AC_MSG_CHECKING([whether to enable sflphoneqt])
AC_ARG_ENABLE(sflphoneqt,
AS_HELP_STRING(
[--enable-sflphoneqt],
[enable sflphone-qt compilation @<:@default=no@:>@]
),
[with_sflphoneqt=$enableval],
[with_sflphoneqt=no]
)
AM_CONDITIONAL(WITH_QT, test "x$with_sflphoneqt" = "xyes")
AM_CONDITIONAL(include_x11, test x$with_sflphoneqt = "xyes")
if test "x$with_sflphoneqt" = "xno"; then
AC_MSG_RESULT(no)
else
AC_MSG_RESULT(yes)
gw_CHECK_QT
fi
# Go!
AC_SUBST(SFLPHONE_CFLAGS)
AC_SUBST(SFLPHONE_LIBS)
......
......@@ -54,7 +54,7 @@ sflphoned_SOURCES = \
sflphoned_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(ZEROCONFFLAGS) $(IAX_FLAGS) $(SFLPHONE_CFLAGS) $(SIP_CFLAGS)
#sflphoned_LDFLAGS = -static
sflphoned_LDADD = ./libsflphone.la $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) $(IAX_LIBS) $(EXOSIP_LIBS) $(ALSAFLAG) $(PULSEAUDIO_LIBS) $(PJSIP_LIBS)
sflphoned_LDADD = ./libsflphone.la $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) $(IAX_LIBS) $(ALSAFLAG) $(PULSEAUDIO_LIBS) $(PJSIP_LIBS)
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/libs $(libccext2_CFLAGS) $(libccgnu2_CFLAGS) $(IAX_CFLAGS) $(USER_INCLUDES) $(libdbuscpp_CFLAGS) \
-DCODECS_DIR=\""$(sflcodecdir)"\"
-DENABLE_TRACE
......
......@@ -698,7 +698,6 @@ ManagerImpl::callFailure(const CallID& id)
void
ManagerImpl::startVoiceMessageNotification(const AccountID& accountId, int nb_msg)
{
_debug("cccccccccccccccccc\n");
if (_dbus) _dbus->getCallManager()->voiceMailNotify(accountId, nb_msg) ;
}
......
File mode changed from 100755 to 100644
src/sipcall.cpp 100755 → 100644
......@@ -60,7 +60,7 @@ SIPCall::SIPCallInvite(pjsip_rx_data *rdata, pj_pool_t *pool)
_localSDP->origin.version = 0;
sdpAddOrigin();
_localSDP->name = pj_str("sflphone");
_localSDP->name = pj_str((char*)"sflphone");
sdpAddConnectionInfo();
_localSDP->time.start = _localSDP->time.stop = 0;
sdpAddMediaDescription(pool);
......@@ -101,145 +101,6 @@ SIPCall::SIPCallInvite(pjsip_rx_data *rdata, pj_pool_t *pool)
return true;
}
bool
SIPCall::SIPCallReinvite(eXosip_event_t *event)
{
if (event->cid < 1 && event->did < 1) {
_debug("SIP Failure: Invalid cid and did\n");
return false;
}
if (event->request == NULL) {
_debug("SIP Failure: No request into the event\n");
return false;
}
setCid(event->cid);
setDid(event->did);
setTid(event->tid);
setPeerInfoFromRequest(event);
sdp_message_t* remote_sdp = getRemoteSDPFromRequest(event);
if (remote_sdp == 0) {
return false;
}
sdp_media_t* remote_med = getRemoteMedia(event->tid, remote_sdp);
if (remote_med == 0) {
sdp_message_free (remote_sdp);
return false;
}
/*if (!setRemoteAudioFromSDP(remote_med, remote_sdp)) {
_debug("SIP Failure: unable to set IP address and port from SDP\n");
sdp_message_free (remote_sdp);
return false;
}
if (!setAudioCodecFromSDP(remote_med, event->tid)) {
sdp_message_free (remote_sdp);
return false;
}*/
osip_message_t *answer = 0;
eXosip_lock();
_debug("< Building Answer 200\n");
if (0 == eXosip_call_build_answer (event->tid, 200, &answer)) {
if ( 0 != sdp_complete_message(remote_sdp, answer)) {
osip_message_free(answer);
// Send 415 Unsupported media type
eXosip_call_send_answer (event->tid, 415, NULL);
_debug("< Sending Answer 415\n");
} else {
sdp_message_t *local_sdp = eXosip_get_sdp_info(answer);
sdp_media_t *local_med = NULL;
if (local_sdp != NULL) {
local_med = eXosip_get_audio_media(local_sdp);
}
if (local_sdp != NULL && local_med != NULL) {
/* search if stream is sendonly or recvonly */
int _remote_sendrecv = sdp_analyse_attribute (remote_sdp, remote_med);
int _local_sendrecv = sdp_analyse_attribute (local_sdp, local_med);
_debug(" Remote SendRecv: %d\n", _remote_sendrecv);
_debug(" Local SendRecv: %d\n", _local_sendrecv);
if (_local_sendrecv == _SENDRECV) {
if (_remote_sendrecv == _SENDONLY) { _local_sendrecv = _RECVONLY; }
else if (_remote_sendrecv == _RECVONLY) { _local_sendrecv = _SENDONLY; }
}
_debug(" Final Local SendRecv: %d\n", _local_sendrecv);
sdp_message_free (local_sdp);
}
_debug("< Sending answer 200\n");
if (0 != eXosip_call_send_answer (event->tid, 200, answer)) {
_debug("SipCall::newIncomingCall: cannot send 200 OK?\n");
}
}
}
eXosip_unlock ();
sdp_message_free (remote_sdp);
return true;
}
bool
SIPCall::SIPCallAnswered(eXosip_event_t *event)
{
if (event->cid < 1 && event->did < 1) {
_debug("SIP Failure: Invalid cid and did\n");
return false;
}
if (event->request == NULL) {
_debug("SIP Failure: No request into the event\n");
return false;
}
setCid(event->cid);
setDid(event->did);
//setPeerInfoFromResponse()
eXosip_lock ();
{
osip_message_t *ack = NULL;
int i;
i = eXosip_call_build_ack (event->did, &ack);
if (i != 0) {
_debug("SipCall::answeredCall: Cannot build ACK for call!\n");
} else {
sdp_message_t *local_sdp = NULL;
sdp_message_t *remote_sdp = NULL;
if (event->request != NULL && event->response != NULL) {
local_sdp = eXosip_get_sdp_info (event->request);
remote_sdp = eXosip_get_sdp_info (event->response);
}
if (local_sdp == NULL && remote_sdp != NULL) {
/* sdp in ACK */
i = sdp_complete_message (remote_sdp, ack);
if (i != 0) {
_debug("SipCall::answeredCall: Cannot complete ACK with sdp body?!\n");
}
}
sdp_message_free (local_sdp);
sdp_message_free (remote_sdp);
_debug("< Send ACK\n");
eXosip_call_send_ack (event->did, ack);
}
}
eXosip_unlock ();
return true;
}
bool
SIPCall::SIPCallAnsweredWithoutHold(eXosip_event_t* event)
{
return true;
}
bool
SIPCall::SIPCallAnsweredWithoutHold(pjsip_rx_data *rdata)
{
......@@ -270,193 +131,6 @@ SIPCall::SIPCallAnsweredWithoutHold(pjsip_rx_data *rdata)
}
int
SIPCall::sdp_complete_message(sdp_message_t * remote_sdp, osip_message_t * msg)
{
// Format port to a char*
if (remote_sdp == NULL) {
_debug("SipCall::sdp_complete_message: No remote SDP body found for call\n");
return -1;
}
if (msg == NULL) {
_debug("SipCall::sdp_complete_message: No message to complete\n");
return -1;
}
std::ostringstream media;
// for each medias
int iMedia = 0;
char *tmp = NULL;
#ifdef LIBOSIP2_WITHPOINTER
const osip_list_t* remote_sdp_m_medias = remote_sdp->m_medias; // old abi
#else
const osip_list_t* remote_sdp_m_medias = &(remote_sdp->m_medias);
#endif
osip_list_t* remote_med_m_payloads = 0;
while (!osip_list_eol(remote_sdp_m_medias, iMedia)) {
sdp_media_t *remote_med = (sdp_media_t *)osip_list_get(remote_sdp_m_medias, iMedia);
if (remote_med == 0) { continue; }
if (0 != osip_strcasecmp (remote_med->m_media, "audio")) {
// if this is not an "audio" media, we set it to 0
media << "m=" << remote_med->m_media << " 0 " << remote_med->m_proto << " \r\n";
} else {
std::ostringstream listCodec;
std::ostringstream listRtpMap;
// search for compatible codec: foreach payload
int iPayload = 0;
#ifdef LIBOSIP2_WITHPOINTER
remote_med_m_payloads = remote_med->m_payloads; // old abi
#else
remote_med_m_payloads = &(remote_med->m_payloads);
#endif
//while (!osip_list_eol(remote_med_m_payloads, iPayload) && iPayload < 2) {
while (!osip_list_eol(remote_med_m_payloads, iPayload)) {
tmp = (char *)osip_list_get(remote_med_m_payloads, iPayload);
if (tmp!=NULL) {
int payload = atoi(tmp);
_debug("remote payload = %s\n", tmp);
AudioCodecType audiocodec = (AudioCodecType)payload;
if (audiocodec != (AudioCodecType)-1 && _codecMap.isActive(audiocodec)) {
listCodec << payload << " ";
//listRtpMap << "a=rtpmap:" << payload << " " << audiocodec->getCodecName() << "/" << audiocodec->getClockRate();
listRtpMap << "a=rtpmap:" << payload << " " << _codecMap.getCodecName(audiocodec) << "/" << _codecMap.getSampleRate(audiocodec);
if (_codecMap.getChannel(audiocodec) != 1) {
listRtpMap << "/" << _codecMap.getChannel(audiocodec);
}
listRtpMap << "\r\n";
}
}
iPayload++;
}
if (listCodec.str().empty()) {
media << "m=" << remote_med->m_media << " 0 " << remote_med->m_proto << " \r\n";
} else {
// we add the media line + a=rtpmap list
media << "m=" << remote_med->m_media << " " << getLocalExternAudioPort() << " RTP/AVP " << listCodec.str() << "\r\n";
media << listRtpMap.str();
}
}
iMedia++;
}
char buf[4096];
snprintf (buf, 4096,
"v=0\r\n"
"o=user 0 0 IN IP4 %s\r\n"
"s=session\r\n"
"c=IN IP4 %s\r\n"
"t=0 0\r\n"
"%s\n", getLocalIp().c_str(), getLocalIp().c_str(), media.str().c_str());
osip_message_set_body (msg, buf, strlen (buf));
osip_message_set_content_type (msg, "application/sdp");
_debug(" sdp: %s", buf);
return 0;
}
int
SIPCall::sdp_analyse_attribute (sdp_message_t * sdp, sdp_media_t * med)
{
int pos;
int pos_media;
/* test media attributes */
pos = 0;
#ifdef LIBOSIP2_WITHPOINTER
const osip_list_t* med_a_attributes = med->a_attributes; // old abi
#else
const osip_list_t* med_a_attributes = &(med->a_attributes);
#endif
while (!osip_list_eol (med_a_attributes, pos)) {
sdp_attribute_t *at;
at = (sdp_attribute_t *) osip_list_get (med_a_attributes, pos);
if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "sendonly")) {
return _SENDONLY;
} else if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "recvonly")) {
return _RECVONLY;
} else if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "sendrecv")) {
return _SENDRECV;
}
pos++;
}
/* test global attributes */
pos_media = -1;
pos = 0;
#ifdef LIBOSIP2_WITHPOINTER
const osip_list_t* sdp_a_attributes = sdp->a_attributes; // old abi
#else
const osip_list_t* sdp_a_attributes = &(sdp->a_attributes);
#endif
while (!osip_list_eol (sdp_a_attributes, pos)) {
sdp_attribute_t *at;
at = (sdp_attribute_t *) osip_list_get (sdp_a_attributes, pos);
if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "sendonly")) {
return _SENDONLY;
} else if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "recvonly")) {
return _RECVONLY;
} else if (at->a_att_field != NULL &&
0 == strcmp (at->a_att_field, "sendrecv")) {
return _SENDRECV;
}
pos++;
}
return _SENDRECV;
}
bool
SIPCall::setPeerInfoFromRequest(eXosip_event_t *event)
{
// event->request should not be NULL!
char remote_uri[256] = "";
std::string name("");
std::string number("");
char *tmp = NULL;
osip_from_to_str(event->request->from, &tmp);
if (tmp != NULL) {
snprintf (remote_uri, 255, "%s", tmp);
remote_uri[255] = '\0';
osip_free (tmp);
// Get the name/number
osip_from_t *from;
osip_from_init(&from);
osip_from_parse(from, remote_uri);
char *tmpname = osip_from_get_displayname(from);
if ( tmpname != NULL ) {
name = tmpname;
}
osip_uri_t* url = osip_from_get_url(from);
if ( url != NULL && url->username != NULL) {
number = url->username;
}
osip_from_free(from);
}
_debug(" Name: %s\n", name.c_str());
_debug(" Number: %s\n", number.c_str());
_debug(" Remote URI: %s\n", remote_uri);
setPeerName(name);
setPeerNumber(number);
return true;
}
pjmedia_sdp_session*
SIPCall::getRemoteSDPFromRequest(pjsip_rx_data *rdata)
{
......@@ -472,27 +146,6 @@ SIPCall::getRemoteSDPFromRequest(pjsip_rx_data *rdata)
return sdp;
}
sdp_media_t*
SIPCall::getRemoteMedia(int tid, sdp_message_t* remote_sdp)
{
// Remote Media Port
eXosip_lock();
sdp_media_t *remote_med = eXosip_get_audio_media(remote_sdp);
eXosip_unlock();
if (remote_med == NULL || remote_med->m_port == NULL) {
// no audio media proposed
_debug("SIP Failure: unsupported media\n");
_debug("< Sending 415 Unsupported media type\n");
eXosip_lock();
eXosip_call_send_answer (tid, 415, NULL);
eXosip_unlock();
sdp_message_free (remote_sdp);
return 0;
}
return remote_med;
}
bool
SIPCall::setRemoteAudioFromSDP(pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media *remote_med)
{
......@@ -538,9 +191,9 @@ void SIPCall::sdpAddOrigin( void )
// Use Network Time Protocol format timestamp to ensure uniqueness.
_localSDP->origin.id = tv.sec + 2208988800UL;
// The type of network ( IN for INternet )
_localSDP->origin.net_type = pj_str("IN"); //STR_IN;
_localSDP->origin.net_type = pj_str((char*)"IN"); //STR_IN;
// The type of address
_localSDP->origin.addr_type = pj_str("IP4"); //STR_IP4;
_localSDP->origin.addr_type = pj_str((char*)"IP4"); //STR_IP4;
// The address of the machine from which the session was created
_localSDP->origin.addr = pj_str( (char*)_ipAddr.c_str() );
}
......@@ -562,10 +215,10 @@ void SIPCall::sdpAddMediaDescription(pj_pool_t* pool)
//nbMedia = getSDPMediaList().size();
_localSDP->media_count = 1;
med->desc.media = pj_str("audio");
med->desc.media = pj_str((char*)"audio");
med->desc.port_count = 1;
med->desc.port = getLocalExternAudioPort();
med->desc.transport = pj_str("RTP/AVP");
med->desc.transport = pj_str((char*)"RTP/AVP");
CodecsMap::iterator itr;
itr = _codecMap.getCodecsMap().begin();
......@@ -642,7 +295,7 @@ bool SIPCall::createInitialOffer(pj_pool_t *pool)
_localSDP->origin.version = 0;
sdpAddOrigin();
_localSDP->name = pj_str("sflphone");
_localSDP->name = pj_str((char*)"sflphone");
sdpAddConnectionInfo();
_localSDP->time.start = _localSDP->time.stop = 0;
sdpAddMediaDescription(pool);
......
src/sipcall.h 100755 → 100644
......@@ -25,8 +25,6 @@
#include "audio/codecDescriptor.h"
#include "sipmanager.h"
#include <eXosip2/eXosip.h>
class AudioCodec;
/**
......@@ -52,37 +50,37 @@ class SIPCall : public Call
/**
* Call Identifier
* @return int SIP call id : protected by eXosip lock
* @return int SIP call id
*/
int getCid() { return _cid; }
/**
* Call Identifier
* @param cid SIP call id : protected by eXosip lock
* @param cid SIP call id
*/
void setCid(int cid) { _cid = cid ; }
/**
* Domain identifier
* @return int SIP domain id : protected by eXosip lock
* @return int SIP domain id
*/
int getDid() { return _did; }
/**
* Domain identifier
* @param did SIP domain id : protected by eXosip lock
* @param did SIP domain id
*/
void setDid(int did) { _did = did; }
/**
* Transaction identifier
* @return int SIP transaction id : protected by eXosip lock
* @return int SIP transaction id
*/
int getTid() { return _tid; }
/**
* Transaction identifier
* @param tid SIP transaction id : protected by eXosip lock
* @param tid SIP transaction id
*/
void setTid(int tid) { _tid = tid; }
......@@ -95,31 +93,8 @@ class SIPCall : public Call
*/
bool SIPCallInvite(pjsip_rx_data *rdata, pj_pool_t *pool);
/**
* newReinviteCall is called when the IP-Phone user receives a change in the call
* it's almost an newIncomingCall but we send a 200 OK
* See: 3.7. Session with re-INVITE (IP Address Change)
* @param event eXosip Event
* @return bool True if ok
*/
bool SIPCallReinvite(eXosip_event_t *event);
/**
* Peer answered to a call (on hold or not)
* @param event eXosip Event
* @return bool True if ok
*/
bool SIPCallAnswered(eXosip_event_t *event);
/** No longer being used */
bool SIPCallAnsweredWithoutHold(eXosip_event_t *event);
bool SIPCallAnsweredWithoutHold(pjsip_rx_data *rdata);
/** No longer being used */
int sdp_complete_message(sdp_message_t * remote_sdp, osip_message_t * msg);
/**
* Save IP Address
* @param ip std::string
......@@ -155,30 +130,13 @@ class SIPCall : public Call
pjsip_inv_session *getInvSession() {return _invSession;}
private:
/** No longer being used */
int sdp_analyse_attribute (sdp_message_t * sdp, sdp_media_t * med);
/**
* Set peer name and number with event->request->from
* @param event eXosip event
* @return bool False if the event is invalid
*/
bool setPeerInfoFromRequest(eXosip_event_t *event);
/**
* Get a valid remote SDP or return a 400 bad request response if invalid
* @param event eXosip event
* @return sdp_message_t* A valid remote_sdp or 0
* @param
* @return
*/
pjmedia_sdp_session* getRemoteSDPFromRequest(pjsip_rx_data *rdata);
/** No longer being used */
sdp_message_t *getRemoteSDPFromRequest(eXosip_event_t*&){return NULL;}
/** No longer being used */
sdp_media_t* getRemoteMedia(int tid, sdp_message_t* remote_sdp);
/**
* Get a valid remote media
* @param remote_sdp pjmedia_sdp_session*
......
......@@ -622,7 +622,6 @@ void SIPManager::set_voicemail_info( AccountID account, pjsip_msg_body *body ){
// We get the notification body
msg_body = (char*)body->data;
std::cout << " body message " << msg_body.c_str() << std::endl;
// We need the position of the first character of the string voice_str
pos_begin = msg_body.find(voice_str);
......@@ -699,7 +698,6 @@ pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
method_name = "NOTIFY";
// Retrieve all the message. Should contains only the method name but ...
request = rdata->msg_info.msg->line.req.method.name.ptr;
_debug("request = %s\n", request.c_str());
// Check if the message is a notification
if( request.find( method_name ) != -1 ) {
set_voicemail_info( account_id, rdata->msg_info.msg->body );
......
File mode changed from 100755 to 100644
src/sipvoiplink.cpp 100755 → 100644
This diff is collapsed.
src/sipvoiplink.h 100755 → 100644
......@@ -23,12 +23,18 @@
#include "voiplink.h"
#include <string>
#include <eXosip2/eXosip.h>
#include <osip2/osip_mt.h>
struct pjsip_regc;
struct pj_str_t;
struct pjmedia_sdp_session;
#include <pjsip.h>
#include <pjlib-util.h>
#include <pjlib.h>
#include <pjnath/stun_config.h>
//TODO Remove this include if we don't need anything from it
#include <pjsip_simple.h>
#include <pjsip_ua.h>
#include <pjmedia/sdp.h>
#include <pjmedia/sdp_neg.h>
class EventThread;
class SIPCall;
......@@ -54,10 +60,8 @@ class SIPVoIPLink : public VoIPLink
*/
~SIPVoIPLink();
int eXosip_running;
/**
* Try to initiate the eXosip engine/thread and set config
* Try to initiate the pjsip engine/thread and set config
* @return bool True if OK
*/
bool init(void);
......@@ -165,10 +169,6 @@ class SIPVoIPLink : public VoIPLink
bool isContactPresenceSupported();
//void subscribePresenceForContact(Contact* contact);
void publishPresenceStatus(std::string status);
// TODO Not used yet
void sendMessageToContact(const CallID& id, const std::string& message);
......@@ -214,7 +214,7 @@ class SIPVoIPLink : public VoIPLink
void terminateSIPCall();
/**
* Get the local Ip by eXosip
* Get the local Ip
* only if the local ip address is to his default value: 127.0.0.1
* setLocalIpAdress
* @return bool false if not found
......@@ -293,89 +293,33 @@ class SIPVoIPLink : public VoIPLink
*/
bool setCallAudioLocal(SIPCall* call);
/**
* Create a new call and send a incoming call notification to the user
* @param event eXosip Event
*/
void SIPCallInvite(eXosip_event_t *event);
/**
* Use a exisiting call to restart the audio
* @param event eXosip Event
*/
void SIPCallReinvite(eXosip_event_t *event);
/**
* Tell the user that the call is ringing
* @param event eXosip Event
*/
void SIPCallRinging(eXosip_event_t *event);
/**
* Tell the user that the call was answered
* @param event eXosip Event
* @param
*/
void SIPCallAnswered(eXosip_event_t *event);
void SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata);
/**
* Handling 4XX error
* @param event eXosip Event
*/
void SIPCallRequestFailure(eXosip_event_t *event);
/**
* Handling 5XX/6XX error
* @param event eXosip Event
* @param
*/
void SIPCallServerFailure(SIPCall *call);
/**
* Handle registration failure cases ( SIP_FORBIDDEN , SIP_UNAUTHORIZED )
* @param event eXosip event
*/
void SIPRegistrationFailure( eXosip_event_t *event );
/**
* Handling ack (restart audio if reinvite)
* @param event eXosip Event
*/
void SIPCallAck(eXosip_event_t *event);
/**
* Handling message inside a call (like dtmf)
* @param event eXosip Event
*/
void SIPCallMessageNew(eXosip_event_t *event);
/**
* Handle an INFO with application/dtmf-relay content-type
* @param event eXosip Event
*/
bool handleDtmfRelay(eXosip_event_t *event);
/**
* Peer close the connection
* @param event eXosip Event
* @param
*/
void SIPCallClosed(SIPCall *call);
/**
* The call pointer was released
* If the call was not cleared before, report an error
* @param event eXosip Event
* @param
*/
void SIPCallReleased(SIPCall *call);
/**
* Receive a new Message request
* Option/Notify/Message
* @param event eXosip Event
*/
void SIPMessageNew(eXosip_event_t *event);
/**
* Find a SIPCall with cid from eXosip Event
* Find a SIPCall with cid
* Explication there is no DID when the dialog is not establish...
* @param cid call ID
* @return SIPCall* SIPCall pointer or 0
......@@ -383,7 +327,7 @@ class SIPVoIPLink : public VoIPLink
SIPCall* findSIPCallWithCid(int cid);
/**
* Find a SIPCall with cid and did from eXosip Event
* Find a SIPCall with cid and did
* @param cid call ID
* @param did domain ID
* @return SIPCall* SIPCall pointer or 0
......@@ -397,24 +341,9 @@ class SIPVoIPLink : public VoIPLink
*/
SIPCall* getSIPCall(const CallID& id);
/** To build sdp when call is on-hold */
int sdp_hold_call (sdp_message_t * sdp);
/** To build sdp when call is off-hold */
int sdp_off_hold_call (sdp_message_t * sdp);
/** EventThread get every incoming events */
EventThread* _evThread;
/** Tell if eXosip was stared (eXosip_init) */
/** Tell if the initialisation was done */
bool _initDone;
/** Registration identifier, needed by unregister to build message */
int _eXosipRegID;
/** Number of voicemail */
int _nMsgVoicemail;
/** when we init the listener, how many times we try to bind a port? */
int _nbTryListenAddr;
......
......@@ -66,7 +66,7 @@ class VoIPLink {
/**
* Virtual method
* Try to initiate the eXosip engine/thread and set config
* Try to initiate the pjsip engine/thread and set config
* @return bool True if OK
*/
virtual bool init (void) = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment