mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
Convert LinphoneCallParams to use MediaSessionParams C++ class.
This commit is contained in:
parent
6d54b3c46d
commit
d795a30518
19 changed files with 1388 additions and 517 deletions
|
|
@ -20,18 +20,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
#include "linphone/call_params.h"
|
||||
#include "private.h"
|
||||
|
||||
#include "conference/params/media-session-params.h"
|
||||
#include "conference/params/call-session-params-p.h"
|
||||
#include "conference/params/media-session-params-p.h"
|
||||
|
||||
|
||||
struct _LinphoneCallParams{
|
||||
belle_sip_object_t base;
|
||||
void *user_data;
|
||||
LinphonePrivate::MediaSessionParams *msp;
|
||||
};
|
||||
|
||||
BELLE_SIP_DECLARE_VPTR_NO_EXPORT(LinphoneCallParams);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Internal functions *
|
||||
******************************************************************************/
|
||||
|
||||
SalMediaProto get_proto_from_call_params(const LinphoneCallParams *params) {
|
||||
if ((params->media_encryption == LinphoneMediaEncryptionSRTP) && params->avpf_enabled) return SalProtoRtpSavpf;
|
||||
if (params->media_encryption == LinphoneMediaEncryptionSRTP) return SalProtoRtpSavp;
|
||||
if ((params->media_encryption == LinphoneMediaEncryptionDTLS) && params->avpf_enabled) return SalProtoUdpTlsRtpSavpf;
|
||||
if (params->media_encryption == LinphoneMediaEncryptionDTLS) return SalProtoUdpTlsRtpSavp;
|
||||
if (params->avpf_enabled) return SalProtoRtpAvpf;
|
||||
return SalProtoRtpAvp;
|
||||
return params->msp->getMediaProto();
|
||||
}
|
||||
|
||||
SalStreamDir sal_dir_from_call_params_dir(LinphoneMediaDirection cpdir) {
|
||||
|
|
@ -73,34 +81,16 @@ SalStreamDir get_video_dir_from_call_params(const LinphoneCallParams *params) {
|
|||
return sal_dir_from_call_params_dir(linphone_call_params_get_video_direction(params));
|
||||
}
|
||||
|
||||
void linphone_call_params_set_custom_headers(LinphoneCallParams *params, const SalCustomHeader *ch){
|
||||
if (params->custom_headers){
|
||||
sal_custom_header_free(params->custom_headers);
|
||||
params->custom_headers = NULL;
|
||||
}
|
||||
if (ch){
|
||||
params->custom_headers = sal_custom_header_clone(ch);
|
||||
}
|
||||
void linphone_call_params_set_custom_headers(LinphoneCallParams *params, const SalCustomHeader *ch) {
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setCustomHeaders(ch);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_custom_sdp_attributes(LinphoneCallParams *params, const SalCustomSdpAttribute *csa) {
|
||||
if (params->custom_sdp_attributes) {
|
||||
sal_custom_sdp_attribute_free(params->custom_sdp_attributes);
|
||||
params->custom_sdp_attributes = NULL;
|
||||
}
|
||||
if (csa) {
|
||||
params->custom_sdp_attributes = sal_custom_sdp_attribute_clone(csa);
|
||||
}
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setCustomSdpAttributes(csa);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_custom_sdp_media_attributes(LinphoneCallParams *params, LinphoneStreamType type, const SalCustomSdpAttribute *csa) {
|
||||
if (params->custom_sdp_media_attributes[type]) {
|
||||
sal_custom_sdp_attribute_free(params->custom_sdp_media_attributes[type]);
|
||||
params->custom_sdp_media_attributes[type] = NULL;
|
||||
}
|
||||
if (csa) {
|
||||
params->custom_sdp_media_attributes[type] = sal_custom_sdp_attribute_clone(csa);
|
||||
}
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setCustomSdpMediaAttributes(type, csa);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -108,202 +98,392 @@ void linphone_call_params_set_custom_sdp_media_attributes(LinphoneCallParams *pa
|
|||
* Public functions *
|
||||
******************************************************************************/
|
||||
|
||||
void linphone_call_params_add_custom_header(LinphoneCallParams *params, const char *header_name, const char *header_value){
|
||||
params->custom_headers=sal_custom_header_append(params->custom_headers,header_name,header_value);
|
||||
void linphone_call_params_add_custom_header(LinphoneCallParams *params, const char *header_name, const char *header_value) {
|
||||
params->msp->addCustomHeader(header_name, header_value);
|
||||
}
|
||||
|
||||
void linphone_call_params_add_custom_sdp_attribute(LinphoneCallParams *params, const char *attribute_name, const char *attribute_value) {
|
||||
params->custom_sdp_attributes = sal_custom_sdp_attribute_append(params->custom_sdp_attributes, attribute_name, attribute_value);
|
||||
params->msp->addCustomSdpAttribute(attribute_name, attribute_value);
|
||||
}
|
||||
|
||||
void linphone_call_params_add_custom_sdp_media_attribute(LinphoneCallParams *params, LinphoneStreamType type, const char *attribute_name, const char *attribute_value) {
|
||||
params->custom_sdp_media_attributes[type] = sal_custom_sdp_attribute_append(params->custom_sdp_media_attributes[type], attribute_name, attribute_value);
|
||||
params->msp->addCustomSdpMediaAttribute(type, attribute_name, attribute_value);
|
||||
}
|
||||
|
||||
void linphone_call_params_clear_custom_sdp_attributes(LinphoneCallParams *params) {
|
||||
linphone_call_params_set_custom_sdp_attributes(params, NULL);
|
||||
params->msp->clearCustomSdpAttributes();
|
||||
}
|
||||
|
||||
void linphone_call_params_clear_custom_sdp_media_attributes(LinphoneCallParams *params, LinphoneStreamType type) {
|
||||
linphone_call_params_set_custom_sdp_media_attributes(params, type, NULL);
|
||||
params->msp->clearCustomSdpMediaAttributes(type);
|
||||
}
|
||||
|
||||
LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *cp){
|
||||
return (LinphoneCallParams *)belle_sip_object_clone((const belle_sip_object_t *)cp);
|
||||
LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *params) {
|
||||
return (LinphoneCallParams *)belle_sip_object_clone((const belle_sip_object_t *)params);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_early_media_sending_enabled(const LinphoneCallParams *cp){
|
||||
return cp->real_early_media;
|
||||
bool_t linphone_call_params_early_media_sending_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->earlyMediaSendingEnabled();
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_early_media_sending(LinphoneCallParams *cp, bool_t enabled){
|
||||
cp->real_early_media=enabled;
|
||||
void linphone_call_params_enable_early_media_sending(LinphoneCallParams *params, bool_t enabled) {
|
||||
params->msp->enableEarlyMediaSending(enabled);
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_low_bandwidth(LinphoneCallParams *cp, bool_t enabled){
|
||||
cp->low_bandwidth=enabled;
|
||||
void linphone_call_params_enable_low_bandwidth(LinphoneCallParams *params, bool_t enabled) {
|
||||
params->msp->enableLowBandwidth(enabled);
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_audio(LinphoneCallParams *cp, bool_t enabled){
|
||||
cp->has_audio=enabled;
|
||||
if (enabled && cp->audio_dir==LinphoneMediaDirectionInactive)
|
||||
cp->audio_dir=LinphoneMediaDirectionSendRecv;
|
||||
void linphone_call_params_enable_audio(LinphoneCallParams *params, bool_t enabled) {
|
||||
params->msp->enableAudio(enabled);
|
||||
}
|
||||
|
||||
LinphoneStatus linphone_call_params_enable_realtime_text(LinphoneCallParams *params, bool_t yesno) {
|
||||
params->realtimetext_enabled=yesno;
|
||||
params->msp->enableRealtimeText(yesno);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled){
|
||||
cp->has_video=enabled;
|
||||
if (enabled && cp->video_dir==LinphoneMediaDirectionInactive)
|
||||
cp->video_dir=LinphoneMediaDirectionSendRecv;
|
||||
void linphone_call_params_enable_video(LinphoneCallParams *params, bool_t enabled) {
|
||||
params->msp->enableVideo(enabled);
|
||||
}
|
||||
|
||||
const char *linphone_call_params_get_custom_header(const LinphoneCallParams *params, const char *header_name){
|
||||
return sal_custom_header_find(params->custom_headers,header_name);
|
||||
const char *linphone_call_params_get_custom_header(const LinphoneCallParams *params, const char *header_name) {
|
||||
std::string value = params->msp->getCustomHeader(header_name);
|
||||
return value.empty() ? nullptr : value.c_str();
|
||||
}
|
||||
|
||||
const char * linphone_call_params_get_custom_sdp_attribute(const LinphoneCallParams *params, const char *attribute_name) {
|
||||
return sal_custom_sdp_attribute_find(params->custom_sdp_attributes, attribute_name);
|
||||
std::string value = params->msp->getCustomSdpAttribute(attribute_name);
|
||||
return value.empty() ? nullptr : value.c_str();
|
||||
}
|
||||
|
||||
const char * linphone_call_params_get_custom_sdp_media_attribute(const LinphoneCallParams *params, LinphoneStreamType type, const char *attribute_name) {
|
||||
return sal_custom_sdp_attribute_find(params->custom_sdp_media_attributes[type], attribute_name);
|
||||
std::string value = params->msp->getCustomSdpMediaAttribute(type, attribute_name);
|
||||
return value.empty() ? nullptr : value.c_str();
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_get_local_conference_mode(const LinphoneCallParams *cp){
|
||||
return cp->in_conference;
|
||||
bool_t linphone_call_params_get_local_conference_mode(const LinphoneCallParams *params) {
|
||||
return linphone_call_params_get_in_conference(params);
|
||||
}
|
||||
|
||||
LinphoneMediaEncryption linphone_call_params_get_media_encryption(const LinphoneCallParams *cp) {
|
||||
return cp->media_encryption;
|
||||
LinphoneMediaEncryption linphone_call_params_get_media_encryption(const LinphoneCallParams *params) {
|
||||
return params->msp->getMediaEncryption();
|
||||
}
|
||||
|
||||
LinphonePrivacyMask linphone_call_params_get_privacy(const LinphoneCallParams *params) {
|
||||
return params->privacy;
|
||||
return params->msp->getPrivacy();
|
||||
}
|
||||
|
||||
float linphone_call_params_get_received_framerate(const LinphoneCallParams *cp){
|
||||
return cp->received_fps;
|
||||
float linphone_call_params_get_received_framerate(const LinphoneCallParams *params) {
|
||||
return params->msp->getReceivedFps();
|
||||
}
|
||||
|
||||
MSVideoSize linphone_call_params_get_received_video_size(const LinphoneCallParams *cp) {
|
||||
return cp->recv_vsize;
|
||||
MSVideoSize linphone_call_params_get_received_video_size(const LinphoneCallParams *params) {
|
||||
MSVideoSize vsize;
|
||||
LinphoneVideoDefinition *vdef = params->msp->getReceivedVideoDefinition();
|
||||
if (vdef) {
|
||||
vsize.width = linphone_video_definition_get_width(vdef);
|
||||
vsize.height = linphone_video_definition_get_height(vdef);
|
||||
} else {
|
||||
vsize.width = MS_VIDEO_SIZE_UNKNOWN_W;
|
||||
vsize.height = MS_VIDEO_SIZE_UNKNOWN_H;
|
||||
}
|
||||
return vsize;
|
||||
}
|
||||
|
||||
const LinphoneVideoDefinition * linphone_call_params_get_received_video_definition(const LinphoneCallParams *cp) {
|
||||
return cp->recv_vdef;
|
||||
const LinphoneVideoDefinition * linphone_call_params_get_received_video_definition(const LinphoneCallParams *params) {
|
||||
return params->msp->getReceivedVideoDefinition();
|
||||
}
|
||||
|
||||
const char *linphone_call_params_get_record_file(const LinphoneCallParams *cp){
|
||||
return cp->record_file;
|
||||
const char *linphone_call_params_get_record_file(const LinphoneCallParams *params) {
|
||||
const std::string &value = params->msp->getRecordFilePath();
|
||||
return value.empty() ? nullptr : value.c_str();
|
||||
}
|
||||
|
||||
const char * linphone_call_params_get_rtp_profile(const LinphoneCallParams *cp) {
|
||||
return sal_media_proto_to_string(get_proto_from_call_params(cp));
|
||||
const char * linphone_call_params_get_rtp_profile(const LinphoneCallParams *params) {
|
||||
return params->msp->getRtpProfile();
|
||||
}
|
||||
|
||||
float linphone_call_params_get_sent_framerate(const LinphoneCallParams *cp){
|
||||
return cp->sent_fps;
|
||||
float linphone_call_params_get_sent_framerate(const LinphoneCallParams *params) {
|
||||
return params->msp->getSentFps();
|
||||
}
|
||||
|
||||
MSVideoSize linphone_call_params_get_sent_video_size(const LinphoneCallParams *cp) {
|
||||
return cp->sent_vsize;
|
||||
MSVideoSize linphone_call_params_get_sent_video_size(const LinphoneCallParams *params) {
|
||||
MSVideoSize vsize;
|
||||
LinphoneVideoDefinition *vdef = params->msp->getSentVideoDefinition();
|
||||
if (vdef) {
|
||||
vsize.width = linphone_video_definition_get_width(vdef);
|
||||
vsize.height = linphone_video_definition_get_height(vdef);
|
||||
} else {
|
||||
vsize.width = MS_VIDEO_SIZE_UNKNOWN_W;
|
||||
vsize.height = MS_VIDEO_SIZE_UNKNOWN_H;
|
||||
}
|
||||
return vsize;
|
||||
}
|
||||
|
||||
const LinphoneVideoDefinition * linphone_call_params_get_sent_video_definition(const LinphoneCallParams *cp) {
|
||||
return cp->sent_vdef;
|
||||
const LinphoneVideoDefinition * linphone_call_params_get_sent_video_definition(const LinphoneCallParams *params) {
|
||||
return params->msp->getSentVideoDefinition();
|
||||
}
|
||||
|
||||
const char *linphone_call_params_get_session_name(const LinphoneCallParams *cp){
|
||||
return cp->session_name;
|
||||
const char *linphone_call_params_get_session_name(const LinphoneCallParams *params) {
|
||||
const std::string &value = params->msp->getSessionName();
|
||||
return value.empty() ? nullptr : value.c_str();
|
||||
}
|
||||
|
||||
LinphonePayloadType *linphone_call_params_get_used_audio_payload_type(const LinphoneCallParams *cp) {
|
||||
return cp->audio_codec ? linphone_payload_type_new(NULL, cp->audio_codec) : NULL;
|
||||
LinphonePayloadType *linphone_call_params_get_used_audio_payload_type(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedAudioPayloadType();
|
||||
}
|
||||
|
||||
LinphonePayloadType *linphone_call_params_get_used_video_payload_type(const LinphoneCallParams *cp) {
|
||||
return cp->video_codec ? linphone_payload_type_new(NULL, cp->video_codec) : NULL;
|
||||
LinphonePayloadType *linphone_call_params_get_used_video_payload_type(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedVideoPayloadType();
|
||||
}
|
||||
|
||||
LinphonePayloadType *linphone_call_params_get_used_text_payload_type(const LinphoneCallParams *cp) {
|
||||
return cp->text_codec ? linphone_payload_type_new(NULL, cp->text_codec) : NULL;
|
||||
LinphonePayloadType *linphone_call_params_get_used_text_payload_type(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedRealtimeTextPayloadType();
|
||||
}
|
||||
|
||||
const OrtpPayloadType *linphone_call_params_get_used_audio_codec(const LinphoneCallParams *cp) {
|
||||
return cp->audio_codec;
|
||||
const OrtpPayloadType *linphone_call_params_get_used_audio_codec(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedAudioCodec();
|
||||
}
|
||||
|
||||
const OrtpPayloadType *linphone_call_params_get_used_video_codec(const LinphoneCallParams *cp) {
|
||||
return cp->video_codec;
|
||||
void linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec) {
|
||||
params->msp->getPrivate()->setUsedAudioCodec(codec);
|
||||
}
|
||||
|
||||
const OrtpPayloadType *linphone_call_params_get_used_text_codec(const LinphoneCallParams *cp) {
|
||||
return cp->text_codec;
|
||||
const OrtpPayloadType *linphone_call_params_get_used_video_codec(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedVideoCodec();
|
||||
}
|
||||
|
||||
|
||||
bool_t linphone_call_params_low_bandwidth_enabled(const LinphoneCallParams *cp) {
|
||||
return cp->low_bandwidth;
|
||||
void linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec) {
|
||||
params->msp->getPrivate()->setUsedVideoCodec(codec);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_audio_bandwidth_limit(LinphoneCallParams *cp, int bandwidth){
|
||||
cp->audio_bw=bandwidth;
|
||||
const OrtpPayloadType *linphone_call_params_get_used_text_codec(const LinphoneCallParams *params) {
|
||||
return params->msp->getUsedRealtimeTextCodec();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_media_encryption(LinphoneCallParams *cp, LinphoneMediaEncryption e) {
|
||||
cp->media_encryption = e;
|
||||
void linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec) {
|
||||
params->msp->getPrivate()->setUsedRealtimeTextCodec(codec);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_low_bandwidth_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->lowBandwidthEnabled();
|
||||
}
|
||||
|
||||
int linphone_call_params_get_audio_bandwidth_limit(const LinphoneCallParams *params) {
|
||||
return params->msp->getAudioBandwidthLimit();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_audio_bandwidth_limit(LinphoneCallParams *params, int bandwidth) {
|
||||
params->msp->setAudioBandwidthLimit(bandwidth);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_media_encryption(LinphoneCallParams *params, LinphoneMediaEncryption encryption) {
|
||||
params->msp->setMediaEncryption(encryption);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_privacy(LinphoneCallParams *params, LinphonePrivacyMask privacy) {
|
||||
params->privacy=privacy;
|
||||
params->msp->setPrivacy(privacy);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_record_file(LinphoneCallParams *cp, const char *path){
|
||||
if (cp->record_file){
|
||||
ms_free(cp->record_file);
|
||||
cp->record_file=NULL;
|
||||
}
|
||||
if (path) cp->record_file=ms_strdup(path);
|
||||
void linphone_call_params_set_record_file(LinphoneCallParams *params, const char *path) {
|
||||
params->msp->setRecordFilePath(path ? path : "");
|
||||
}
|
||||
|
||||
void linphone_call_params_set_session_name(LinphoneCallParams *cp, const char *name){
|
||||
if (cp->session_name){
|
||||
ms_free(cp->session_name);
|
||||
cp->session_name=NULL;
|
||||
}
|
||||
if (name) cp->session_name=ms_strdup(name);
|
||||
void linphone_call_params_set_session_name(LinphoneCallParams *params, const char *name) {
|
||||
params->msp->setSessionName(name ? name : "");
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_audio_enabled(const LinphoneCallParams *cp){
|
||||
return cp->has_audio;
|
||||
bool_t linphone_call_params_audio_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->audioEnabled();
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_realtime_text_enabled(const LinphoneCallParams *params) {
|
||||
return params->realtimetext_enabled;
|
||||
return params->msp->realtimeTextEnabled();
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_video_enabled(const LinphoneCallParams *cp){
|
||||
return cp->has_video;
|
||||
bool_t linphone_call_params_video_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->videoEnabled();
|
||||
}
|
||||
|
||||
LinphoneMediaDirection linphone_call_params_get_audio_direction(const LinphoneCallParams *cp) {
|
||||
return cp->audio_dir;
|
||||
LinphoneMediaDirection linphone_call_params_get_audio_direction(const LinphoneCallParams *params) {
|
||||
return params->msp->getAudioDirection();
|
||||
}
|
||||
|
||||
LinphoneMediaDirection linphone_call_params_get_video_direction(const LinphoneCallParams *cp) {
|
||||
return cp->video_dir;
|
||||
LinphoneMediaDirection linphone_call_params_get_video_direction(const LinphoneCallParams *params) {
|
||||
return params->msp->getVideoDirection();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_audio_direction(LinphoneCallParams *cp,LinphoneMediaDirection dir) {
|
||||
cp->audio_dir=dir;
|
||||
void linphone_call_params_set_audio_direction(LinphoneCallParams *params, LinphoneMediaDirection dir) {
|
||||
params->msp->setAudioDirection(dir);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_video_direction(LinphoneCallParams *cp,LinphoneMediaDirection dir) {
|
||||
cp->video_dir=dir;
|
||||
void linphone_call_params_set_video_direction(LinphoneCallParams *params, LinphoneMediaDirection dir) {
|
||||
params->msp->setVideoDirection(dir);
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_audio_multicast(LinphoneCallParams *params, bool_t yesno) {
|
||||
params->msp->enableAudioMulticast(yesno);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_audio_multicast_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->audioMulticastEnabled();
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_video_multicast(LinphoneCallParams *params, bool_t yesno) {
|
||||
params->msp->enableVideoMulticast(yesno);
|
||||
}
|
||||
bool_t linphone_call_params_video_multicast_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->videoMulticastEnabled();
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_real_early_media_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->earlyMediaSendingEnabled();
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_avpf_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->avpfEnabled();
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_avpf(LinphoneCallParams *params, bool_t enable) {
|
||||
params->msp->enableAvpf(enable);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_mandatory_media_encryption_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->mandatoryMediaEncryptionEnabled();
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_mandatory_media_encryption(LinphoneCallParams *params, bool_t value) {
|
||||
params->msp->enableMandatoryMediaEncryption(value);
|
||||
}
|
||||
|
||||
uint16_t linphone_call_params_get_avpf_rr_interval(const LinphoneCallParams *params) {
|
||||
return params->msp->getAvpfRrInterval();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_avpf_rr_interval(LinphoneCallParams *params, uint16_t value) {
|
||||
params->msp->setAvpfRrInterval(value);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_sent_fps(LinphoneCallParams *params, float value) {
|
||||
params->msp->getPrivate()->setSentFps(value);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_received_fps(LinphoneCallParams *params, float value) {
|
||||
params->msp->getPrivate()->setReceivedFps(value);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Private functions *
|
||||
******************************************************************************/
|
||||
|
||||
bool_t linphone_call_params_get_in_conference(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getInConference();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_in_conference(LinphoneCallParams *params, bool_t value) {
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setInConference(value);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_get_internal_call_update(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getInternalCallUpdate();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_internal_call_update(LinphoneCallParams *params, bool_t value) {
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setInternalCallUpdate(value);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_implicit_rtcp_fb_enabled(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->implicitRtcpFbEnabled();
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_implicit_rtcp_fb(LinphoneCallParams *params, bool_t value) {
|
||||
params->msp->getPrivate()->enableImplicitRtcpFb(value);
|
||||
}
|
||||
|
||||
int linphone_call_params_get_down_bandwidth(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->getDownBandwidth();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_down_bandwidth(LinphoneCallParams *params, int value) {
|
||||
params->msp->getPrivate()->setDownBandwidth(value);
|
||||
}
|
||||
|
||||
int linphone_call_params_get_up_bandwidth(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->getUpBandwidth();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_up_bandwidth(LinphoneCallParams *params, int value) {
|
||||
params->msp->getPrivate()->setUpBandwidth(value);
|
||||
}
|
||||
|
||||
int linphone_call_params_get_down_ptime(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->getDownPtime();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_down_ptime(LinphoneCallParams *params, int value) {
|
||||
params->msp->getPrivate()->setDownPtime(value);
|
||||
}
|
||||
|
||||
int linphone_call_params_get_up_ptime(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->getUpPtime();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_up_ptime(LinphoneCallParams *params, int value) {
|
||||
params->msp->getPrivate()->setUpPtime(value);
|
||||
}
|
||||
|
||||
SalCustomHeader * linphone_call_params_get_custom_headers(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getCustomHeaders();
|
||||
}
|
||||
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_attributes(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getCustomSdpAttributes();
|
||||
}
|
||||
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_media_attributes(const LinphoneCallParams *params, LinphoneStreamType type) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getCustomSdpMediaAttributes(type);
|
||||
}
|
||||
|
||||
LinphoneCall * linphone_call_params_get_referer(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getReferer();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_referer(LinphoneCallParams *params, LinphoneCall *referer) {
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setReferer(referer);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_get_update_call_when_ice_completed(const LinphoneCallParams *params) {
|
||||
return params->msp->getPrivate()->getUpdateCallWhenIceCompleted();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_update_call_when_ice_completed(LinphoneCallParams *params, bool_t value) {
|
||||
params->msp->getPrivate()->setUpdateCallWhenIceCompleted(value);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_sent_vsize(LinphoneCallParams *params, MSVideoSize vsize) {
|
||||
params->msp->getPrivate()->setSentVideoDefinition(linphone_video_definition_new(vsize.width, vsize.height, nullptr));
|
||||
}
|
||||
|
||||
void linphone_call_params_set_recv_vsize(LinphoneCallParams *params, MSVideoSize vsize) {
|
||||
params->msp->getPrivate()->setReceivedVideoDefinition(linphone_video_definition_new(vsize.width, vsize.height, nullptr));
|
||||
}
|
||||
|
||||
void linphone_call_params_set_sent_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef) {
|
||||
params->msp->getPrivate()->setSentVideoDefinition(vdef);
|
||||
}
|
||||
|
||||
void linphone_call_params_set_received_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef) {
|
||||
params->msp->getPrivate()->setReceivedVideoDefinition(vdef);
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_get_no_user_consent(const LinphoneCallParams *params) {
|
||||
return static_cast<const LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->getNoUserConsent();
|
||||
}
|
||||
|
||||
void linphone_call_params_set_no_user_consent(LinphoneCallParams *params, bool_t value) {
|
||||
static_cast<LinphonePrivate::CallSessionParams *>(params->msp)->getPrivate()->setNoUserConsent(value);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -328,69 +508,23 @@ void linphone_call_params_unref(LinphoneCallParams *cp) {
|
|||
belle_sip_object_unref(cp);
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_audio_multicast(LinphoneCallParams *params, bool_t yesno) {
|
||||
params->audio_multicast_enabled=yesno;
|
||||
}
|
||||
|
||||
bool_t linphone_call_params_audio_multicast_enabled(const LinphoneCallParams *params) {
|
||||
return params->audio_multicast_enabled;
|
||||
}
|
||||
|
||||
void linphone_call_params_enable_video_multicast(LinphoneCallParams *params, bool_t yesno) {
|
||||
params->video_multicast_enabled=yesno;
|
||||
}
|
||||
bool_t linphone_call_params_video_multicast_enabled(const LinphoneCallParams *params) {
|
||||
return params->video_multicast_enabled;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Constructor and destructor functions *
|
||||
******************************************************************************/
|
||||
|
||||
static void _linphone_call_params_uninit(LinphoneCallParams *cp){
|
||||
unsigned int i;
|
||||
if (cp->record_file) ms_free(cp->record_file);
|
||||
if (cp->custom_headers) sal_custom_header_free(cp->custom_headers);
|
||||
if (cp->custom_sdp_attributes) sal_custom_sdp_attribute_free(cp->custom_sdp_attributes);
|
||||
for (i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) {
|
||||
if (cp->custom_sdp_media_attributes[i]) sal_custom_sdp_attribute_free(cp->custom_sdp_media_attributes[i]);
|
||||
}
|
||||
if (cp->session_name) ms_free(cp->session_name);
|
||||
if (cp->sent_vdef != NULL) linphone_video_definition_unref(cp->sent_vdef);
|
||||
if (cp->recv_vdef != NULL) linphone_video_definition_unref(cp->recv_vdef);
|
||||
static void _linphone_call_params_destroy(LinphoneCallParams *params) {
|
||||
delete params->msp;
|
||||
}
|
||||
|
||||
static void _linphone_call_params_clone(LinphoneCallParams *dst, const LinphoneCallParams *src) {
|
||||
unsigned int i;
|
||||
|
||||
/*
|
||||
* Save the belle_sip_object_t part, copy the entire structure and restore the belle_sip_object_t part
|
||||
*/
|
||||
belle_sip_object_t tmp = dst->base;
|
||||
memcpy(dst, src, sizeof(LinphoneCallParams));
|
||||
dst->base = tmp;
|
||||
|
||||
if (src->sent_vdef) dst->sent_vdef = linphone_video_definition_ref(src->sent_vdef);
|
||||
if (src->recv_vdef) dst->recv_vdef = linphone_video_definition_ref(src->recv_vdef);
|
||||
if (src->record_file) dst->record_file=ms_strdup(src->record_file);
|
||||
if (src->session_name) dst->session_name=ms_strdup(src->session_name);
|
||||
/*
|
||||
* The management of the custom headers is not optimal. We copy everything while ref counting would be more efficient.
|
||||
*/
|
||||
if (src->custom_headers) dst->custom_headers=sal_custom_header_clone(src->custom_headers);
|
||||
if (src->custom_sdp_attributes) dst->custom_sdp_attributes = sal_custom_sdp_attribute_clone(src->custom_sdp_attributes);
|
||||
for (i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) {
|
||||
if (src->custom_sdp_media_attributes[i]) dst->custom_sdp_media_attributes[i] = sal_custom_sdp_attribute_clone(src->custom_sdp_media_attributes[i]);
|
||||
}
|
||||
dst->msp = new LinphonePrivate::MediaSessionParams(*src->msp);
|
||||
}
|
||||
|
||||
LinphoneCallParams * linphone_call_params_new(void) {
|
||||
LinphoneCallParams *cp=belle_sip_object_new(LinphoneCallParams);
|
||||
cp->audio_dir=LinphoneMediaDirectionSendRecv;
|
||||
cp->video_dir=LinphoneMediaDirectionSendRecv;
|
||||
cp->has_audio=TRUE;
|
||||
cp->realtimetext_enabled = FALSE;
|
||||
return cp;
|
||||
LinphoneCallParams *params = belle_sip_object_new(LinphoneCallParams);
|
||||
params->msp = new LinphonePrivate::MediaSessionParams();
|
||||
return params;
|
||||
}
|
||||
|
||||
/* DEPRECATED */
|
||||
|
|
@ -401,7 +535,7 @@ void linphone_call_params_destroy(LinphoneCallParams *cp) {
|
|||
BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneCallParams);
|
||||
|
||||
BELLE_SIP_INSTANCIATE_VPTR(LinphoneCallParams, belle_sip_object_t,
|
||||
(belle_sip_object_destroy_t)_linphone_call_params_uninit,
|
||||
(belle_sip_object_destroy_t)_linphone_call_params_destroy,
|
||||
(belle_sip_object_clone_t)_linphone_call_params_clone, // clone
|
||||
NULL, // marshal
|
||||
FALSE
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ static int media_parameters_changed(LinphoneCall *call, SalMediaDescription *old
|
|||
int otherdesc_changed;
|
||||
char *tmp1=NULL;
|
||||
char *tmp2=NULL;
|
||||
if (call->params->in_conference != call->current_params->in_conference) return SAL_MEDIA_DESCRIPTION_FORCE_STREAM_RECONSTRUCTION;
|
||||
if (linphone_call_params_get_in_conference(call->params) != linphone_call_params_get_in_conference(call->current_params))
|
||||
return SAL_MEDIA_DESCRIPTION_FORCE_STREAM_RECONSTRUCTION;
|
||||
if (call->up_bw != linphone_core_get_upload_bandwidth(call->core)) return SAL_MEDIA_DESCRIPTION_FORCE_STREAM_RECONSTRUCTION;
|
||||
if (call->localdesc_changed) ms_message("Local description has changed: %s", tmp1 = sal_media_description_print_differences(call->localdesc_changed));
|
||||
otherdesc_changed = sal_media_description_equals(oldmd, newmd);
|
||||
|
|
@ -199,7 +200,7 @@ void linphone_call_update_streams(LinphoneCall *call, SalMediaDescription *new_m
|
|||
linphone_call_init_media_streams(call);
|
||||
}
|
||||
|
||||
if (call->params->real_early_media && (call->state == LinphoneCallOutgoingEarlyMedia)) {
|
||||
if (linphone_call_params_real_early_media_enabled(call->params) && (call->state == LinphoneCallOutgoingEarlyMedia)) {
|
||||
prepare_early_media_forking(call);
|
||||
}
|
||||
linphone_call_start_media_streams(call, target_state);
|
||||
|
|
@ -464,7 +465,7 @@ static void call_ringing(SalOp *h){
|
|||
if (call==NULL) return;
|
||||
|
||||
/*set privacy*/
|
||||
call->current_params->privacy=(LinphonePrivacyMask)sal_op_get_privacy(call->op);
|
||||
linphone_call_params_set_privacy(call->current_params, (LinphonePrivacyMask)sal_op_get_privacy(call->op));
|
||||
|
||||
linphone_core_notify_display_status(lc,_("Remote ringing."));
|
||||
|
||||
|
|
@ -543,10 +544,10 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o
|
|||
linphone_task_list_init(&tl);
|
||||
rmd=sal_call_get_remote_media_description(op);
|
||||
/*set privacy*/
|
||||
call->current_params->privacy=(LinphonePrivacyMask)sal_op_get_privacy(call->op);
|
||||
linphone_call_params_set_privacy(call->current_params, (LinphonePrivacyMask)sal_op_get_privacy(call->op));
|
||||
/*reset the internal call update flag, so it doesn't risk to be copied and used in further re-INVITEs*/
|
||||
if (call->params->internal_call_update)
|
||||
call->params->internal_call_update = FALSE;
|
||||
if (linphone_call_params_get_internal_call_update(call->params))
|
||||
linphone_call_params_set_internal_call_update(call->params, FALSE);
|
||||
|
||||
|
||||
#ifdef BUILD_UPNP
|
||||
|
|
@ -585,7 +586,7 @@ static void process_call_accepted(LinphoneCore *lc, LinphoneCall *call, SalOp *o
|
|||
next_state = LinphoneCallPausedByRemote;
|
||||
next_state_str = "Call paused by remote";
|
||||
}else{
|
||||
if (!call->params->in_conference)
|
||||
if (!linphone_call_params_get_in_conference(call->params))
|
||||
lc->current_call=call;
|
||||
next_state = LinphoneCallStreamsRunning;
|
||||
next_state_str = "Streams running";
|
||||
|
|
@ -993,22 +994,22 @@ static void call_failure(SalOp *op){
|
|||
int i;
|
||||
for (i = 0; i < call->localdesc->nb_streams; i++) {
|
||||
if (!sal_stream_description_active(&call->localdesc->streams[i])) continue;
|
||||
if (call->params->media_encryption == LinphoneMediaEncryptionSRTP) {
|
||||
if (call->params->avpf_enabled == TRUE) {
|
||||
if (linphone_call_params_get_media_encryption(call->params) == LinphoneMediaEncryptionSRTP) {
|
||||
if (linphone_call_params_avpf_enabled(call->params) == TRUE) {
|
||||
if (i == 0) ms_message("Retrying call [%p] with SAVP", call);
|
||||
call->params->avpf_enabled = FALSE;
|
||||
linphone_call_params_enable_avpf(call->params, FALSE);
|
||||
linphone_call_restart_invite(call);
|
||||
return;
|
||||
} else if (!linphone_core_is_media_encryption_mandatory(lc)) {
|
||||
if (i == 0) ms_message("Retrying call [%p] with AVP", call);
|
||||
call->params->media_encryption = LinphoneMediaEncryptionNone;
|
||||
linphone_call_params_set_media_encryption(call->params, LinphoneMediaEncryptionNone);
|
||||
memset(call->localdesc->streams[i].crypto, 0, sizeof(call->localdesc->streams[i].crypto));
|
||||
linphone_call_restart_invite(call);
|
||||
return;
|
||||
}
|
||||
} else if (call->params->avpf_enabled == TRUE) {
|
||||
} else if (linphone_call_params_avpf_enabled(call->params) == TRUE) {
|
||||
if (i == 0) ms_message("Retrying call [%p] with AVP", call);
|
||||
call->params->avpf_enabled = FALSE;
|
||||
linphone_call_params_enable_avpf(call->params, FALSE);
|
||||
linphone_call_restart_invite(call);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ int LocalConference::inviteAddresses(const std::list<const LinphoneAddress*> &ad
|
|||
LinphoneCallParams * new_params = params ? linphone_call_params_copy(params) : linphone_core_create_call_params(m_core, NULL);
|
||||
LinphoneCall *call;
|
||||
/*toggle this flag so the call is immediately added to the conference upon acceptance*/
|
||||
new_params->in_conference = TRUE;
|
||||
linphone_call_params_set_in_conference(new_params, TRUE);
|
||||
linphone_call_params_enable_video(new_params, FALSE); /*turn off video as it is not supported for conferencing at this time*/
|
||||
call = linphone_core_invite_address_with_params(m_core, addr, new_params);
|
||||
if (!call){
|
||||
|
|
@ -424,7 +424,7 @@ int LocalConference::inviteAddresses(const std::list<const LinphoneAddress*> &ad
|
|||
linphone_call_params_unref(new_params);
|
||||
}else{
|
||||
/*there is already a call to this address, so simply join it to the local conference if not already done*/
|
||||
if (!call->current_params->in_conference)
|
||||
if (!linphone_call_params_get_in_conference(call->current_params))
|
||||
addParticipant(call);
|
||||
}
|
||||
/*if the local participant is not yet created, created it and it to the conference */
|
||||
|
|
@ -434,19 +434,19 @@ int LocalConference::inviteAddresses(const std::list<const LinphoneAddress*> &ad
|
|||
}
|
||||
|
||||
int LocalConference::addParticipant(LinphoneCall *call) {
|
||||
if (call->current_params->in_conference){
|
||||
if (linphone_call_params_get_in_conference(call->current_params)){
|
||||
ms_error("Already in conference");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (call->state==LinphoneCallPaused){
|
||||
call->params->in_conference=TRUE;
|
||||
call->params->has_video=FALSE;
|
||||
linphone_call_params_set_in_conference(call->params, TRUE);
|
||||
linphone_call_params_enable_video(call->params, FALSE);
|
||||
linphone_call_resume(call);
|
||||
}else if (call->state==LinphoneCallStreamsRunning){
|
||||
LinphoneCallParams *params = linphone_core_create_call_params(m_core, call);
|
||||
params->in_conference=TRUE;
|
||||
params->has_video=FALSE;
|
||||
linphone_call_params_set_in_conference(params, TRUE);
|
||||
linphone_call_params_enable_video(params, FALSE);
|
||||
|
||||
if (call->audiostream || call->videostream){
|
||||
linphone_call_stop_media_streams(call); /*free the audio & video local resources*/
|
||||
|
|
@ -471,8 +471,8 @@ int LocalConference::removeFromConference(LinphoneCall *call, bool_t active){
|
|||
int err=0;
|
||||
char *str;
|
||||
|
||||
if (!call->current_params->in_conference){
|
||||
if (call->params->in_conference){
|
||||
if (!linphone_call_params_get_in_conference(call->current_params)){
|
||||
if (linphone_call_params_get_in_conference(call->params)){
|
||||
ms_warning("Not (yet) in conference, be patient");
|
||||
return -1;
|
||||
}else{
|
||||
|
|
@ -480,14 +480,14 @@ int LocalConference::removeFromConference(LinphoneCall *call, bool_t active){
|
|||
return -1;
|
||||
}
|
||||
}
|
||||
call->params->in_conference=FALSE;
|
||||
linphone_call_params_set_in_conference(call->params, FALSE);
|
||||
|
||||
str=linphone_call_get_remote_address_as_string(call);
|
||||
ms_message("%s will be removed from conference", str);
|
||||
ms_free(str);
|
||||
if (active){
|
||||
LinphoneCallParams *params=linphone_call_params_copy(linphone_call_get_current_params(call));
|
||||
params->in_conference=FALSE;
|
||||
linphone_call_params_set_in_conference(params, FALSE);
|
||||
// reconnect local audio with this call
|
||||
if (isIn()){
|
||||
ms_message("Leaving conference for reconnecting with unique call.");
|
||||
|
|
@ -522,7 +522,7 @@ int LocalConference::convertConferenceToCall(){
|
|||
while (calls) {
|
||||
LinphoneCall *rc=(LinphoneCall*)calls->data;
|
||||
calls=calls->next;
|
||||
if (rc->params->in_conference) { // not using current_param
|
||||
if (linphone_call_params_get_in_conference(rc->params)) { // not using current_param
|
||||
bool_t active_after_removed=isIn();
|
||||
err=removeFromConference(rc, active_after_removed);
|
||||
break;
|
||||
|
|
@ -566,7 +566,7 @@ int LocalConference::terminate() {
|
|||
while (calls) {
|
||||
LinphoneCall *call=(LinphoneCall*)calls->data;
|
||||
calls=calls->next;
|
||||
if (call->current_params->in_conference) {
|
||||
if (linphone_call_params_get_in_conference(call->current_params)) {
|
||||
linphone_call_terminate(call);
|
||||
}
|
||||
}
|
||||
|
|
@ -639,7 +639,7 @@ int LocalConference::stopRecording() {
|
|||
}
|
||||
|
||||
void LocalConference::onCallStreamStarting(LinphoneCall *call, bool isPausedByRemote) {
|
||||
call->params->has_video = FALSE;
|
||||
linphone_call_params_enable_video(call->params, FALSE);
|
||||
call->camera_enabled = FALSE;
|
||||
ms_message("LocalConference::onCallStreamStarting(): joining AudioStream [%p] of call [%p] into conference.", call->audiostream, call);
|
||||
MSAudioEndpoint *ep=ms_audio_endpoint_get_from_stream(call->audiostream,TRUE);
|
||||
|
|
|
|||
|
|
@ -217,11 +217,11 @@ static bool_t generate_b64_crypto_key(size_t key_length, char* key_out, size_t k
|
|||
}
|
||||
|
||||
static bool_t linphone_call_encryption_mandatory(LinphoneCall *call){
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionDTLS) {
|
||||
if (linphone_call_params_get_media_encryption(call->params)==LinphoneMediaEncryptionDTLS) {
|
||||
ms_message("Forced encryption mandatory on call [%p] due to SRTP-DTLS",call);
|
||||
return TRUE;
|
||||
}
|
||||
return call->params->encryption_mandatory;
|
||||
return linphone_call_params_mandatory_media_encryption_enabled(call->params);
|
||||
}
|
||||
|
||||
LinphoneCore *linphone_call_get_core(const LinphoneCall *call){
|
||||
|
|
@ -303,15 +303,18 @@ static uint16_t linphone_call_get_avpf_rr_interval(const LinphoneCall *call) {
|
|||
static void propagate_encryption_changed(LinphoneCall *call){
|
||||
if (!linphone_call_all_streams_encrypted(call)) {
|
||||
ms_message("Some streams are not encrypted");
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionNone;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionNone);
|
||||
linphone_call_notify_encryption_changed(call, FALSE, call->auth_token);
|
||||
} else {
|
||||
if (call->auth_token) {/* ZRTP only is using auth_token */
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionZRTP;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionZRTP);
|
||||
} else { /* otherwise it must be DTLS as SDES doesn't go through this function */
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionDTLS;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionDTLS);
|
||||
}
|
||||
ms_message("All streams are encrypted key exchanged using %s", call->current_params->media_encryption==LinphoneMediaEncryptionZRTP?"ZRTP":call->current_params->media_encryption==LinphoneMediaEncryptionDTLS?"DTLS":"Unknown mechanism");
|
||||
ms_message("All streams are encrypted key exchanged using %s",
|
||||
linphone_call_params_get_media_encryption(call->current_params) == LinphoneMediaEncryptionZRTP
|
||||
? "ZRTP"
|
||||
: linphone_call_params_get_media_encryption(call->current_params) == LinphoneMediaEncryptionDTLS ? "DTLS" : "Unknown mechanism");
|
||||
linphone_call_notify_encryption_changed(call, TRUE, call->auth_token);
|
||||
#ifdef VIDEO_ENABLED
|
||||
if (linphone_call_encryption_mandatory(call) && call->videostream && media_stream_started((MediaStream *)call->videostream)) {
|
||||
|
|
@ -328,7 +331,7 @@ static void linphone_call_audiostream_encryption_changed(void *data, bool_t encr
|
|||
call = (LinphoneCall *)data;
|
||||
|
||||
if (encrypted) {
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionZRTP) { /* if encryption is DTLS, no status to be displayed */
|
||||
if (linphone_call_params_get_media_encryption(call->params) == LinphoneMediaEncryptionZRTP) { /* if encryption is DTLS, no status to be displayed */
|
||||
snprintf(status,sizeof(status)-1,_("Authentication token is %s"),call->auth_token);
|
||||
linphone_core_notify_display_status(call->core, status);
|
||||
}
|
||||
|
|
@ -338,9 +341,9 @@ static void linphone_call_audiostream_encryption_changed(void *data, bool_t encr
|
|||
|
||||
#ifdef VIDEO_ENABLED
|
||||
// Enable video encryption
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionZRTP) {
|
||||
if (linphone_call_params_get_media_encryption(call->params) == LinphoneMediaEncryptionZRTP) {
|
||||
const LinphoneCallParams *params=linphone_call_get_current_params(call);
|
||||
if (params->has_video) {
|
||||
if (linphone_call_params_video_enabled(params)) {
|
||||
ms_message("Trying to start ZRTP encryption on video stream");
|
||||
video_stream_start_zrtp(call->videostream);
|
||||
}
|
||||
|
|
@ -650,7 +653,7 @@ static void setup_zrtp_hash(LinphoneCall *call, SalMediaDescription *md) {
|
|||
if (!sal_stream_description_active(&md->streams[i])) continue;
|
||||
if (call->sessions[i].zrtp_context!=NULL) {
|
||||
ms_zrtp_getHelloHash(call->sessions[i].zrtp_context, md->streams[i].zrtphash, 128);
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionZRTP) { /* turn on the flag to use it if ZRTP is set */
|
||||
if (linphone_call_params_get_media_encryption(call->params)==LinphoneMediaEncryptionZRTP) { /* turn on the flag to use it if ZRTP is set */
|
||||
md->streams[i].haveZrtpHash = 1;
|
||||
} else {
|
||||
md->streams[i].haveZrtpHash = 0;
|
||||
|
|
@ -673,18 +676,18 @@ static void setup_rtcp_fb(LinphoneCall *call, SalMediaDescription *md) {
|
|||
if (!sal_stream_description_active(&md->streams[i])) continue;
|
||||
md->streams[i].rtcp_fb.generic_nack_enabled = lp_config_get_int(lc->config, "rtp", "rtcp_fb_generic_nack_enabled", 0);
|
||||
md->streams[i].rtcp_fb.tmmbr_enabled = lp_config_get_int(lc->config, "rtp", "rtcp_fb_tmmbr_enabled", 1);
|
||||
md->streams[i].implicit_rtcp_fb = call->params->implicit_rtcp_fb;
|
||||
md->streams[i].implicit_rtcp_fb = linphone_call_params_implicit_rtcp_fb_enabled(call->params);
|
||||
|
||||
for (pt_it = md->streams[i].payloads; pt_it != NULL; pt_it = pt_it->next) {
|
||||
pt = (PayloadType *)pt_it->data;
|
||||
|
||||
if (call->params->avpf_enabled == FALSE && call->params->implicit_rtcp_fb == FALSE) {
|
||||
if (linphone_call_params_avpf_enabled(call->params) == FALSE && linphone_call_params_implicit_rtcp_fb_enabled(call->params) == FALSE) {
|
||||
payload_type_unset_flag(pt, PAYLOAD_TYPE_RTCP_FEEDBACK_ENABLED);
|
||||
memset(&avpf_params, 0, sizeof(avpf_params));
|
||||
}else {
|
||||
payload_type_set_flag(pt, PAYLOAD_TYPE_RTCP_FEEDBACK_ENABLED);
|
||||
avpf_params = payload_type_get_avpf_params(pt);
|
||||
avpf_params.trr_interval = call->params->avpf_rr_interval;
|
||||
avpf_params.trr_interval = linphone_call_params_get_avpf_rr_interval(call->params);
|
||||
}
|
||||
payload_type_set_avpf_params(pt, avpf_params);
|
||||
}
|
||||
|
|
@ -860,21 +863,21 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
strncpy(md->username,linphone_address_get_username(addr),sizeof(md->username));
|
||||
if (subject) strncpy(md->name,subject,sizeof(md->name));
|
||||
|
||||
if (params->down_bw)
|
||||
md->bandwidth=params->down_bw;
|
||||
if (linphone_call_params_get_down_bandwidth(params))
|
||||
md->bandwidth=linphone_call_params_get_down_bandwidth(params);
|
||||
else md->bandwidth=linphone_core_get_download_bandwidth(lc);
|
||||
|
||||
if (params->custom_sdp_attributes)
|
||||
md->custom_sdp_attributes = sal_custom_sdp_attribute_clone(params->custom_sdp_attributes);
|
||||
if (linphone_call_params_get_custom_sdp_attributes(params))
|
||||
md->custom_sdp_attributes = sal_custom_sdp_attribute_clone(linphone_call_params_get_custom_sdp_attributes(params));
|
||||
|
||||
/*set audio capabilities */
|
||||
|
||||
codec_hints.bandwidth_limit=params->audio_bw;
|
||||
codec_hints.bandwidth_limit=linphone_call_params_get_audio_bandwidth_limit(params);
|
||||
codec_hints.max_codecs=-1;
|
||||
codec_hints.previously_used=old_md ? old_md->streams[call->main_audio_stream_index].already_assigned_payloads : NULL;
|
||||
l=make_codec_list(lc, &codec_hints, SalAudio, lc->codecs_conf.audio_codecs);
|
||||
|
||||
if (params->has_audio && l != NULL) {
|
||||
if (linphone_call_params_audio_enabled(params) && l != NULL) {
|
||||
strncpy(md->streams[call->main_audio_stream_index].rtp_addr,linphone_call_get_public_ip_for_stream(call,call->main_audio_stream_index),sizeof(md->streams[call->main_audio_stream_index].rtp_addr));
|
||||
strncpy(md->streams[call->main_audio_stream_index].rtcp_addr,linphone_call_get_public_ip_for_stream(call,call->main_audio_stream_index),sizeof(md->streams[call->main_audio_stream_index].rtcp_addr));
|
||||
strncpy(md->streams[call->main_audio_stream_index].name,"Audio",sizeof(md->streams[call->main_audio_stream_index].name)-1);
|
||||
|
|
@ -884,8 +887,8 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
md->streams[call->main_audio_stream_index].dir=get_audio_dir_from_call_params(params);
|
||||
md->streams[call->main_audio_stream_index].type=SalAudio;
|
||||
md->streams[call->main_audio_stream_index].rtcp_mux = rtcp_mux;
|
||||
if (params->down_ptime)
|
||||
md->streams[call->main_audio_stream_index].ptime=params->down_ptime;
|
||||
if (linphone_call_params_get_down_ptime(params))
|
||||
md->streams[call->main_audio_stream_index].ptime=linphone_call_params_get_down_ptime(params);
|
||||
else
|
||||
md->streams[call->main_audio_stream_index].ptime=linphone_core_get_download_ptime(lc);
|
||||
md->streams[call->main_audio_stream_index].max_rate=get_max_codec_sample_rate(l);
|
||||
|
|
@ -905,8 +908,8 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
md->streams[call->main_audio_stream_index].dir = SalStreamInactive;
|
||||
if(l) l=bctbx_list_free_with_data(l, (void (*)(void *))payload_type_destroy);
|
||||
}
|
||||
if (params->custom_sdp_media_attributes[LinphoneStreamTypeAudio])
|
||||
md->streams[call->main_audio_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(params->custom_sdp_media_attributes[LinphoneStreamTypeAudio]);
|
||||
if (linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeAudio))
|
||||
md->streams[call->main_audio_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeAudio));
|
||||
|
||||
md->streams[call->main_video_stream_index].proto=md->streams[call->main_audio_stream_index].proto;
|
||||
md->streams[call->main_video_stream_index].dir=get_video_dir_from_call_params(params);
|
||||
|
|
@ -919,7 +922,7 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
codec_hints.previously_used=old_md ? old_md->streams[call->main_video_stream_index].already_assigned_payloads : NULL;
|
||||
l=make_codec_list(lc, &codec_hints, SalVideo, lc->codecs_conf.video_codecs);
|
||||
|
||||
if (params->has_video && l != NULL){
|
||||
if (linphone_call_params_video_enabled(params) && l != NULL){
|
||||
strncpy(md->streams[call->main_video_stream_index].rtp_addr,linphone_call_get_public_ip_for_stream(call,call->main_video_stream_index),sizeof(md->streams[call->main_video_stream_index].rtp_addr));
|
||||
strncpy(md->streams[call->main_video_stream_index].rtcp_addr,linphone_call_get_public_ip_for_stream(call,call->main_video_stream_index),sizeof(md->streams[call->main_video_stream_index].rtcp_addr));
|
||||
md->streams[call->main_video_stream_index].rtp_port=call->media_ports[call->main_video_stream_index].rtp_port;
|
||||
|
|
@ -940,15 +943,15 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
md->streams[call->main_video_stream_index].dir = SalStreamInactive;
|
||||
if(l) l=bctbx_list_free_with_data(l, (void (*)(void *))payload_type_destroy);
|
||||
}
|
||||
if (params->custom_sdp_media_attributes[LinphoneStreamTypeVideo])
|
||||
md->streams[call->main_video_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(params->custom_sdp_media_attributes[LinphoneStreamTypeVideo]);
|
||||
if (linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeVideo))
|
||||
md->streams[call->main_video_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeVideo));
|
||||
|
||||
md->streams[call->main_text_stream_index].proto=md->streams[call->main_audio_stream_index].proto;
|
||||
md->streams[call->main_text_stream_index].dir=SalStreamSendRecv;
|
||||
md->streams[call->main_text_stream_index].type=SalText;
|
||||
md->streams[call->main_text_stream_index].rtcp_mux = rtcp_mux;
|
||||
strncpy(md->streams[call->main_text_stream_index].name,"Text",sizeof(md->streams[call->main_text_stream_index].name)-1);
|
||||
if (params->realtimetext_enabled) {
|
||||
if (linphone_call_params_realtime_text_enabled(params)) {
|
||||
strncpy(md->streams[call->main_text_stream_index].rtp_addr,linphone_call_get_public_ip_for_stream(call,call->main_text_stream_index),sizeof(md->streams[call->main_text_stream_index].rtp_addr));
|
||||
strncpy(md->streams[call->main_text_stream_index].rtcp_addr,linphone_call_get_public_ip_for_stream(call,call->main_text_stream_index),sizeof(md->streams[call->main_text_stream_index].rtcp_addr));
|
||||
|
||||
|
|
@ -974,8 +977,8 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
ms_message("Don't put text stream on local offer for call [%p]",call);
|
||||
md->streams[call->main_text_stream_index].dir = SalStreamInactive;
|
||||
}
|
||||
if (params->custom_sdp_media_attributes[LinphoneStreamTypeText])
|
||||
md->streams[call->main_text_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(params->custom_sdp_media_attributes[LinphoneStreamTypeText]);
|
||||
if (linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeText))
|
||||
md->streams[call->main_text_stream_index].custom_sdp_attributes = sal_custom_sdp_attribute_clone(linphone_call_params_get_custom_sdp_media_attributes(params, LinphoneStreamTypeText));
|
||||
|
||||
md->nb_streams = MAX(md->nb_streams,max_index+1);
|
||||
|
||||
|
|
@ -1004,7 +1007,7 @@ void linphone_call_make_local_media_description(LinphoneCall *call) {
|
|||
transfer_already_assigned_payload_types(old_md,md);
|
||||
call->localdesc_changed=sal_media_description_equals(md,old_md);
|
||||
sal_media_description_unref(old_md);
|
||||
if (call->params->internal_call_update){
|
||||
if (linphone_call_params_get_internal_call_update(call->params)){
|
||||
/*
|
||||
* An internal call update (ICE reINVITE) is not expected to modify the actual media stream parameters.
|
||||
* However, the localdesc may change between first INVITE and ICE reINVITE, for example if the remote party has declined a video stream.
|
||||
|
|
@ -1107,7 +1110,7 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from,
|
|||
call->log=linphone_call_log_new(call->dir, from, to);
|
||||
call->camera_enabled=TRUE;
|
||||
call->current_params = linphone_call_params_new();
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionNone;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionNone);
|
||||
call->dtls_certificate_fingerprint = NULL;
|
||||
if (call->dir == LinphoneCallIncoming)
|
||||
call->me=to;
|
||||
|
|
@ -1172,11 +1175,11 @@ void linphone_call_create_op_to(LinphoneCall *call, LinphoneAddress *to){
|
|||
if (call->op) sal_op_release(call->op);
|
||||
call->op=sal_op_new(call->core->sal);
|
||||
sal_op_set_user_pointer(call->op,call);
|
||||
if (call->params->referer)
|
||||
sal_call_set_referer(call->op,call->params->referer->op);
|
||||
linphone_configure_op(call->core,call->op,to,call->params->custom_headers,FALSE);
|
||||
if (call->params->privacy != LinphonePrivacyDefault)
|
||||
sal_op_set_privacy(call->op,(SalPrivacyMask)call->params->privacy);
|
||||
if (linphone_call_params_get_referer(call->params))
|
||||
sal_call_set_referer(call->op,linphone_call_params_get_referer(call->params)->op);
|
||||
linphone_configure_op(call->core,call->op,to,linphone_call_params_get_custom_headers(call->params),FALSE);
|
||||
if (linphone_call_params_get_privacy(call->params) != LinphonePrivacyDefault)
|
||||
sal_op_set_privacy(call->op,(SalPrivacyMask)linphone_call_params_get_privacy(call->params));
|
||||
/*else privacy might be set by proxy */
|
||||
}
|
||||
|
||||
|
|
@ -1184,11 +1187,11 @@ void linphone_call_create_op(LinphoneCall *call){
|
|||
if (call->op) sal_op_release(call->op);
|
||||
call->op=sal_op_new(call->core->sal);
|
||||
sal_op_set_user_pointer(call->op,call);
|
||||
if (call->params->referer)
|
||||
sal_call_set_referer(call->op,call->params->referer->op);
|
||||
linphone_configure_op(call->core,call->op,call->log->to,call->params->custom_headers,FALSE);
|
||||
if (call->params->privacy != LinphonePrivacyDefault)
|
||||
sal_op_set_privacy(call->op,(SalPrivacyMask)call->params->privacy);
|
||||
if (linphone_call_params_get_referer(call->params))
|
||||
sal_call_set_referer(call->op,linphone_call_params_get_referer(call->params)->op);
|
||||
linphone_configure_op(call->core,call->op,call->log->to,linphone_call_params_get_custom_headers(call->params),FALSE);
|
||||
if (linphone_call_params_get_privacy(call->params) != LinphonePrivacyDefault)
|
||||
sal_op_set_privacy(call->op,(SalPrivacyMask)linphone_call_params_get_privacy(call->params));
|
||||
/*else privacy might be set by proxy */
|
||||
}
|
||||
|
||||
|
|
@ -1359,7 +1362,7 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr
|
|||
call->params = linphone_call_params_copy(params);
|
||||
linphone_call_init_common(call, from, to);
|
||||
|
||||
call->current_params->update_call_when_ice_completed = call->params->update_call_when_ice_completed; /*copy param*/
|
||||
linphone_call_params_set_update_call_when_ice_completed(call->current_params, linphone_call_params_get_update_call_when_ice_completed(call->params)); /*copy param*/
|
||||
|
||||
linphone_call_fill_media_multicast_addr(call);
|
||||
|
||||
|
|
@ -1378,8 +1381,8 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr
|
|||
#endif //BUILD_UPNP
|
||||
|
||||
discover_mtu(lc,linphone_address_get_domain (to));
|
||||
if (params->referer){
|
||||
call->referer=linphone_call_ref(params->referer);
|
||||
if (linphone_call_params_get_referer(params)){
|
||||
call->referer=linphone_call_ref(linphone_call_params_get_referer(params));
|
||||
}
|
||||
|
||||
linphone_call_create_op_to(call, to);
|
||||
|
|
@ -1407,21 +1410,21 @@ static void linphone_call_incoming_select_ip_version(LinphoneCall *call, Linphon
|
|||
*/
|
||||
void linphone_call_set_compatible_incoming_call_parameters(LinphoneCall *call, SalMediaDescription *md) {
|
||||
/* Handle AVPF, SRTP and DTLS. */
|
||||
call->params->avpf_enabled = sal_media_description_has_avpf(md);
|
||||
linphone_call_params_enable_avpf(call->params, sal_media_description_has_avpf(md));
|
||||
if (call->dest_proxy != NULL) {
|
||||
call->params->avpf_rr_interval = linphone_proxy_config_get_avpf_rr_interval(call->dest_proxy) * 1000;
|
||||
linphone_call_params_set_avpf_rr_interval(call->params, linphone_proxy_config_get_avpf_rr_interval(call->dest_proxy) * 1000);
|
||||
} else {
|
||||
call->params->avpf_rr_interval = linphone_core_get_avpf_rr_interval(call->core)*1000;
|
||||
linphone_call_params_set_avpf_rr_interval(call->params, linphone_core_get_avpf_rr_interval(call->core)*1000);
|
||||
}
|
||||
|
||||
if ((sal_media_description_has_zrtp(md) == TRUE) && (linphone_core_media_encryption_supported(call->core, LinphoneMediaEncryptionZRTP) == TRUE)) {
|
||||
call->params->media_encryption = LinphoneMediaEncryptionZRTP;
|
||||
linphone_call_params_set_media_encryption(call->params, LinphoneMediaEncryptionZRTP);
|
||||
}else if ((sal_media_description_has_dtls(md) == TRUE) && (media_stream_dtls_supported() == TRUE)) {
|
||||
call->params->media_encryption = LinphoneMediaEncryptionDTLS;
|
||||
linphone_call_params_set_media_encryption(call->params, LinphoneMediaEncryptionDTLS);
|
||||
}else if ((sal_media_description_has_srtp(md) == TRUE) && (ms_srtp_supported() == TRUE)) {
|
||||
call->params->media_encryption = LinphoneMediaEncryptionSRTP;
|
||||
}else if (call->params->media_encryption != LinphoneMediaEncryptionZRTP){
|
||||
call->params->media_encryption = LinphoneMediaEncryptionNone;
|
||||
linphone_call_params_set_media_encryption(call->params, LinphoneMediaEncryptionSRTP);
|
||||
}else if (linphone_call_params_get_media_encryption(call->params) != LinphoneMediaEncryptionZRTP){
|
||||
linphone_call_params_set_media_encryption(call->params, LinphoneMediaEncryptionNone);
|
||||
}
|
||||
|
||||
/*in case of nat64, even ipv4 addresses are reachable from v6. Should be enhanced to manage stream by stream connectivity (I.E v6 or v4)*/
|
||||
|
|
@ -1586,12 +1589,12 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro
|
|||
* end apparently does not support. This features are: privacy, video
|
||||
*/
|
||||
/*set privacy*/
|
||||
call->current_params->privacy=(LinphonePrivacyMask)sal_op_get_privacy(call->op);
|
||||
linphone_call_params_set_privacy(call->current_params, (LinphonePrivacyMask)sal_op_get_privacy(call->op));
|
||||
/*config params*/
|
||||
call->current_params->update_call_when_ice_completed = call->params->update_call_when_ice_completed; /*copy config params*/
|
||||
linphone_call_params_set_update_call_when_ice_completed(call->current_params, linphone_call_params_get_update_call_when_ice_completed(call->params)); /*copy config params*/
|
||||
|
||||
/*set video support */
|
||||
call->params->has_video = linphone_core_video_enabled(lc) && lc->video_policy.automatically_accept;
|
||||
linphone_call_params_enable_video(call->params, linphone_core_video_enabled(lc) && lc->video_policy.automatically_accept);
|
||||
if (md) {
|
||||
// It is licit to receive an INVITE without SDP
|
||||
// In this case WE chose the media parameters according to policy.
|
||||
|
|
@ -1752,22 +1755,22 @@ void linphone_call_fix_call_parameters(LinphoneCall *call, SalMediaDescription *
|
|||
}
|
||||
rcp = linphone_call_get_remote_params(call);
|
||||
if (rcp){
|
||||
if (call->params->has_audio && !rcp->has_audio){
|
||||
if (linphone_call_params_audio_enabled(call->params) && !linphone_call_params_audio_enabled(rcp)){
|
||||
ms_message("Call [%p]: disabling audio in our call params because the remote doesn't want it.", call);
|
||||
call->params->has_audio = FALSE;
|
||||
linphone_call_params_enable_audio(call->params, FALSE);
|
||||
}
|
||||
if (call->params->has_video && !rcp->has_video){
|
||||
if (linphone_call_params_video_enabled(call->params) && !linphone_call_params_video_enabled(rcp)){
|
||||
ms_message("Call [%p]: disabling video in our call params because the remote doesn't want it.", call);
|
||||
call->params->has_video = FALSE;
|
||||
linphone_call_params_enable_video(call->params, FALSE);
|
||||
}
|
||||
|
||||
if (rcp->has_video && call->core->video_policy.automatically_accept && linphone_core_video_enabled(call->core) && !call->params->has_video){
|
||||
if (linphone_call_params_video_enabled(rcp) && call->core->video_policy.automatically_accept && linphone_core_video_enabled(call->core) && !linphone_call_params_video_enabled(call->params)){
|
||||
ms_message("Call [%p]: re-enabling video in our call params because the remote wants it and the policy allows to automatically accept.", call);
|
||||
linphone_call_params_enable_video(call->params, TRUE);
|
||||
}
|
||||
|
||||
if (rcp->realtimetext_enabled && !call->params->realtimetext_enabled) {
|
||||
call->params->realtimetext_enabled = TRUE;
|
||||
if (linphone_call_params_realtime_text_enabled(rcp) && !linphone_call_params_realtime_text_enabled(call->params)) {
|
||||
linphone_call_params_enable_realtime_text(call->params, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2059,23 +2062,20 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){
|
|||
#ifdef VIDEO_ENABLED
|
||||
VideoStream *vstream;
|
||||
#endif
|
||||
MS_VIDEO_SIZE_ASSIGN(call->current_params->sent_vsize, UNKNOWN);
|
||||
MS_VIDEO_SIZE_ASSIGN(call->current_params->recv_vsize, UNKNOWN);
|
||||
LinphoneVideoDefinition *vdef = linphone_video_definition_new(MS_VIDEO_SIZE_UNKNOWN_W, MS_VIDEO_SIZE_UNKNOWN_H, NULL);
|
||||
linphone_call_params_set_sent_video_definition(call->current_params, vdef);
|
||||
linphone_call_params_set_received_video_definition(call->current_params, vdef);
|
||||
#ifdef VIDEO_ENABLED
|
||||
if (call->current_params->sent_vdef != NULL) linphone_video_definition_unref(call->current_params->sent_vdef);
|
||||
call->current_params->sent_vdef = NULL;
|
||||
if (call->current_params->recv_vdef != NULL) linphone_video_definition_unref(call->current_params->recv_vdef);
|
||||
call->current_params->recv_vdef = NULL;
|
||||
vstream = call->videostream;
|
||||
if (vstream != NULL) {
|
||||
call->current_params->sent_vsize = video_stream_get_sent_video_size(vstream);
|
||||
call->current_params->recv_vsize = video_stream_get_received_video_size(vstream);
|
||||
call->current_params->sent_vdef = linphone_factory_create_video_definition(
|
||||
linphone_factory_get(), call->current_params->sent_vsize.width, call->current_params->sent_vsize.height);
|
||||
call->current_params->recv_vdef = linphone_factory_create_video_definition(
|
||||
linphone_factory_get(), call->current_params->recv_vsize.width, call->current_params->recv_vsize.height);
|
||||
call->current_params->sent_fps = video_stream_get_sent_framerate(vstream);
|
||||
call->current_params->received_fps = video_stream_get_received_framerate(vstream);
|
||||
MSVideoSize vsize = video_stream_get_sent_video_size(vstream);
|
||||
LinphoneVideoDefinition *vdef = linphone_video_definition_new(vsize.width, vsize.height, NULL);
|
||||
linphone_call_params_set_sent_video_definition(call->current_params, vdef);
|
||||
vsize = video_stream_get_received_video_size(vstream);
|
||||
vdef = linphone_video_definition_new(vsize.width, vsize.height, NULL);
|
||||
linphone_call_params_set_received_video_definition(call->current_params, vdef);
|
||||
linphone_call_params_set_sent_fps(call->current_params, video_stream_get_sent_framerate(vstream));
|
||||
linphone_call_params_set_received_fps(call->current_params, video_stream_get_received_framerate(vstream));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -2088,16 +2088,16 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){
|
|||
* Typically there can be inactive streams for which the media layer has no idea of whether they are encrypted or not.
|
||||
*/
|
||||
|
||||
switch (call->params->media_encryption) {
|
||||
switch (linphone_call_params_get_media_encryption(call->params)) {
|
||||
case LinphoneMediaEncryptionZRTP:
|
||||
if (at_least_one_stream_started(call)){
|
||||
if ((all_streams_encrypted = linphone_call_all_streams_encrypted(call)) && linphone_call_get_authentication_token(call)) {
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionZRTP;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionZRTP);
|
||||
} else {
|
||||
/*to avoid to many traces*/
|
||||
ms_debug("Encryption was requested to be %s, but isn't effective (all_streams_encrypted=%i, auth_token=%s)",
|
||||
linphone_media_encryption_to_string(call->params->media_encryption), all_streams_encrypted, call->auth_token == NULL ? "" : call->auth_token);
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionNone;
|
||||
linphone_media_encryption_to_string(linphone_call_params_get_media_encryption(call->params)), all_streams_encrypted, call->auth_token == NULL ? "" : call->auth_token);
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionNone);
|
||||
}
|
||||
}//else don't update the state if all streams are shutdown.
|
||||
break;
|
||||
|
|
@ -2105,50 +2105,50 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){
|
|||
case LinphoneMediaEncryptionSRTP:
|
||||
if (at_least_one_stream_started(call)){
|
||||
if (linphone_call_get_n_active_streams(call)==0 || (all_streams_encrypted = linphone_call_all_streams_encrypted(call))) {
|
||||
call->current_params->media_encryption = call->params->media_encryption;
|
||||
linphone_call_params_set_media_encryption(call->current_params, linphone_call_params_get_media_encryption(call->params));
|
||||
} else {
|
||||
/*to avoid to many traces*/
|
||||
ms_debug("Encryption was requested to be %s, but isn't effective (all_streams_encrypted=%i)",
|
||||
linphone_media_encryption_to_string(call->params->media_encryption), all_streams_encrypted);
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionNone;
|
||||
linphone_media_encryption_to_string(linphone_call_params_get_media_encryption(call->params)), all_streams_encrypted);
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionNone);
|
||||
}
|
||||
}//else don't update the state if all streams are shutdown.
|
||||
break;
|
||||
case LinphoneMediaEncryptionNone:
|
||||
/* check if we actually switched to ZRTP */
|
||||
if (at_least_one_stream_started(call) && (all_streams_encrypted = linphone_call_all_streams_encrypted(call)) && linphone_call_get_authentication_token(call)) {
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionZRTP;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionZRTP);
|
||||
} else {
|
||||
call->current_params->media_encryption=LinphoneMediaEncryptionNone;
|
||||
linphone_call_params_set_media_encryption(call->current_params, LinphoneMediaEncryptionNone);
|
||||
}
|
||||
break;
|
||||
}
|
||||
call->current_params->avpf_enabled = linphone_call_all_streams_avpf_enabled(call) && sal_media_description_has_avpf(md);
|
||||
if (call->current_params->avpf_enabled == TRUE) {
|
||||
call->current_params->avpf_rr_interval = linphone_call_get_avpf_rr_interval(call);
|
||||
linphone_call_params_enable_avpf(call->current_params, linphone_call_all_streams_avpf_enabled(call) && sal_media_description_has_avpf(md));
|
||||
if (linphone_call_params_avpf_enabled(call->current_params) == TRUE) {
|
||||
linphone_call_params_set_avpf_rr_interval(call->current_params, linphone_call_get_avpf_rr_interval(call));
|
||||
} else {
|
||||
call->current_params->avpf_rr_interval = 0;
|
||||
linphone_call_params_set_avpf_rr_interval(call->current_params, 0);
|
||||
}
|
||||
if (md){
|
||||
const char *rtp_addr;
|
||||
|
||||
SalStreamDescription *sd=sal_media_description_find_best_stream(md,SalAudio);
|
||||
|
||||
call->current_params->audio_dir=sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive;
|
||||
if (call->current_params->audio_dir != LinphoneMediaDirectionInactive) {
|
||||
linphone_call_params_set_audio_direction(call->current_params, sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive);
|
||||
if (linphone_call_params_get_audio_direction(call->current_params) != LinphoneMediaDirectionInactive) {
|
||||
rtp_addr = sd->rtp_addr[0]!='\0' ? sd->rtp_addr : call->resultdesc->addr;
|
||||
call->current_params->audio_multicast_enabled = ms_is_multicast(rtp_addr);
|
||||
linphone_call_params_enable_audio_multicast(call->current_params, ms_is_multicast(rtp_addr));
|
||||
} else
|
||||
call->current_params->audio_multicast_enabled = FALSE;
|
||||
linphone_call_params_enable_audio_multicast(call->current_params, FALSE);
|
||||
|
||||
sd=sal_media_description_find_best_stream(md,SalVideo);
|
||||
call->current_params->implicit_rtcp_fb = sd ? sal_stream_description_has_implicit_avpf(sd): FALSE;
|
||||
call->current_params->video_dir=sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive;
|
||||
if (call->current_params->video_dir != LinphoneMediaDirectionInactive) {
|
||||
linphone_call_params_enable_implicit_rtcp_fb(call->current_params, sd ? sal_stream_description_has_implicit_avpf(sd): FALSE);
|
||||
linphone_call_params_set_video_direction(call->current_params, sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive);
|
||||
if (linphone_call_params_get_video_direction(call->current_params) != LinphoneMediaDirectionInactive) {
|
||||
rtp_addr = sd->rtp_addr[0]!='\0' ? sd->rtp_addr : call->resultdesc->addr;
|
||||
call->current_params->video_multicast_enabled = ms_is_multicast(rtp_addr);
|
||||
linphone_call_params_enable_video_multicast(call->current_params, ms_is_multicast(rtp_addr));
|
||||
} else
|
||||
call->current_params->video_multicast_enabled = FALSE;
|
||||
linphone_call_params_enable_video_multicast(call->current_params, FALSE);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -2173,21 +2173,21 @@ const LinphoneCallParams * linphone_call_get_remote_params(LinphoneCall *call){
|
|||
|
||||
for (i = 0; i < nb_video_streams; i++) {
|
||||
sd = sal_media_description_get_active_stream_of_type(md, SalVideo, i);
|
||||
if (sal_stream_description_active(sd) == TRUE) cp->has_video = TRUE;
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) cp->media_encryption = LinphoneMediaEncryptionSRTP;
|
||||
if (sal_stream_description_active(sd) == TRUE) linphone_call_params_enable_video(cp, TRUE);
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) linphone_call_params_set_media_encryption(cp, LinphoneMediaEncryptionSRTP);
|
||||
}
|
||||
for (i = 0; i < nb_audio_streams; i++) {
|
||||
sd = sal_media_description_get_active_stream_of_type(md, SalAudio, i);
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) cp->media_encryption = LinphoneMediaEncryptionSRTP;
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) linphone_call_params_set_media_encryption(cp, LinphoneMediaEncryptionSRTP);
|
||||
}
|
||||
for (i = 0; i < nb_text_streams; i++) {
|
||||
sd = sal_media_description_get_active_stream_of_type(md, SalText, i);
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) cp->media_encryption = LinphoneMediaEncryptionSRTP;
|
||||
cp->realtimetext_enabled = TRUE;
|
||||
if (sal_stream_description_has_srtp(sd) == TRUE) linphone_call_params_set_media_encryption(cp, LinphoneMediaEncryptionSRTP);
|
||||
linphone_call_params_enable_realtime_text(cp, TRUE);
|
||||
}
|
||||
if (!cp->has_video){
|
||||
if (!linphone_call_params_video_enabled(cp)){
|
||||
if (md->bandwidth>0 && md->bandwidth<=linphone_core_get_edge_bw(call->core)){
|
||||
cp->low_bandwidth=TRUE;
|
||||
linphone_call_params_enable_low_bandwidth(cp, TRUE);
|
||||
}
|
||||
}
|
||||
if (md->name[0]!='\0') linphone_call_params_set_session_name(cp,md->name);
|
||||
|
|
@ -2343,7 +2343,7 @@ void linphone_call_enable_camera (LinphoneCall *call, bool_t enable){
|
|||
void linphone_call_send_vfu_request(LinphoneCall *call) {
|
||||
#ifdef VIDEO_ENABLED
|
||||
const LinphoneCallParams *current_params = linphone_call_get_current_params(call);
|
||||
if ((current_params->avpf_enabled || current_params->implicit_rtcp_fb )&& call->videostream && media_stream_get_state((const MediaStream *)call->videostream) == MSStreamStarted) { // || sal_media_description_has_implicit_avpf((const SalMediaDescription *)call->resultdesc)
|
||||
if ((linphone_call_params_avpf_enabled(current_params) || linphone_call_params_implicit_rtcp_fb_enabled(current_params)) && call->videostream && media_stream_get_state((const MediaStream *)call->videostream) == MSStreamStarted) { // || sal_media_description_has_implicit_avpf((const SalMediaDescription *)call->resultdesc)
|
||||
ms_message("Request Full Intra Request on call [%p]", call);
|
||||
video_stream_send_fir(call->videostream);
|
||||
} else if (call->core->sip_conf.vfu_with_info) {
|
||||
|
|
@ -2487,11 +2487,11 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){
|
|||
if (incoming_offer){
|
||||
remote=sal_call_get_remote_media_description(call->op);
|
||||
has_video=linphone_core_video_enabled(call->core) && linphone_core_media_description_contains_video_stream(remote);
|
||||
}else has_video=call->params->has_video;
|
||||
}else has_video=linphone_call_params_video_enabled(call->params);
|
||||
|
||||
_linphone_call_prepare_ice_for_stream(call,call->main_audio_stream_index,TRUE);
|
||||
if (has_video) _linphone_call_prepare_ice_for_stream(call,call->main_video_stream_index,TRUE);
|
||||
if (call->params->realtimetext_enabled) _linphone_call_prepare_ice_for_stream(call,call->main_text_stream_index,TRUE);
|
||||
if (linphone_call_params_realtime_text_enabled(call->params)) _linphone_call_prepare_ice_for_stream(call,call->main_text_stream_index,TRUE);
|
||||
/*start ICE gathering*/
|
||||
if (incoming_offer)
|
||||
linphone_call_update_ice_from_remote_media_description(call, remote, TRUE); /*this may delete the ice session*/
|
||||
|
|
@ -2503,7 +2503,7 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){
|
|||
video_stream_prepare_video(call->videostream);
|
||||
}
|
||||
#endif
|
||||
if (call->params->realtimetext_enabled && call->textstream->ms.state==MSStreamInitialized) {
|
||||
if (linphone_call_params_realtime_text_enabled(call->params) && call->textstream->ms.state==MSStreamInitialized) {
|
||||
text_stream_prepare_text(call->textstream);
|
||||
}
|
||||
err = linphone_core_gather_ice_candidates(call->core,call);
|
||||
|
|
@ -2556,7 +2556,7 @@ static SalMulticastRole linphone_call_get_multicast_role(const LinphoneCall *cal
|
|||
|
||||
static void setup_dtls_params(LinphoneCall *call, MediaStream* stream) {
|
||||
LinphoneCore *lc=call->core;
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionDTLS) {
|
||||
if (linphone_call_params_get_media_encryption(call->params)==LinphoneMediaEncryptionDTLS) {
|
||||
MSDtlsSrtpParams params;
|
||||
char *certificate, *key;
|
||||
memset(¶ms,0,sizeof(MSDtlsSrtpParams));
|
||||
|
|
@ -3082,9 +3082,9 @@ static int get_ideal_audio_bw(LinphoneCall *call, const SalMediaDescription *md,
|
|||
/*case where b=AS is given globally, not per stream*/
|
||||
remote_bw=md->bandwidth;
|
||||
}
|
||||
if (params->up_bw>0){
|
||||
if (linphone_call_params_get_up_bandwidth(params)>0){
|
||||
forced=TRUE;
|
||||
upload_bw=params->up_bw;
|
||||
upload_bw=linphone_call_params_get_up_bandwidth(params);
|
||||
}else upload_bw=total_upload_bw;
|
||||
upload_bw=get_min_bandwidth(upload_bw,remote_bw);
|
||||
if (!will_use_video || forced) return upload_bw;
|
||||
|
|
@ -3146,8 +3146,8 @@ static RtpProfile *make_profile(LinphoneCall *call, const SalMediaDescription *m
|
|||
/*this will update call->audio_bw*/
|
||||
linphone_core_update_allocated_audio_bandwidth_in_call(call,pt,bw);
|
||||
bw=call->audio_bw;
|
||||
if (params->up_ptime)
|
||||
up_ptime=params->up_ptime;
|
||||
if (linphone_call_params_get_up_ptime(params))
|
||||
up_ptime=linphone_call_params_get_up_ptime(params);
|
||||
else up_ptime=linphone_core_get_upload_ptime(lc);
|
||||
}
|
||||
first=FALSE;
|
||||
|
|
@ -3448,8 +3448,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
|
|||
|
||||
if (used_pt!=-1){
|
||||
bool_t ok = TRUE;
|
||||
call->current_params->audio_codec = rtp_profile_get_payload(call->audio_profile, used_pt);
|
||||
call->current_params->has_audio = TRUE;
|
||||
linphone_call_params_set_used_audio_codec(call->current_params, rtp_profile_get_payload(call->audio_profile, used_pt));
|
||||
linphone_call_params_enable_audio(call->current_params, TRUE);
|
||||
if (playcard==NULL) {
|
||||
ms_warning("No card defined for playback !");
|
||||
}
|
||||
|
|
@ -3483,7 +3483,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
|
|||
captcard=NULL;
|
||||
playcard=NULL;
|
||||
}
|
||||
if (call->params->in_conference){
|
||||
if (linphone_call_params_get_in_conference(call->params)){
|
||||
/* first create the graph without soundcard resources*/
|
||||
captcard=playcard=NULL;
|
||||
}
|
||||
|
|
@ -3497,9 +3497,9 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
|
|||
if (captcard && stream->max_rate>0) ms_snd_card_set_preferred_sample_rate(captcard, stream->max_rate);
|
||||
|
||||
rtp_session_enable_rtcp_mux(call->audiostream->ms.sessions.rtp_session, stream->rtcp_mux);
|
||||
if (!call->params->in_conference && call->params->record_file){
|
||||
audio_stream_mixed_record_open(call->audiostream,call->params->record_file);
|
||||
call->current_params->record_file=ms_strdup(call->params->record_file);
|
||||
if (!linphone_call_params_get_in_conference(call->params) && linphone_call_params_get_record_file(call->params)){
|
||||
audio_stream_mixed_record_open(call->audiostream,linphone_call_params_get_record_file(call->params));
|
||||
linphone_call_params_set_record_file(call->current_params, linphone_call_params_get_record_file(call->params));
|
||||
}
|
||||
/* valid local tags are > 0 */
|
||||
if (sal_stream_description_has_srtp(stream) == TRUE) {
|
||||
|
|
@ -3515,7 +3515,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
|
|||
}
|
||||
configure_rtp_session_for_rtcp_fb(call, stream);
|
||||
configure_rtp_session_for_rtcp_xr(lc, call, SalAudio);
|
||||
configure_adaptive_rate_control(call, (MediaStream*)call->audiostream, call->current_params->audio_codec, video_will_be_used);
|
||||
configure_adaptive_rate_control(call, (MediaStream*)call->audiostream, (PayloadType *)linphone_call_params_get_used_audio_codec(call->current_params), video_will_be_used);
|
||||
if (is_multicast)
|
||||
rtp_session_set_multicast_ttl(call->audiostream->ms.sessions.rtp_session,stream->ttl);
|
||||
|
||||
|
|
@ -3582,17 +3582,17 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
|
|||
setup_ring_player(lc,call);
|
||||
}
|
||||
|
||||
if (call->params->in_conference && lc->conf_ctx){
|
||||
if (linphone_call_params_get_in_conference(call->params) && lc->conf_ctx){
|
||||
/*transform the graph to connect it to the conference filter */
|
||||
mute = stream->dir==SalStreamRecvOnly;
|
||||
linphone_conference_on_call_stream_starting(lc->conf_ctx, call, mute);
|
||||
}
|
||||
call->current_params->in_conference=call->params->in_conference;
|
||||
call->current_params->low_bandwidth=call->params->low_bandwidth;
|
||||
linphone_call_params_set_in_conference(call->current_params, linphone_call_params_get_in_conference(call->params));
|
||||
linphone_call_params_enable_low_bandwidth(call->current_params, linphone_call_params_low_bandwidth_enabled(call->params));
|
||||
|
||||
/* start ZRTP engine if needed : set here or remote have a zrtp-hash attribute */
|
||||
if (linphone_core_media_encryption_supported(lc, LinphoneMediaEncryptionZRTP) &&
|
||||
(call->params->media_encryption == LinphoneMediaEncryptionZRTP || remote_stream->haveZrtpHash==1) ){
|
||||
(linphone_call_params_get_media_encryption(call->params) == LinphoneMediaEncryptionZRTP || remote_stream->haveZrtpHash==1) ){
|
||||
audio_stream_start_zrtp(call->audiostream);
|
||||
if (remote_stream->haveZrtpHash == 1) {
|
||||
int retval;
|
||||
|
|
@ -3666,8 +3666,8 @@ static void linphone_call_start_video_stream(LinphoneCall *call, LinphoneCallSta
|
|||
bool_t is_inactive=FALSE;
|
||||
MSWebCam *cam;
|
||||
|
||||
call->current_params->video_codec = rtp_profile_get_payload(call->video_profile, used_pt);
|
||||
call->current_params->has_video=TRUE;
|
||||
linphone_call_params_set_used_video_codec(call->current_params, rtp_profile_get_payload(call->video_profile, used_pt));
|
||||
linphone_call_params_enable_video(call->current_params, TRUE);
|
||||
|
||||
rtp_session_enable_rtcp_mux(call->videostream->ms.sessions.rtp_session, vstream->rtcp_mux);
|
||||
if (lc->video_conf.preview_vsize.width!=0)
|
||||
|
|
@ -3721,7 +3721,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, LinphoneCallSta
|
|||
}
|
||||
configure_rtp_session_for_rtcp_fb(call, vstream);
|
||||
configure_rtp_session_for_rtcp_xr(lc, call, SalVideo);
|
||||
configure_adaptive_rate_control(call, (MediaStream*)call->videostream, call->current_params->video_codec, TRUE);
|
||||
configure_adaptive_rate_control(call, (MediaStream*)call->videostream, (PayloadType *)linphone_call_params_get_used_video_codec(call->current_params), TRUE);
|
||||
|
||||
call->log->video_enabled = TRUE;
|
||||
video_stream_set_direction (call->videostream, dir);
|
||||
|
|
@ -3767,7 +3767,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, LinphoneCallSta
|
|||
_linphone_call_set_next_video_frame_decoded_trigger(call);
|
||||
|
||||
/* start ZRTP engine if needed : set here or remote have a zrtp-hash attribute */
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionZRTP || remote_stream->haveZrtpHash==1) {
|
||||
if (linphone_call_params_get_media_encryption(call->params)==LinphoneMediaEncryptionZRTP || remote_stream->haveZrtpHash==1) {
|
||||
/*audio stream is already encrypted and video stream is active*/
|
||||
if (media_stream_secured((MediaStream *)call->audiostream) && media_stream_get_state((MediaStream *)call->videostream) == MSStreamStarted) {
|
||||
video_stream_start_zrtp(call->videostream);
|
||||
|
|
@ -3816,8 +3816,8 @@ static void linphone_call_start_text_stream(LinphoneCall *call) {
|
|||
call->text_profile = make_profile(call, call->resultdesc, tstream, &used_pt);
|
||||
|
||||
if (used_pt != -1) {
|
||||
call->current_params->text_codec = rtp_profile_get_payload(call->text_profile, used_pt);
|
||||
call->current_params->realtimetext_enabled = TRUE;
|
||||
linphone_call_params_set_used_text_codec(call->current_params, rtp_profile_get_payload(call->text_profile, used_pt));
|
||||
linphone_call_params_enable_realtime_text(call->current_params, TRUE);
|
||||
|
||||
if (sal_stream_description_has_srtp(tstream) == TRUE) {
|
||||
int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, tstream->crypto_local_tag);
|
||||
|
|
@ -3868,7 +3868,7 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex
|
|||
}
|
||||
BCTBX_NO_BREAK;
|
||||
case LinphoneCallOutgoingEarlyMedia:
|
||||
if (!call->params->real_early_media){
|
||||
if (!linphone_call_params_early_media_sending_enabled(call->params)){
|
||||
call->all_muted = TRUE;
|
||||
}
|
||||
break;
|
||||
|
|
@ -3878,9 +3878,9 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex
|
|||
break;
|
||||
}
|
||||
|
||||
call->current_params->audio_codec = NULL;
|
||||
call->current_params->video_codec = NULL;
|
||||
call->current_params->text_codec = NULL;
|
||||
linphone_call_params_set_used_audio_codec(call->current_params, NULL);
|
||||
linphone_call_params_set_used_video_codec(call->current_params, NULL);
|
||||
linphone_call_params_set_used_text_codec(call->current_params, NULL);
|
||||
|
||||
if ((call->audiostream == NULL) && (call->videostream == NULL)) {
|
||||
ms_fatal("start_media_stream() called without prior init !");
|
||||
|
|
@ -3903,19 +3903,19 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex
|
|||
ms_message("linphone_call_start_media_streams() call=[%p] local upload_bandwidth=[%i] kbit/s; local download_bandwidth=[%i] kbit/s",
|
||||
call, linphone_core_get_upload_bandwidth(lc),linphone_core_get_download_bandwidth(lc));
|
||||
|
||||
call->current_params->has_audio = FALSE;
|
||||
linphone_call_params_enable_audio(call->current_params, FALSE);
|
||||
if (call->audiostream!=NULL) {
|
||||
linphone_call_start_audio_stream(call, next_state, video_will_be_used);
|
||||
} else {
|
||||
ms_warning("linphone_call_start_media_streams(): no audio stream!");
|
||||
}
|
||||
call->current_params->has_video=FALSE;
|
||||
linphone_call_params_enable_video(call->current_params, FALSE);
|
||||
if (call->videostream!=NULL) {
|
||||
if (call->audiostream) audio_stream_link_video(call->audiostream,call->videostream);
|
||||
linphone_call_start_video_stream(call, next_state);
|
||||
}
|
||||
/*the onhold file is to be played once both audio and video are ready.*/
|
||||
if (call->onhold_file && !call->params->in_conference && call->audiostream){
|
||||
if (call->onhold_file && !linphone_call_params_get_in_conference(call->params) && call->audiostream){
|
||||
MSFilter *player = audio_stream_open_remote_play(call->audiostream, call->onhold_file);
|
||||
if (player){
|
||||
int pause_time=500;
|
||||
|
|
@ -3926,15 +3926,15 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex
|
|||
|
||||
call->up_bw=linphone_core_get_upload_bandwidth(lc);
|
||||
|
||||
if (call->params->realtimetext_enabled) {
|
||||
if (linphone_call_params_realtime_text_enabled(call->params)) {
|
||||
linphone_call_start_text_stream(call);
|
||||
}
|
||||
|
||||
set_dtls_fingerprint_on_all_streams(call);
|
||||
|
||||
if ((call->ice_session != NULL) && (ice_session_state(call->ice_session) != IS_Completed)) {
|
||||
if (call->params->media_encryption==LinphoneMediaEncryptionDTLS) {
|
||||
call->current_params->update_call_when_ice_completed = FALSE;
|
||||
if (linphone_call_params_get_media_encryption(call->params)==LinphoneMediaEncryptionDTLS) {
|
||||
linphone_call_params_set_update_call_when_ice_completed(call->current_params, FALSE);
|
||||
ms_message("Disabling update call when ice completed on call [%p]",call);
|
||||
}
|
||||
ice_session_start_connectivity_checks(call->ice_session);
|
||||
|
|
@ -4086,7 +4086,7 @@ static void linphone_call_stop_audio_stream(LinphoneCall *call) {
|
|||
ortp_ev_queue_destroy(call->audiostream_app_evq);
|
||||
call->audiostream_app_evq=NULL;
|
||||
|
||||
call->current_params->audio_codec = NULL;
|
||||
linphone_call_params_set_used_audio_codec(call->current_params, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4105,7 +4105,7 @@ static void linphone_call_stop_video_stream(LinphoneCall *call) {
|
|||
ortp_ev_queue_flush(call->videostream_app_evq);
|
||||
ortp_ev_queue_destroy(call->videostream_app_evq);
|
||||
call->videostream_app_evq=NULL;
|
||||
call->current_params->video_codec = NULL;
|
||||
linphone_call_params_set_used_video_codec(call->current_params, NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -4128,7 +4128,7 @@ static void linphone_call_stop_text_stream(LinphoneCall *call) {
|
|||
ortp_ev_queue_flush(call->textstream_app_evq);
|
||||
ortp_ev_queue_destroy(call->textstream_app_evq);
|
||||
call->textstream_app_evq = NULL;
|
||||
call->current_params->text_codec = NULL;
|
||||
linphone_call_params_set_used_text_codec(call->current_params, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4538,18 +4538,18 @@ float linphone_call_stats_get_round_trip_delay(const LinphoneCallStats *stats) {
|
|||
}
|
||||
|
||||
void linphone_call_start_recording(LinphoneCall *call){
|
||||
if (!call->params->record_file){
|
||||
if (!linphone_call_params_get_record_file(call->params)){
|
||||
ms_error("linphone_call_start_recording(): no output file specified. Use linphone_call_params_set_record_file().");
|
||||
return;
|
||||
}
|
||||
if (call->audiostream && !call->params->in_conference){
|
||||
if (call->audiostream && !linphone_call_params_get_in_conference(call->params)){
|
||||
audio_stream_mixed_record_start(call->audiostream);
|
||||
}
|
||||
call->record_active=TRUE;
|
||||
}
|
||||
|
||||
void linphone_call_stop_recording(LinphoneCall *call){
|
||||
if (call->audiostream && !call->params->in_conference){
|
||||
if (call->audiostream && !linphone_call_params_get_in_conference(call->params)){
|
||||
audio_stream_mixed_record_stop(call->audiostream);
|
||||
}
|
||||
call->record_active=FALSE;
|
||||
|
|
@ -4650,9 +4650,9 @@ static void handle_ice_events(LinphoneCall *call, OrtpEvent *ev){
|
|||
/* At least one ICE session has succeeded, so perform a call update. */
|
||||
if (ice_session_has_completed_check_list(call->ice_session) == TRUE) {
|
||||
const LinphoneCallParams *current_param = linphone_call_get_current_params(call);
|
||||
if (ice_session_role(call->ice_session) == IR_Controlling && current_param->update_call_when_ice_completed ) {
|
||||
if (ice_session_role(call->ice_session) == IR_Controlling && linphone_call_params_get_update_call_when_ice_completed(current_param)) {
|
||||
LinphoneCallParams *params = linphone_core_create_call_params(call->core, call);
|
||||
params->internal_call_update = TRUE;
|
||||
linphone_call_params_set_internal_call_update(params, TRUE);
|
||||
linphone_call_update(call, params);
|
||||
linphone_call_params_unref(params);
|
||||
}
|
||||
|
|
@ -4942,7 +4942,7 @@ void linphone_call_set_transfer_state(LinphoneCall* call, LinphoneCallState stat
|
|||
}
|
||||
|
||||
bool_t linphone_call_is_in_conference(const LinphoneCall *call) {
|
||||
return call->params->in_conference;
|
||||
return linphone_call_params_get_in_conference(call->params);
|
||||
}
|
||||
|
||||
LinphoneConference *linphone_call_get_conference(const LinphoneCall *call) {
|
||||
|
|
@ -5286,7 +5286,7 @@ LinphoneStatus linphone_call_resume(LinphoneCall *call) {
|
|||
return -1;
|
||||
}
|
||||
lc = linphone_call_get_core(call);
|
||||
if (call->params->in_conference == FALSE) {
|
||||
if (linphone_call_params_get_in_conference(call->params) == FALSE) {
|
||||
if (linphone_core_sound_resources_locked(lc)) {
|
||||
ms_warning("Cannot resume call %p because another call is locking the sound resources.", call);
|
||||
return -1;
|
||||
|
|
@ -5314,12 +5314,12 @@ LinphoneStatus linphone_call_resume(LinphoneCall *call) {
|
|||
sal_call_set_local_media_description(call->op, NULL);
|
||||
}
|
||||
sal_media_description_set_dir(call->localdesc, SalStreamSendRecv);
|
||||
if (call->params->in_conference && !call->current_params->in_conference) subject = "Conference";
|
||||
if (linphone_call_params_get_in_conference(call->params) && !linphone_call_params_get_in_conference(call->current_params)) subject = "Conference";
|
||||
if (sal_call_update(call->op, subject, FALSE) != 0) {
|
||||
return -1;
|
||||
}
|
||||
linphone_call_set_state(call, LinphoneCallResuming,"Resuming");
|
||||
if (call->params->in_conference == FALSE)
|
||||
if (linphone_call_params_get_in_conference(call->params) == FALSE)
|
||||
lc->current_call = call;
|
||||
remote_address = linphone_call_get_remote_address_as_string(call);
|
||||
display_status = ms_strdup_printf("Resuming the call with with %s", remote_address);
|
||||
|
|
@ -5548,7 +5548,7 @@ LinphoneStatus linphone_call_accept_with_params(LinphoneCall *call, const Linpho
|
|||
linphone_call_prepare_ice(call, TRUE);
|
||||
linphone_call_make_local_media_description(call);
|
||||
sal_call_set_local_media_description(call->op, call->localdesc);
|
||||
sal_op_set_sent_custom_header(call->op, params->custom_headers);
|
||||
sal_op_set_sent_custom_header(call->op, linphone_call_params_get_custom_headers(params));
|
||||
}
|
||||
|
||||
/* Give a chance a set card prefered sampling frequency */
|
||||
|
|
@ -5603,7 +5603,7 @@ LinphoneStatus linphone_call_accept_early_media_with_params(LinphoneCall *call,
|
|||
_linphone_call_set_new_params(call, params);
|
||||
linphone_call_make_local_media_description(call);
|
||||
sal_call_set_local_media_description(call->op, call->localdesc);
|
||||
sal_op_set_sent_custom_header(call->op, params->custom_headers);
|
||||
sal_op_set_sent_custom_header(call->op, linphone_call_params_get_custom_headers(params));
|
||||
}
|
||||
|
||||
sal_call_notify_ringing(call->op, TRUE);
|
||||
|
|
@ -5720,7 +5720,7 @@ LinphoneStatus linphone_call_update(LinphoneCall *call, const LinphoneCallParams
|
|||
int linphone_call_start_update(LinphoneCall *call) {
|
||||
const char *subject;
|
||||
int err;
|
||||
bool_t no_user_consent = call->params->no_user_consent;
|
||||
bool_t no_user_consent = linphone_call_params_get_no_user_consent(call->params);
|
||||
LinphoneCore *lc = linphone_call_get_core(call);
|
||||
|
||||
linphone_call_fill_media_multicast_addr(call);
|
||||
|
|
@ -5731,9 +5731,9 @@ int linphone_call_start_update(LinphoneCall *call) {
|
|||
linphone_call_update_local_media_description_from_upnp(call->localdesc, call->upnp_session);
|
||||
}
|
||||
#endif // BUILD_UPNP
|
||||
if (call->params->in_conference) {
|
||||
if (linphone_call_params_get_in_conference(call->params)) {
|
||||
subject = "Conference";
|
||||
} else if (call->params->internal_call_update) {
|
||||
} else if (linphone_call_params_get_internal_call_update(call->params)) {
|
||||
subject = "ICE processing concluded";
|
||||
} else if (no_user_consent) {
|
||||
subject = "Refreshing";
|
||||
|
|
@ -5824,13 +5824,13 @@ int _linphone_call_accept_update(LinphoneCall *call, const LinphoneCallParams *p
|
|||
_linphone_call_set_new_params(call, params);
|
||||
}
|
||||
|
||||
if (call->params->has_video && !linphone_core_video_enabled(lc)) {
|
||||
if (linphone_call_params_video_enabled(call->params) && !linphone_core_video_enabled(lc)) {
|
||||
ms_warning("Requested video but video support is globally disabled. Refusing video.");
|
||||
call->params->has_video = FALSE;
|
||||
linphone_call_params_enable_video(call->params, FALSE);
|
||||
}
|
||||
if (call->current_params->in_conference) {
|
||||
if (linphone_call_params_get_in_conference(call->current_params)) {
|
||||
ms_warning("Video isn't supported in conference");
|
||||
call->params->has_video = FALSE;
|
||||
linphone_call_params_enable_video(call->params, FALSE);
|
||||
}
|
||||
/* Update multicast params according to call params */
|
||||
linphone_call_fill_media_multicast_addr(call);
|
||||
|
|
|
|||
|
|
@ -3340,10 +3340,10 @@ LinphoneCall * linphone_core_start_refered_call(LinphoneCore *lc, LinphoneCall *
|
|||
}
|
||||
|
||||
if (!params){
|
||||
cp->has_audio = call->current_params->has_audio;
|
||||
cp->has_video = call->current_params->has_video; /*start the call to refer-target with video enabled if original call had video*/
|
||||
linphone_call_params_enable_audio(cp, linphone_call_params_audio_enabled(call->current_params));
|
||||
linphone_call_params_enable_video(cp, linphone_call_params_video_enabled(call->current_params)); /*start the call to refer-target with video enabled if original call had video*/
|
||||
}
|
||||
cp->referer=call;
|
||||
linphone_call_params_set_referer(cp, call);
|
||||
ms_message("Starting new call to refered address %s",call->refer_to);
|
||||
call->refer_pending=FALSE;
|
||||
newcall=linphone_core_invite_with_params(lc,call->refer_to,cp);
|
||||
|
|
@ -3456,7 +3456,7 @@ const char *linphone_core_find_best_identity(LinphoneCore *lc, const LinphoneAdd
|
|||
LinphoneCall * linphone_core_invite(LinphoneCore *lc, const char *url){
|
||||
LinphoneCall *call;
|
||||
LinphoneCallParams *p=linphone_core_create_call_params(lc, NULL);
|
||||
p->has_video &= !!lc->video_policy.automatically_initiate;
|
||||
linphone_call_params_enable_video(p, linphone_call_params_video_enabled(p) & !!lc->video_policy.automatically_initiate);
|
||||
call=linphone_core_invite_with_params(lc,url,p);
|
||||
linphone_call_params_unref(p);
|
||||
return call;
|
||||
|
|
@ -3476,7 +3476,7 @@ LinphoneCall * linphone_core_invite_with_params(LinphoneCore *lc, const char *ur
|
|||
LinphoneCall * linphone_core_invite_address(LinphoneCore *lc, const LinphoneAddress *addr){
|
||||
LinphoneCall *call;
|
||||
LinphoneCallParams *p=linphone_core_create_call_params(lc, NULL);
|
||||
p->has_video &= !!lc->video_policy.automatically_initiate;
|
||||
linphone_call_params_enable_video(p, linphone_call_params_video_enabled(p) & !!lc->video_policy.automatically_initiate);
|
||||
call=linphone_core_invite_address_with_params (lc,addr,p);
|
||||
linphone_call_params_unref(p);
|
||||
return call;
|
||||
|
|
@ -3554,11 +3554,11 @@ LinphoneCall * linphone_core_invite_address_with_params(LinphoneCore *lc, const
|
|||
|
||||
if (proxy!=NULL) {
|
||||
from=linphone_proxy_config_get_identity(proxy);
|
||||
cp->avpf_enabled = linphone_proxy_config_avpf_enabled(proxy);
|
||||
cp->avpf_rr_interval = linphone_proxy_config_get_avpf_rr_interval(proxy) * 1000;
|
||||
linphone_call_params_enable_avpf(cp, linphone_proxy_config_avpf_enabled(proxy));
|
||||
linphone_call_params_set_avpf_rr_interval(cp, linphone_proxy_config_get_avpf_rr_interval(proxy) * 1000);
|
||||
}else{
|
||||
cp->avpf_enabled=linphone_core_get_avpf_mode(lc)==LinphoneAVPFEnabled;
|
||||
if (cp->avpf_enabled) cp->avpf_rr_interval=linphone_core_get_avpf_rr_interval(lc) * 1000;
|
||||
linphone_call_params_enable_avpf(cp, linphone_core_get_avpf_mode(lc)==LinphoneAVPFEnabled);
|
||||
if (linphone_call_params_avpf_enabled(cp)) linphone_call_params_set_avpf_rr_interval(cp, linphone_core_get_avpf_rr_interval(lc) * 1000);
|
||||
}
|
||||
|
||||
/* if no proxy or no identity defined for this proxy, default to primary contact*/
|
||||
|
|
@ -6808,26 +6808,26 @@ void linphone_core_set_media_encryption_mandatory(LinphoneCore *lc, bool_t m) {
|
|||
}
|
||||
|
||||
void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *params) {
|
||||
params->has_audio = TRUE;
|
||||
params->has_video=linphone_core_video_enabled(lc) && lc->video_policy.automatically_initiate;
|
||||
linphone_call_params_enable_audio(params, TRUE);
|
||||
linphone_call_params_enable_video(params, linphone_core_video_enabled(lc) && lc->video_policy.automatically_initiate);
|
||||
if (!linphone_core_video_enabled(lc) && lc->video_policy.automatically_initiate){
|
||||
ms_error("LinphoneCore has video disabled for both capture and display, but video policy is to start the call with video. "
|
||||
"This is a possible mis-use of the API. In this case, video is disabled in default LinphoneCallParams");
|
||||
}
|
||||
params->media_encryption=linphone_core_get_media_encryption(lc);
|
||||
params->in_conference=FALSE;
|
||||
params->realtimetext_enabled = linphone_core_realtime_text_enabled(lc);
|
||||
params->privacy=LinphonePrivacyDefault;
|
||||
params->avpf_enabled=linphone_core_get_avpf_mode(lc);
|
||||
params->implicit_rtcp_fb = lp_config_get_int(lc->config,"rtp","rtcp_fb_implicit_rtcp_fb",TRUE);
|
||||
params->avpf_rr_interval = linphone_core_get_avpf_rr_interval(lc);
|
||||
params->audio_dir=LinphoneMediaDirectionSendRecv;
|
||||
params->video_dir=LinphoneMediaDirectionSendRecv;
|
||||
params->real_early_media=lp_config_get_int(lc->config,"misc","real_early_media",FALSE);
|
||||
params->audio_multicast_enabled=linphone_core_audio_multicast_enabled(lc);
|
||||
params->video_multicast_enabled=linphone_core_video_multicast_enabled(lc);
|
||||
params->update_call_when_ice_completed = lp_config_get_int(lc->config, "sip", "update_call_when_ice_completed", TRUE);
|
||||
params->encryption_mandatory = linphone_core_is_media_encryption_mandatory(lc);
|
||||
linphone_call_params_set_media_encryption(params, linphone_core_get_media_encryption(lc));
|
||||
linphone_call_params_set_in_conference(params, FALSE);
|
||||
linphone_call_params_enable_realtime_text(params, linphone_core_realtime_text_enabled(lc));
|
||||
linphone_call_params_set_privacy(params, LinphonePrivacyDefault);
|
||||
linphone_call_params_enable_avpf(params, linphone_core_get_avpf_mode(lc));
|
||||
linphone_call_params_enable_implicit_rtcp_fb(params, lp_config_get_int(lc->config,"rtp","rtcp_fb_implicit_rtcp_fb",TRUE));
|
||||
linphone_call_params_set_avpf_rr_interval(params, linphone_core_get_avpf_rr_interval(lc));
|
||||
linphone_call_params_set_audio_direction(params, LinphoneMediaDirectionSendRecv);
|
||||
linphone_call_params_set_video_direction(params, LinphoneMediaDirectionSendRecv);
|
||||
linphone_call_params_enable_early_media_sending(params, lp_config_get_int(lc->config,"misc","real_early_media",FALSE));
|
||||
linphone_call_params_enable_audio_multicast(params, linphone_core_audio_multicast_enabled(lc));
|
||||
linphone_call_params_enable_video_multicast(params, linphone_core_video_multicast_enabled(lc));
|
||||
linphone_call_params_set_update_call_when_ice_completed(params, lp_config_get_int(lc->config, "sip", "update_call_when_ice_completed", TRUE));
|
||||
linphone_call_params_enable_mandatory_media_encryption(params, linphone_core_is_media_encryption_mandatory(lc));
|
||||
}
|
||||
|
||||
void linphone_core_set_device_identifier(LinphoneCore *lc,const char* device_id) {
|
||||
|
|
|
|||
|
|
@ -464,13 +464,15 @@ void linphone_core_adapt_to_network(LinphoneCore *lc, int ping_time_ms, Linphone
|
|||
|
||||
if (ping_time_ms>threshold){
|
||||
/* we might be in a 2G network*/
|
||||
params->low_bandwidth=TRUE;
|
||||
linphone_call_params_enable_low_bandwidth(params, TRUE);
|
||||
}/*else use default settings */
|
||||
}
|
||||
if (params->low_bandwidth){
|
||||
params->up_bw=params->down_bw=linphone_core_get_edge_bw(lc);
|
||||
params->up_ptime=params->down_ptime=linphone_core_get_edge_ptime(lc);
|
||||
params->has_video=FALSE;
|
||||
if (linphone_call_params_low_bandwidth_enabled(params)){
|
||||
linphone_call_params_set_up_bandwidth(params, linphone_core_get_edge_bw(lc));
|
||||
linphone_call_params_set_down_bandwidth(params, linphone_core_get_edge_bw(lc));
|
||||
linphone_call_params_set_up_ptime(params, linphone_core_get_edge_ptime(lc));
|
||||
linphone_call_params_set_down_ptime(params, linphone_core_get_edge_ptime(lc));
|
||||
linphone_call_params_enable_video(params, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -555,7 +557,7 @@ static void linphone_core_add_local_ice_candidates(LinphoneCall *call, int famil
|
|||
ice_add_local_candidate(video_cl, "host", family, addr, call->media_ports[call->main_video_stream_index].rtcp_port, 2, NULL);
|
||||
call->video_stats->ice_state = LinphoneIceStateInProgress;
|
||||
}
|
||||
if (call->params->realtimetext_enabled && (text_cl != NULL)
|
||||
if (linphone_call_params_realtime_text_enabled(call->params) && (text_cl != NULL)
|
||||
&& (ice_check_list_state(text_cl) != ICL_Completed) && (ice_check_list_candidates_gathered(text_cl) == FALSE)) {
|
||||
ice_add_local_candidate(text_cl, "host", family, addr, call->media_ports[call->main_text_stream_index].rtp_port, 1, NULL);
|
||||
ice_add_local_candidate(text_cl, "host", family, addr, call->media_ports[call->main_text_stream_index].rtcp_port, 2, NULL);
|
||||
|
|
@ -706,7 +708,7 @@ void linphone_call_update_ice_state_in_call_stats(LinphoneCall *call) {
|
|||
|
||||
session_state = ice_session_state(call->ice_session);
|
||||
if ((session_state == IS_Completed) || ((session_state == IS_Failed) && (ice_session_has_completed_check_list(call->ice_session) == TRUE))) {
|
||||
if (call->params->has_audio && (audio_check_list != NULL)) {
|
||||
if (linphone_call_params_audio_enabled(call->params) && (audio_check_list != NULL)) {
|
||||
if (ice_check_list_state(audio_check_list) == ICL_Completed) {
|
||||
switch (ice_check_list_selected_valid_candidate_type(audio_check_list)) {
|
||||
case ICT_HostCandidate:
|
||||
|
|
@ -729,7 +731,7 @@ void linphone_call_update_ice_state_in_call_stats(LinphoneCall *call) {
|
|||
}
|
||||
}else call->audio_stats->ice_state = LinphoneIceStateNotActivated;
|
||||
|
||||
if (call->params->has_video && (video_check_list != NULL)) {
|
||||
if (linphone_call_params_video_enabled(call->params) && (video_check_list != NULL)) {
|
||||
if (ice_check_list_state(video_check_list) == ICL_Completed) {
|
||||
switch (ice_check_list_selected_valid_candidate_type(video_check_list)) {
|
||||
case ICT_HostCandidate:
|
||||
|
|
@ -752,7 +754,7 @@ void linphone_call_update_ice_state_in_call_stats(LinphoneCall *call) {
|
|||
}
|
||||
}else call->video_stats->ice_state = LinphoneIceStateNotActivated;
|
||||
|
||||
if (call->params->realtimetext_enabled && (text_check_list != NULL)) {
|
||||
if (linphone_call_params_realtime_text_enabled(call->params) && (text_check_list != NULL)) {
|
||||
if (ice_check_list_state(text_check_list) == ICL_Completed) {
|
||||
switch (ice_check_list_selected_valid_candidate_type(text_check_list)) {
|
||||
case ICT_HostCandidate:
|
||||
|
|
@ -776,18 +778,18 @@ void linphone_call_update_ice_state_in_call_stats(LinphoneCall *call) {
|
|||
}else call->text_stats->ice_state = LinphoneIceStateNotActivated;
|
||||
} else if (session_state == IS_Running) {
|
||||
call->audio_stats->ice_state = LinphoneIceStateInProgress;
|
||||
if (call->params->has_video && (video_check_list != NULL)) {
|
||||
if (linphone_call_params_video_enabled(call->params) && (video_check_list != NULL)) {
|
||||
call->video_stats->ice_state = LinphoneIceStateInProgress;
|
||||
}
|
||||
if (call->params->realtimetext_enabled && (text_check_list != NULL)) {
|
||||
if (linphone_call_params_realtime_text_enabled(call->params) && (text_check_list != NULL)) {
|
||||
call->text_stats->ice_state = LinphoneIceStateInProgress;
|
||||
}
|
||||
} else {
|
||||
call->audio_stats->ice_state = LinphoneIceStateFailed;
|
||||
if (call->params->has_video && (video_check_list != NULL)) {
|
||||
if (linphone_call_params_video_enabled(call->params) && (video_check_list != NULL)) {
|
||||
call->video_stats->ice_state = LinphoneIceStateFailed;
|
||||
}
|
||||
if (call->params->realtimetext_enabled && (text_check_list != NULL)) {
|
||||
if (linphone_call_params_realtime_text_enabled(call->params) && (text_check_list != NULL)) {
|
||||
call->text_stats->ice_state = LinphoneIceStateFailed;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,54 +131,6 @@ extern "C" {
|
|||
#define STRING_SET(field, value) do{ if (field){bctbx_free(field);field=NULL;}; field=bctbx_strdup(value); }while(0)
|
||||
#define STRING_TRANSFER(field, newvalue) do{ if (field){bctbx_free(field);field=NULL;}; field=newvalue; }while(0)
|
||||
|
||||
struct _LinphoneCallParams{
|
||||
belle_sip_object_t base;
|
||||
void *user_data;
|
||||
LinphoneCall *referer; /*in case this call creation is consecutive to an incoming transfer, this points to the original call */
|
||||
int audio_bw; /* bandwidth limit for audio stream */
|
||||
LinphoneMediaEncryption media_encryption;
|
||||
PayloadType *audio_codec; /*audio codec currently in use */
|
||||
PayloadType *video_codec; /*video codec currently in use */
|
||||
PayloadType *text_codec; /*text codec currently in use */
|
||||
MSVideoSize sent_vsize; /* DEPRECATED: Size of the video currently being sent */
|
||||
MSVideoSize recv_vsize; /* DEPRECATED: Size of the video currently being received */
|
||||
LinphoneVideoDefinition *sent_vdef; /* Definition of the video currently being sent */
|
||||
LinphoneVideoDefinition *recv_vdef; /* Definition of the video currrently being received */
|
||||
float received_fps,sent_fps;
|
||||
int down_bw;
|
||||
int up_bw;
|
||||
int down_ptime;
|
||||
int up_ptime;
|
||||
char *record_file;
|
||||
char *session_name;
|
||||
SalCustomHeader *custom_headers;
|
||||
SalCustomSdpAttribute *custom_sdp_attributes;
|
||||
SalCustomSdpAttribute *custom_sdp_media_attributes[LinphoneStreamTypeUnknown];
|
||||
LinphonePrivacyMask privacy;
|
||||
LinphoneMediaDirection audio_dir;
|
||||
LinphoneMediaDirection video_dir;
|
||||
bool_t has_audio;
|
||||
bool_t has_video;
|
||||
bool_t avpf_enabled; /* RTCP feedback messages are enabled */
|
||||
bool_t implicit_rtcp_fb;
|
||||
|
||||
bool_t real_early_media; /*send real media even during early media (for outgoing calls)*/
|
||||
bool_t in_conference; /*in conference mode */
|
||||
bool_t low_bandwidth;
|
||||
bool_t no_user_consent;/*when set to TRUE an UPDATE request will be used instead of reINVITE*/
|
||||
|
||||
uint16_t avpf_rr_interval; /*in milliseconds*/
|
||||
bool_t internal_call_update; /*use mark that call update was requested internally (might be by ice) - unused for the moment*/
|
||||
bool_t video_multicast_enabled;
|
||||
|
||||
bool_t audio_multicast_enabled;
|
||||
bool_t realtimetext_enabled;
|
||||
bool_t update_call_when_ice_completed;
|
||||
bool_t encryption_mandatory;
|
||||
};
|
||||
|
||||
BELLE_SIP_DECLARE_VPTR_NO_EXPORT(LinphoneCallParams);
|
||||
|
||||
|
||||
typedef enum _ImdnType {
|
||||
ImdnTypeDelivery,
|
||||
|
|
@ -445,6 +397,38 @@ SalStreamDir get_video_dir_from_call_params(const LinphoneCallParams *params);
|
|||
void linphone_call_params_set_custom_headers(LinphoneCallParams *params, const SalCustomHeader *ch);
|
||||
void linphone_call_params_set_custom_sdp_attributes(LinphoneCallParams *params, const SalCustomSdpAttribute *csa);
|
||||
void linphone_call_params_set_custom_sdp_media_attributes(LinphoneCallParams *params, LinphoneStreamType type, const SalCustomSdpAttribute *csa);
|
||||
bool_t linphone_call_params_get_in_conference(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_in_conference(LinphoneCallParams *params, bool_t value);
|
||||
bool_t linphone_call_params_get_internal_call_update(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_internal_call_update(LinphoneCallParams *params, bool_t value);
|
||||
bool_t linphone_call_params_implicit_rtcp_fb_enabled(const LinphoneCallParams *params);
|
||||
void linphone_call_params_enable_implicit_rtcp_fb(LinphoneCallParams *params, bool_t value);
|
||||
int linphone_call_params_get_down_bandwidth(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_down_bandwidth(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_up_bandwidth(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_up_bandwidth(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_down_ptime(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_down_ptime(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_up_ptime(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_up_ptime(LinphoneCallParams *params, int value);
|
||||
SalCustomHeader * linphone_call_params_get_custom_headers(const LinphoneCallParams *params);
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_attributes(const LinphoneCallParams *params);
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_media_attributes(const LinphoneCallParams *params, LinphoneStreamType type);
|
||||
LinphoneCall * linphone_call_params_get_referer(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_referer(LinphoneCallParams *params, LinphoneCall *referer);
|
||||
bool_t linphone_call_params_get_update_call_when_ice_completed(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_update_call_when_ice_completed(LinphoneCallParams *params, bool_t value);
|
||||
void linphone_call_params_set_sent_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
void linphone_call_params_set_recv_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
void linphone_call_params_set_sent_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
void linphone_call_params_set_received_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
void linphone_call_params_set_sent_fps(LinphoneCallParams *params, float value);
|
||||
void linphone_call_params_set_received_fps(LinphoneCallParams *params, float value);
|
||||
void linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
void linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
void linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
bool_t linphone_call_params_get_no_user_consent(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_no_user_consent(LinphoneCallParams *params, bool_t value);
|
||||
|
||||
void linphone_auth_info_write_config(LinphoneConfig *config, LinphoneAuthInfo *obj, int pos);
|
||||
LinphoneAuthInfo * linphone_auth_info_new_from_config_file(LpConfig *config, int pos);
|
||||
|
|
|
|||
|
|
@ -545,15 +545,15 @@ void linphone_reporting_update_media_info(LinphoneCall * call, int stats_type) {
|
|||
/*yet we use the same payload config for local and remote, since this is the largest use case*/
|
||||
if (stats_type == LINPHONE_CALL_STATS_AUDIO && call->audiostream != NULL) {
|
||||
stream = &call->audiostream->ms;
|
||||
local_payload = current_params->audio_codec;
|
||||
local_payload = linphone_call_params_get_used_audio_codec(current_params);
|
||||
remote_payload = local_payload;
|
||||
} else if (stats_type == LINPHONE_CALL_STATS_VIDEO && call->videostream != NULL) {
|
||||
stream = &call->videostream->ms;
|
||||
local_payload = current_params->video_codec;
|
||||
local_payload = linphone_call_params_get_used_video_codec(current_params);
|
||||
remote_payload = local_payload;
|
||||
} else if (stats_type == LINPHONE_CALL_STATS_TEXT && call->textstream != NULL) {
|
||||
stream = &call->textstream->ms;
|
||||
local_payload = current_params->text_codec;
|
||||
local_payload = linphone_call_params_get_used_text_codec(current_params);
|
||||
remote_payload = local_payload;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -338,6 +338,16 @@ LINPHONE_PUBLIC void linphone_call_params_set_audio_direction(LinphoneCallParams
|
|||
LINPHONE_PUBLIC void linphone_call_params_set_video_direction(LinphoneCallParams *cp, LinphoneMediaDirection dir);
|
||||
|
||||
|
||||
int linphone_call_params_get_audio_bandwidth_limit(const LinphoneCallParams *params);
|
||||
bool_t linphone_call_params_real_early_media_enabled(const LinphoneCallParams *params);
|
||||
bool_t linphone_call_params_avpf_enabled(const LinphoneCallParams *params);
|
||||
void linphone_call_params_enable_avpf(LinphoneCallParams *params, bool_t enable);
|
||||
bool_t linphone_call_params_mandatory_media_encryption_enabled(const LinphoneCallParams *params);
|
||||
void linphone_call_params_enable_mandatory_media_encryption(LinphoneCallParams *params, bool_t value);
|
||||
uint16_t linphone_call_params_get_avpf_rr_interval(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_avpf_rr_interval(LinphoneCallParams *params, uint16_t value);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Reference and user data handling functions *
|
||||
******************************************************************************/
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ set(LINPHONE_CXX_OBJECTS_PRIVATE_HEADER_FILES
|
|||
conference/params/call-session-params.h
|
||||
conference/params/call-session-params-p.h
|
||||
conference/params/media-session-params.h
|
||||
conference/params/media-session-params-p.h
|
||||
conference/participant.h
|
||||
conference/remote-conference.h
|
||||
conference/session/call-session.h
|
||||
|
|
|
|||
|
|
@ -16,28 +16,58 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _CONFERENCE_CALL_SESSION_PARAMS_P_H_
|
||||
#define _CONFERENCE_CALL_SESSION_PARAMS_P_H_
|
||||
#ifndef _CALL_SESSION_PARAMS_P_H_
|
||||
#define _CALL_SESSION_PARAMS_P_H_
|
||||
|
||||
#include "object/object-p.h"
|
||||
#include "object/clonable-object-p.h"
|
||||
|
||||
#include "call-session-params.h"
|
||||
|
||||
#include "linphone/types.h"
|
||||
|
||||
// =============================================================================
|
||||
|
||||
namespace LinphonePrivate {
|
||||
namespace Conference {
|
||||
class CallSessionParamsPrivate : public ObjectPrivate {
|
||||
public:
|
||||
virtual ~CallSessionParamsPrivate () = default;
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
LinphonePrivacyMask privacy = LinphonePrivacyNone;
|
||||
class CallSessionParamsPrivate : public ClonableObjectPrivate {
|
||||
public:
|
||||
CallSessionParamsPrivate () = default;
|
||||
CallSessionParamsPrivate (const CallSessionParamsPrivate &src);
|
||||
virtual ~CallSessionParamsPrivate ();
|
||||
|
||||
L_DECLARE_PUBLIC(CallSessionParams);
|
||||
};
|
||||
}
|
||||
}
|
||||
bool getInConference () const { return inConference; }
|
||||
void setInConference (bool value) { inConference = value; }
|
||||
bool getInternalCallUpdate () const { return internalCallUpdate; }
|
||||
void setInternalCallUpdate (bool value) { internalCallUpdate = value; }
|
||||
bool getNoUserConsent () const { return noUserConsent; }
|
||||
void setNoUserConsent (bool value) { noUserConsent = value; }
|
||||
|
||||
#endif // ifndef _CONFERENCE_CALL_SESSION_PARAMS_P_H_
|
||||
SalCustomHeader * getCustomHeaders () const;
|
||||
void setCustomHeaders (const SalCustomHeader *ch);
|
||||
SalCustomSdpAttribute * getCustomSdpAttributes () const;
|
||||
void setCustomSdpAttributes (const SalCustomSdpAttribute *csa);
|
||||
SalCustomSdpAttribute * getCustomSdpMediaAttributes (LinphoneStreamType lst) const;
|
||||
void setCustomSdpMediaAttributes (LinphoneStreamType lst, const SalCustomSdpAttribute *csa);
|
||||
|
||||
LinphoneCall *getReferer () const { return referer; }
|
||||
void setReferer (LinphoneCall *call) { referer = call; }
|
||||
|
||||
public:
|
||||
std::string sessionName;
|
||||
|
||||
LinphonePrivacyMask privacy = LinphonePrivacyNone;
|
||||
|
||||
private:
|
||||
bool inConference = false;
|
||||
bool internalCallUpdate = false;
|
||||
bool noUserConsent = false; /* When set to true an UPDATE request will be used instead of reINVITE */
|
||||
SalCustomHeader *customHeaders = nullptr;
|
||||
SalCustomSdpAttribute *customSdpAttributes = nullptr;
|
||||
SalCustomSdpAttribute *customSdpMediaAttributes[LinphoneStreamTypeUnknown];
|
||||
LinphoneCall *referer = nullptr; /* In case call creation is consecutive to an incoming transfer, this points to the original call */
|
||||
|
||||
public:
|
||||
L_DECLARE_PUBLIC(CallSessionParams);
|
||||
};
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
||||
#endif // ifndef _CALL_SESSION_PARAMS_P_H_
|
||||
|
|
|
|||
|
|
@ -20,8 +20,171 @@
|
|||
|
||||
#include "call-session-params.h"
|
||||
|
||||
using namespace LinphonePrivate;
|
||||
using namespace std;
|
||||
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Conference::CallSessionParams::CallSessionParams (CallSessionParamsPrivate &p) : Object(p) {}
|
||||
CallSessionParamsPrivate::CallSessionParamsPrivate (const CallSessionParamsPrivate &src) {
|
||||
sessionName = src.sessionName;
|
||||
privacy = src.privacy;
|
||||
inConference = src.inConference;
|
||||
internalCallUpdate = src.internalCallUpdate;
|
||||
noUserConsent = src.noUserConsent;
|
||||
/* The management of the custom headers is not optimal. We copy everything while ref counting would be more efficient. */
|
||||
if (src.customHeaders)
|
||||
customHeaders = sal_custom_header_clone(src.customHeaders);
|
||||
if (src.customSdpAttributes)
|
||||
customSdpAttributes = sal_custom_sdp_attribute_clone(src.customSdpAttributes);
|
||||
for (unsigned int i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) {
|
||||
if (src.customSdpMediaAttributes[i])
|
||||
customSdpMediaAttributes[i] = sal_custom_sdp_attribute_clone(src.customSdpMediaAttributes[i]);
|
||||
}
|
||||
referer = src.referer;
|
||||
}
|
||||
|
||||
CallSessionParamsPrivate::~CallSessionParamsPrivate () {
|
||||
if (customHeaders)
|
||||
sal_custom_header_free(customHeaders);
|
||||
if (customSdpAttributes)
|
||||
sal_custom_sdp_attribute_free(customSdpAttributes);
|
||||
for (unsigned int i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) {
|
||||
if (customSdpMediaAttributes[i])
|
||||
sal_custom_sdp_attribute_free(customSdpMediaAttributes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
SalCustomHeader * CallSessionParamsPrivate::getCustomHeaders () const {
|
||||
return customHeaders;
|
||||
}
|
||||
|
||||
void CallSessionParamsPrivate::setCustomHeaders (const SalCustomHeader *ch) {
|
||||
if (customHeaders) {
|
||||
sal_custom_header_free(customHeaders);
|
||||
customHeaders = nullptr;
|
||||
}
|
||||
if (ch)
|
||||
customHeaders = sal_custom_header_clone(ch);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
SalCustomSdpAttribute * CallSessionParamsPrivate::getCustomSdpAttributes () const {
|
||||
return customSdpAttributes;
|
||||
}
|
||||
|
||||
void CallSessionParamsPrivate::setCustomSdpAttributes (const SalCustomSdpAttribute *csa) {
|
||||
if (customSdpAttributes) {
|
||||
sal_custom_sdp_attribute_free(customSdpAttributes);
|
||||
customSdpAttributes = nullptr;
|
||||
}
|
||||
if (csa)
|
||||
customSdpAttributes = sal_custom_sdp_attribute_clone(csa);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
SalCustomSdpAttribute * CallSessionParamsPrivate::getCustomSdpMediaAttributes (LinphoneStreamType lst) const {
|
||||
return customSdpMediaAttributes[lst];
|
||||
}
|
||||
|
||||
void CallSessionParamsPrivate::setCustomSdpMediaAttributes (LinphoneStreamType lst, const SalCustomSdpAttribute *csa) {
|
||||
if (customSdpMediaAttributes[lst]) {
|
||||
sal_custom_sdp_attribute_free(customSdpMediaAttributes[lst]);
|
||||
customSdpMediaAttributes[lst] = nullptr;
|
||||
}
|
||||
if (csa)
|
||||
customSdpMediaAttributes[lst] = sal_custom_sdp_attribute_clone(csa);
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
|
||||
CallSessionParams::CallSessionParams () : ClonableObject(*new CallSessionParamsPrivate) {}
|
||||
|
||||
CallSessionParams::CallSessionParams (CallSessionParamsPrivate &p) : ClonableObject(p) {
|
||||
L_D(CallSessionParams);
|
||||
memset(d->customSdpMediaAttributes, 0, sizeof(d->customSdpMediaAttributes));
|
||||
}
|
||||
|
||||
CallSessionParams::CallSessionParams (const CallSessionParams &src)
|
||||
: ClonableObject(*new CallSessionParamsPrivate(*src.getPrivate())) {}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
const string& CallSessionParams::getSessionName () const {
|
||||
L_D(const CallSessionParams);
|
||||
return d->sessionName;
|
||||
}
|
||||
|
||||
void CallSessionParams::setSessionName (const string &sessionName) {
|
||||
L_D(CallSessionParams);
|
||||
d->sessionName = sessionName;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
LinphonePrivacyMask CallSessionParams::getPrivacy () const {
|
||||
L_D(const CallSessionParams);
|
||||
return d->privacy;
|
||||
}
|
||||
|
||||
void CallSessionParams::setPrivacy (LinphonePrivacyMask privacy) {
|
||||
L_D(CallSessionParams);
|
||||
d->privacy = privacy;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void CallSessionParams::addCustomHeader (const string &headerName, const string &headerValue) {
|
||||
L_D(CallSessionParams);
|
||||
d->customHeaders = sal_custom_header_append(d->customHeaders, headerName.c_str(), headerValue.c_str());
|
||||
}
|
||||
|
||||
void CallSessionParams::clearCustomHeaders () {
|
||||
L_D(CallSessionParams);
|
||||
d->setCustomHeaders(nullptr);
|
||||
}
|
||||
|
||||
const char * CallSessionParams::getCustomHeader (const string &headerName) const {
|
||||
L_D(const CallSessionParams);
|
||||
return sal_custom_header_find(d->customHeaders, headerName.c_str());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void CallSessionParams::addCustomSdpAttribute (const string &attributeName, const string &attributeValue) {
|
||||
L_D(CallSessionParams);
|
||||
d->customSdpAttributes = sal_custom_sdp_attribute_append(d->customSdpAttributes, attributeName.c_str(), attributeValue.c_str());
|
||||
}
|
||||
|
||||
void CallSessionParams::clearCustomSdpAttributes () {
|
||||
L_D(CallSessionParams);
|
||||
d->setCustomSdpAttributes(nullptr);
|
||||
}
|
||||
|
||||
const char * CallSessionParams::getCustomSdpAttribute (const string &attributeName) const {
|
||||
L_D(const CallSessionParams);
|
||||
return sal_custom_sdp_attribute_find(d->customSdpAttributes, attributeName.c_str());
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void CallSessionParams::addCustomSdpMediaAttribute (LinphoneStreamType lst, const string &attributeName, const string &attributeValue) {
|
||||
L_D(CallSessionParams);
|
||||
d->customSdpMediaAttributes[lst] = sal_custom_sdp_attribute_append(d->customSdpMediaAttributes[lst], attributeName.c_str(), attributeValue.c_str());
|
||||
}
|
||||
|
||||
void CallSessionParams::clearCustomSdpMediaAttributes (LinphoneStreamType lst) {
|
||||
L_D(CallSessionParams);
|
||||
d->setCustomSdpMediaAttributes(lst, nullptr);
|
||||
}
|
||||
|
||||
const char * CallSessionParams::getCustomSdpMediaAttribute (LinphoneStreamType lst, const string &attributeName) const {
|
||||
L_D(const CallSessionParams);
|
||||
return sal_custom_sdp_attribute_find(d->customSdpMediaAttributes[lst], attributeName.c_str());
|
||||
}
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -16,29 +16,85 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _CONFERENCE_CALL_SESSION_PARAMS_H_
|
||||
#define _CONFERENCE_CALL_SESSION_PARAMS_H_
|
||||
#ifndef _CALL_SESSION_PARAMS_H_
|
||||
#define _CALL_SESSION_PARAMS_H_
|
||||
|
||||
#include "object/object.h"
|
||||
#include <string>
|
||||
|
||||
#include "object/clonable-object.h"
|
||||
|
||||
#include "linphone/types.h"
|
||||
#include "sal/sal.h"
|
||||
|
||||
extern "C" {
|
||||
bool_t linphone_call_params_get_in_conference(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_in_conference(LinphoneCallParams *params, bool_t value);
|
||||
bool_t linphone_call_params_get_internal_call_update(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_internal_call_update(LinphoneCallParams *params, bool_t value);
|
||||
bool_t linphone_call_params_get_no_user_consent(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_no_user_consent(LinphoneCallParams *params, bool_t value);
|
||||
SalCustomHeader * linphone_call_params_get_custom_headers(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_custom_headers(LinphoneCallParams *params, const SalCustomHeader *ch);
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_attributes(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_custom_sdp_attributes(LinphoneCallParams *params, const SalCustomSdpAttribute *csa);
|
||||
SalCustomSdpAttribute * linphone_call_params_get_custom_sdp_media_attributes(const LinphoneCallParams *params, LinphoneStreamType type);
|
||||
void linphone_call_params_set_custom_sdp_media_attributes(LinphoneCallParams *params, LinphoneStreamType type, const SalCustomSdpAttribute *csa);
|
||||
LinphoneCall * linphone_call_params_get_referer(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_referer(LinphoneCallParams *params, LinphoneCall *referer);
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
|
||||
namespace LinphonePrivate {
|
||||
namespace Conference {
|
||||
class CallSessionParamsPrivate;
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
class CallSessionParams : public Object {
|
||||
public:
|
||||
CallSessionParams ();
|
||||
class CallSessionParamsPrivate;
|
||||
|
||||
protected:
|
||||
explicit CallSessionParams (CallSessionParamsPrivate &p);
|
||||
class CallSessionParams : public ClonableObject {
|
||||
friend unsigned char ::linphone_call_params_get_in_conference(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_in_conference(LinphoneCallParams *params, unsigned char value);
|
||||
friend unsigned char ::linphone_call_params_get_internal_call_update(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_internal_call_update(LinphoneCallParams *params, unsigned char value);
|
||||
friend unsigned char ::linphone_call_params_get_no_user_consent(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_no_user_consent(LinphoneCallParams *params, unsigned char value);
|
||||
friend SalCustomHeader * ::linphone_call_params_get_custom_headers(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_custom_headers(LinphoneCallParams *params, const SalCustomHeader *ch);
|
||||
friend SalCustomSdpAttribute * ::linphone_call_params_get_custom_sdp_attributes(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_custom_sdp_attributes(LinphoneCallParams *params, const SalCustomSdpAttribute *csa);
|
||||
friend SalCustomSdpAttribute * ::linphone_call_params_get_custom_sdp_media_attributes(const LinphoneCallParams *params, LinphoneStreamType type);
|
||||
friend void ::linphone_call_params_set_custom_sdp_media_attributes(LinphoneCallParams *params, LinphoneStreamType type, const SalCustomSdpAttribute *csa);
|
||||
friend LinphoneCall * ::linphone_call_params_get_referer(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_referer(LinphoneCallParams *params, LinphoneCall *referer);
|
||||
|
||||
private:
|
||||
L_DECLARE_PRIVATE(CallSessionParams);
|
||||
L_DISABLE_COPY(CallSessionParams);
|
||||
};
|
||||
}
|
||||
}
|
||||
public:
|
||||
CallSessionParams ();
|
||||
CallSessionParams (const CallSessionParams &src);
|
||||
virtual ~CallSessionParams () = default;
|
||||
|
||||
#endif // ifndef _CONFERENCE_CALL_SESSION_PARAMS_H_
|
||||
const std::string& getSessionName () const;
|
||||
void setSessionName (const std::string &sessionName);
|
||||
|
||||
LinphonePrivacyMask getPrivacy () const;
|
||||
void setPrivacy (LinphonePrivacyMask privacy);
|
||||
|
||||
void addCustomHeader (const std::string &headerName, const std::string &headerValue);
|
||||
void clearCustomHeaders ();
|
||||
const char * getCustomHeader (const std::string &headerName) const;
|
||||
|
||||
void addCustomSdpAttribute (const std::string &attributeName, const std::string &attributeValue);
|
||||
void clearCustomSdpAttributes ();
|
||||
const char * getCustomSdpAttribute (const std::string &attributeName) const;
|
||||
|
||||
void addCustomSdpMediaAttribute (LinphoneStreamType lst, const std::string &attributeName, const std::string &attributeValue);
|
||||
void clearCustomSdpMediaAttributes (LinphoneStreamType lst);
|
||||
const char * getCustomSdpMediaAttribute (LinphoneStreamType lst, const std::string &attributeName) const;
|
||||
|
||||
protected:
|
||||
explicit CallSessionParams (CallSessionParamsPrivate &p);
|
||||
|
||||
private:
|
||||
L_DECLARE_PRIVATE(CallSessionParams);
|
||||
};
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
||||
#endif // ifndef _CALL_SESSION_PARAMS_H_
|
||||
|
|
|
|||
100
src/conference/params/media-session-params-p.h
Normal file
100
src/conference/params/media-session-params-p.h
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* media-session-params-p.h
|
||||
* Copyright (C) 2017 Belledonne Communications SARL
|
||||
*
|
||||
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _MEDIA_SESSION_PARAMS_P_H_
|
||||
#define _MEDIA_SESSION_PARAMS_P_H_
|
||||
|
||||
#include "media-session-params.h"
|
||||
|
||||
// =============================================================================
|
||||
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
class MediaSessionParamsPrivate : public CallSessionParamsPrivate {
|
||||
public:
|
||||
MediaSessionParamsPrivate () = default;
|
||||
MediaSessionParamsPrivate (const MediaSessionParamsPrivate &src);
|
||||
virtual ~MediaSessionParamsPrivate ();
|
||||
|
||||
void enableImplicitRtcpFb (bool value) { _implicitRtcpFbEnabled = value; }
|
||||
bool implicitRtcpFbEnabled () const { return _implicitRtcpFbEnabled; }
|
||||
int getDownBandwidth () const { return downBandwidth; }
|
||||
void setDownBandwidth (int value) { downBandwidth = value; }
|
||||
int getUpBandwidth () const { return upBandwidth; }
|
||||
void setUpBandwidth (int value) { upBandwidth = value; }
|
||||
int getDownPtime () const { return downPtime; }
|
||||
void setDownPtime (int value) { downPtime = value; }
|
||||
int getUpPtime () const { return upPtime; }
|
||||
void setUpPtime (int value) { upPtime = value; }
|
||||
bool getUpdateCallWhenIceCompleted () const { return updateCallWhenIceCompleted; }
|
||||
void setUpdateCallWhenIceCompleted (bool value) { updateCallWhenIceCompleted = value; }
|
||||
|
||||
void setReceivedFps (float value) { receivedFps = value; }
|
||||
void setReceivedVideoDefinition (LinphoneVideoDefinition *value);
|
||||
void setSentFps (float value) { sentFps = value; }
|
||||
void setSentVideoDefinition (LinphoneVideoDefinition *value);
|
||||
void setUsedAudioCodec (OrtpPayloadType *pt) { usedAudioCodec = pt; }
|
||||
void setUsedVideoCodec (OrtpPayloadType *pt) { usedVideoCodec = pt; }
|
||||
void setUsedRealtimeTextCodec (OrtpPayloadType *pt) { usedRealtimeTextCodec = pt; }
|
||||
|
||||
public:
|
||||
bool audioEnabled = true;
|
||||
int audioBandwidthLimit = 0;
|
||||
LinphoneMediaDirection audioDirection = LinphoneMediaDirectionSendRecv;
|
||||
bool audioMulticastEnabled = false;
|
||||
PayloadType *usedAudioCodec = nullptr;
|
||||
|
||||
bool videoEnabled = false;
|
||||
LinphoneMediaDirection videoDirection = LinphoneMediaDirectionSendRecv;
|
||||
bool videoMulticastEnabled = false;
|
||||
PayloadType *usedVideoCodec = nullptr;
|
||||
float receivedFps = 0.f;
|
||||
LinphoneVideoDefinition *receivedVideoDefinition = nullptr;
|
||||
float sentFps = 0.f;
|
||||
LinphoneVideoDefinition *sentVideoDefinition = nullptr;
|
||||
|
||||
bool realtimeTextEnabled = false;
|
||||
PayloadType *usedRealtimeTextCodec = nullptr;
|
||||
|
||||
bool avpfEnabled = false;
|
||||
uint16_t avpfRrInterval = 0; /* In milliseconds */
|
||||
|
||||
bool lowBandwidthEnabled = false;
|
||||
|
||||
std::string recordFilePath;
|
||||
|
||||
bool earlyMediaSendingEnabled = false; /* Send real media even during early media (for outgoing calls) */
|
||||
|
||||
LinphoneMediaEncryption encryption = LinphoneMediaEncryptionNone;
|
||||
bool mandatoryMediaEncryptionEnabled = false;
|
||||
|
||||
private:
|
||||
bool _implicitRtcpFbEnabled = false;
|
||||
int downBandwidth = 0;
|
||||
int upBandwidth = 0;
|
||||
int downPtime = 0;
|
||||
int upPtime = 0;
|
||||
bool updateCallWhenIceCompleted = true;
|
||||
|
||||
public:
|
||||
L_DECLARE_PUBLIC(MediaSessionParams);
|
||||
};
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
||||
#endif // ifndef _MEDIA_SESSION_PARAMS_P_H_
|
||||
|
|
@ -17,20 +17,310 @@
|
|||
*/
|
||||
|
||||
#include "call-session-params-p.h"
|
||||
#include "media-session-params-p.h"
|
||||
|
||||
#include "media-session-params.h"
|
||||
|
||||
#include "linphone/types.h"
|
||||
#include "private.h"
|
||||
|
||||
using namespace LinphonePrivate;
|
||||
using namespace std;
|
||||
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
// =============================================================================
|
||||
|
||||
class Conference::MediaSessionParamsPrivate : public CallSessionParamsPrivate {
|
||||
public:
|
||||
LinphoneMediaEncryption encryption = LinphoneMediaEncryptionNone;
|
||||
};
|
||||
MediaSessionParamsPrivate::MediaSessionParamsPrivate (const MediaSessionParamsPrivate &src) : CallSessionParamsPrivate(src) {
|
||||
audioEnabled = src.audioEnabled;
|
||||
audioBandwidthLimit = src.audioBandwidthLimit;
|
||||
audioDirection = src.audioDirection;
|
||||
audioMulticastEnabled = src.audioMulticastEnabled;
|
||||
usedAudioCodec = src.usedAudioCodec;
|
||||
videoEnabled = src.videoEnabled;
|
||||
videoDirection = src.videoDirection;
|
||||
videoMulticastEnabled = src.videoMulticastEnabled;
|
||||
usedVideoCodec = src.usedVideoCodec;
|
||||
receivedFps = src.receivedFps;
|
||||
receivedVideoDefinition = src.receivedVideoDefinition ? linphone_video_definition_ref(src.receivedVideoDefinition) : nullptr;
|
||||
sentFps = src.sentFps;
|
||||
sentVideoDefinition = src.sentVideoDefinition ? linphone_video_definition_ref(src.sentVideoDefinition) : nullptr;
|
||||
realtimeTextEnabled = src.realtimeTextEnabled;
|
||||
usedRealtimeTextCodec = src.usedRealtimeTextCodec;
|
||||
avpfEnabled = src.avpfEnabled;
|
||||
avpfRrInterval = src.avpfRrInterval;
|
||||
lowBandwidthEnabled = src.lowBandwidthEnabled;
|
||||
recordFilePath = src.recordFilePath;
|
||||
earlyMediaSendingEnabled = src.earlyMediaSendingEnabled;
|
||||
encryption = src.encryption;
|
||||
mandatoryMediaEncryptionEnabled = src.mandatoryMediaEncryptionEnabled;
|
||||
_implicitRtcpFbEnabled = src._implicitRtcpFbEnabled;
|
||||
downBandwidth = src.downBandwidth;
|
||||
upBandwidth = src.upBandwidth;
|
||||
downPtime = src.downPtime;
|
||||
upPtime = src.upPtime;
|
||||
updateCallWhenIceCompleted = src.updateCallWhenIceCompleted;
|
||||
}
|
||||
|
||||
MediaSessionParamsPrivate::~MediaSessionParamsPrivate () {
|
||||
if (receivedVideoDefinition)
|
||||
linphone_video_definition_unref(receivedVideoDefinition);
|
||||
if (sentVideoDefinition)
|
||||
linphone_video_definition_unref(sentVideoDefinition);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void MediaSessionParamsPrivate::setReceivedVideoDefinition (LinphoneVideoDefinition *value) {
|
||||
if (receivedVideoDefinition)
|
||||
linphone_video_definition_unref(receivedVideoDefinition);
|
||||
receivedVideoDefinition = linphone_video_definition_ref(value);
|
||||
}
|
||||
|
||||
void MediaSessionParamsPrivate::setSentVideoDefinition (LinphoneVideoDefinition *value) {
|
||||
if (sentVideoDefinition)
|
||||
linphone_video_definition_unref(sentVideoDefinition);
|
||||
sentVideoDefinition = linphone_video_definition_ref(value);
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Conference::MediaSessionParams::MediaSessionParams () : CallSessionParams(*new MediaSessionParamsPrivate) {}
|
||||
MediaSessionParams::MediaSessionParams () : CallSessionParams(*new MediaSessionParamsPrivate) {}
|
||||
|
||||
MediaSessionParams::MediaSessionParams (const MediaSessionParams &src)
|
||||
: CallSessionParams(*new MediaSessionParamsPrivate(*src.getPrivate())) {}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool MediaSessionParams::audioEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->audioEnabled;
|
||||
}
|
||||
|
||||
bool MediaSessionParams::audioMulticastEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->audioMulticastEnabled;
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableAudio (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->audioEnabled = value;
|
||||
if (d->audioEnabled && (getAudioDirection() == LinphoneMediaDirectionInactive))
|
||||
setAudioDirection(LinphoneMediaDirectionSendRecv);
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableAudioMulticast (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->audioMulticastEnabled = value;
|
||||
}
|
||||
|
||||
int MediaSessionParams::getAudioBandwidthLimit () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->audioBandwidthLimit;
|
||||
}
|
||||
|
||||
LinphoneMediaDirection MediaSessionParams::getAudioDirection () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->audioDirection;
|
||||
}
|
||||
|
||||
const OrtpPayloadType * MediaSessionParams::getUsedAudioCodec () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedAudioCodec;
|
||||
}
|
||||
|
||||
LinphonePayloadType * MediaSessionParams::getUsedAudioPayloadType () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedAudioCodec ? linphone_payload_type_new(nullptr, d->usedAudioCodec) : nullptr;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setAudioBandwidthLimit (int value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->audioBandwidthLimit = value;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setAudioDirection (LinphoneMediaDirection direction) {
|
||||
L_D(MediaSessionParams);
|
||||
d->audioDirection = direction;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void MediaSessionParams::enableVideo (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->videoEnabled = value;
|
||||
if (d->videoEnabled && (getVideoDirection() == LinphoneMediaDirectionInactive))
|
||||
setVideoDirection(LinphoneMediaDirectionSendRecv);
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableVideoMulticast (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->videoMulticastEnabled = value;
|
||||
}
|
||||
|
||||
float MediaSessionParams::getReceivedFps () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->receivedFps;
|
||||
}
|
||||
|
||||
LinphoneVideoDefinition * MediaSessionParams::getReceivedVideoDefinition () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->receivedVideoDefinition;
|
||||
}
|
||||
|
||||
float MediaSessionParams::getSentFps () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->sentFps;
|
||||
}
|
||||
|
||||
LinphoneVideoDefinition * MediaSessionParams::getSentVideoDefinition () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->sentVideoDefinition;
|
||||
}
|
||||
|
||||
const OrtpPayloadType * MediaSessionParams::getUsedVideoCodec () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedVideoCodec;
|
||||
}
|
||||
|
||||
LinphonePayloadType * MediaSessionParams::getUsedVideoPayloadType () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedVideoCodec ? linphone_payload_type_new(nullptr, d->usedVideoCodec) : nullptr;
|
||||
}
|
||||
|
||||
LinphoneMediaDirection MediaSessionParams::getVideoDirection () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->videoDirection;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setVideoDirection (LinphoneMediaDirection direction) {
|
||||
L_D(MediaSessionParams);
|
||||
d->videoDirection = direction;
|
||||
}
|
||||
|
||||
bool MediaSessionParams::videoEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->videoEnabled;
|
||||
}
|
||||
|
||||
bool MediaSessionParams::videoMulticastEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->videoMulticastEnabled;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void MediaSessionParams::enableRealtimeText (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->realtimeTextEnabled = value;
|
||||
}
|
||||
|
||||
const OrtpPayloadType * MediaSessionParams::getUsedRealtimeTextCodec () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedRealtimeTextCodec;
|
||||
}
|
||||
|
||||
LinphonePayloadType * MediaSessionParams::getUsedRealtimeTextPayloadType () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->usedRealtimeTextCodec ? linphone_payload_type_new(nullptr, d->usedRealtimeTextCodec) : nullptr;
|
||||
}
|
||||
|
||||
bool MediaSessionParams::realtimeTextEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->realtimeTextEnabled;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool MediaSessionParams::avpfEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->avpfEnabled;
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableAvpf (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->avpfEnabled = value;
|
||||
}
|
||||
|
||||
uint16_t MediaSessionParams::getAvpfRrInterval () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->avpfRrInterval;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setAvpfRrInterval (uint16_t value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->avpfRrInterval = value;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool MediaSessionParams::lowBandwidthEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->lowBandwidthEnabled;
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableLowBandwidth (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->lowBandwidthEnabled = value;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
const string& MediaSessionParams::getRecordFilePath () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->recordFilePath;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setRecordFilePath (const string &path) {
|
||||
L_D(MediaSessionParams);
|
||||
d->recordFilePath = path;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool MediaSessionParams::earlyMediaSendingEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->earlyMediaSendingEnabled;
|
||||
}
|
||||
|
||||
void MediaSessionParams::enableEarlyMediaSending (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->earlyMediaSendingEnabled = value;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void MediaSessionParams::enableMandatoryMediaEncryption (bool value) {
|
||||
L_D(MediaSessionParams);
|
||||
d->mandatoryMediaEncryptionEnabled = value;
|
||||
}
|
||||
|
||||
LinphoneMediaEncryption MediaSessionParams::getMediaEncryption () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->encryption;
|
||||
}
|
||||
|
||||
bool MediaSessionParams::mandatoryMediaEncryptionEnabled () const {
|
||||
L_D(const MediaSessionParams);
|
||||
return d->mandatoryMediaEncryptionEnabled;
|
||||
}
|
||||
|
||||
void MediaSessionParams::setMediaEncryption (LinphoneMediaEncryption encryption) {
|
||||
L_D(MediaSessionParams);
|
||||
d->encryption = encryption;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
SalMediaProto MediaSessionParams::getMediaProto () const {
|
||||
if ((getMediaEncryption() == LinphoneMediaEncryptionSRTP) && avpfEnabled()) return SalProtoRtpSavpf;
|
||||
if (getMediaEncryption() == LinphoneMediaEncryptionSRTP) return SalProtoRtpSavp;
|
||||
if ((getMediaEncryption() == LinphoneMediaEncryptionDTLS) && avpfEnabled()) return SalProtoUdpTlsRtpSavpf;
|
||||
if (getMediaEncryption() == LinphoneMediaEncryptionDTLS) return SalProtoUdpTlsRtpSavp;
|
||||
if (avpfEnabled()) return SalProtoRtpAvpf;
|
||||
return SalProtoRtpAvp;
|
||||
}
|
||||
|
||||
const char * MediaSessionParams::getRtpProfile () const {
|
||||
return sal_media_proto_to_string(getMediaProto());
|
||||
}
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -16,26 +16,126 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _CONFERENCE_MEDIA_SESSION_PARAMS_H_
|
||||
#define _CONFERENCE_MEDIA_SESSION_PARAMS_H_
|
||||
#ifndef _MEDIA_SESSION_PARAMS_H_
|
||||
#define _MEDIA_SESSION_PARAMS_H_
|
||||
|
||||
#include "call-session-params.h"
|
||||
|
||||
// =============================================================================
|
||||
#include <ortp/payloadtype.h>
|
||||
|
||||
namespace LinphonePrivate {
|
||||
namespace Conference {
|
||||
class MediaSessionParamsPrivate;
|
||||
|
||||
class MediaSessionParams : public CallSessionParams {
|
||||
public:
|
||||
MediaSessionParams ();
|
||||
|
||||
private:
|
||||
L_DECLARE_PRIVATE(MediaSessionParams);
|
||||
L_DISABLE_COPY(MediaSessionParams);
|
||||
};
|
||||
}
|
||||
extern "C" {
|
||||
bool_t linphone_call_params_implicit_rtcp_fb_enabled(const LinphoneCallParams *params);
|
||||
void linphone_call_params_enable_implicit_rtcp_fb(LinphoneCallParams *params, bool_t value);
|
||||
int linphone_call_params_get_down_bandwidth(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_down_bandwidth(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_up_bandwidth(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_up_bandwidth(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_down_ptime(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_down_ptime(LinphoneCallParams *params, int value);
|
||||
int linphone_call_params_get_up_ptime(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_up_ptime(LinphoneCallParams *params, int value);
|
||||
bool_t linphone_call_params_get_update_call_when_ice_completed(const LinphoneCallParams *params);
|
||||
void linphone_call_params_set_update_call_when_ice_completed(LinphoneCallParams *params, bool_t value);
|
||||
void linphone_call_params_set_received_fps(LinphoneCallParams *params, float value);
|
||||
void linphone_call_params_set_received_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
void linphone_call_params_set_recv_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
void linphone_call_params_set_sent_fps(LinphoneCallParams *params, float value);
|
||||
void linphone_call_params_set_sent_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
void linphone_call_params_set_sent_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
void linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
void linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
void linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
}
|
||||
|
||||
#endif // ifndef _CONFERENCE_MEDIA_SESSION_PARAMS_H_
|
||||
// =============================================================================
|
||||
|
||||
LINPHONE_BEGIN_NAMESPACE
|
||||
|
||||
class MediaSessionParamsPrivate;
|
||||
|
||||
class MediaSessionParams : public CallSessionParams {
|
||||
friend unsigned char ::linphone_call_params_implicit_rtcp_fb_enabled(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_enable_implicit_rtcp_fb(LinphoneCallParams *params, unsigned char value);
|
||||
friend int ::linphone_call_params_get_down_bandwidth(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_down_bandwidth(LinphoneCallParams *params, int value);
|
||||
friend int ::linphone_call_params_get_up_bandwidth(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_up_bandwidth(LinphoneCallParams *params, int value);
|
||||
friend int ::linphone_call_params_get_down_ptime(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_down_ptime(LinphoneCallParams *params, int value);
|
||||
friend int ::linphone_call_params_get_up_ptime(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_up_ptime(LinphoneCallParams *params, int value);
|
||||
friend unsigned char ::linphone_call_params_get_update_call_when_ice_completed(const LinphoneCallParams *params);
|
||||
friend void ::linphone_call_params_set_update_call_when_ice_completed(LinphoneCallParams *params, unsigned char value);
|
||||
friend void ::linphone_call_params_set_received_fps(LinphoneCallParams *params, float value);
|
||||
friend void ::linphone_call_params_set_received_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
friend void ::linphone_call_params_set_recv_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
friend void ::linphone_call_params_set_sent_fps(LinphoneCallParams *params, float value);
|
||||
friend void ::linphone_call_params_set_sent_video_definition(LinphoneCallParams *params, LinphoneVideoDefinition *vdef);
|
||||
friend void ::linphone_call_params_set_sent_vsize(LinphoneCallParams *params, MSVideoSize vsize);
|
||||
friend void ::linphone_call_params_set_used_audio_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
friend void ::linphone_call_params_set_used_video_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
friend void ::linphone_call_params_set_used_text_codec(LinphoneCallParams *params, OrtpPayloadType *codec);
|
||||
|
||||
public:
|
||||
MediaSessionParams ();
|
||||
MediaSessionParams (const MediaSessionParams &src);
|
||||
virtual ~MediaSessionParams () = default;
|
||||
|
||||
bool audioEnabled () const;
|
||||
bool audioMulticastEnabled () const;
|
||||
void enableAudio (bool value);
|
||||
void enableAudioMulticast (bool value);
|
||||
int getAudioBandwidthLimit () const;
|
||||
LinphoneMediaDirection getAudioDirection () const;
|
||||
const OrtpPayloadType * getUsedAudioCodec () const;
|
||||
LinphonePayloadType * getUsedAudioPayloadType () const;
|
||||
void setAudioBandwidthLimit (int value);
|
||||
void setAudioDirection (LinphoneMediaDirection direction);
|
||||
|
||||
void enableVideo (bool value);
|
||||
void enableVideoMulticast (bool value);
|
||||
float getReceivedFps () const;
|
||||
LinphoneVideoDefinition * getReceivedVideoDefinition () const;
|
||||
float getSentFps () const;
|
||||
LinphoneVideoDefinition * getSentVideoDefinition () const;
|
||||
const OrtpPayloadType * getUsedVideoCodec () const;
|
||||
LinphonePayloadType * getUsedVideoPayloadType () const;
|
||||
LinphoneMediaDirection getVideoDirection () const;
|
||||
void setVideoDirection (LinphoneMediaDirection direction);
|
||||
bool videoEnabled () const;
|
||||
bool videoMulticastEnabled () const;
|
||||
|
||||
void enableRealtimeText (bool value);
|
||||
const OrtpPayloadType * getUsedRealtimeTextCodec () const;
|
||||
LinphonePayloadType * getUsedRealtimeTextPayloadType () const;
|
||||
bool realtimeTextEnabled () const;
|
||||
|
||||
bool avpfEnabled () const;
|
||||
void enableAvpf (bool value);
|
||||
uint16_t getAvpfRrInterval () const;
|
||||
void setAvpfRrInterval (uint16_t value);
|
||||
|
||||
bool lowBandwidthEnabled () const;
|
||||
void enableLowBandwidth (bool value);
|
||||
|
||||
const std::string& getRecordFilePath () const;
|
||||
void setRecordFilePath (const std::string &path);
|
||||
|
||||
bool earlyMediaSendingEnabled () const;
|
||||
void enableEarlyMediaSending (bool value);
|
||||
|
||||
void enableMandatoryMediaEncryption (bool value);
|
||||
LinphoneMediaEncryption getMediaEncryption () const;
|
||||
bool mandatoryMediaEncryptionEnabled () const;
|
||||
void setMediaEncryption (LinphoneMediaEncryption encryption);
|
||||
|
||||
SalMediaProto getMediaProto () const;
|
||||
const char * getRtpProfile () const;
|
||||
|
||||
private:
|
||||
L_DECLARE_PRIVATE(MediaSessionParams);
|
||||
};
|
||||
|
||||
LINPHONE_END_NAMESPACE
|
||||
|
||||
#endif // ifndef _MEDIA_SESSION_PARAMS_H_
|
||||
|
|
|
|||
|
|
@ -3733,7 +3733,7 @@ static void call_with_in_dialog_update(void) {
|
|||
|
||||
liblinphone_tester_check_rtcp(marie,pauline);
|
||||
params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc));
|
||||
params->no_user_consent=TRUE;
|
||||
linphone_call_params_set_no_user_consent(params, TRUE);
|
||||
linphone_call_update(linphone_core_get_current_call(marie->lc),params);
|
||||
linphone_call_params_unref(params);
|
||||
BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1));
|
||||
|
|
|
|||
|
|
@ -1846,7 +1846,7 @@ static void incoming_reinvite_with_invalid_ack_sdp(void){
|
|||
|
||||
BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc))));
|
||||
caller_params = linphone_call_get_current_params(linphone_core_get_current_call(caller->lc));
|
||||
BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,(int*)&caller_params->has_video,FALSE));
|
||||
// TODO [refactoring]: BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,(int*)&caller_params->has_video,FALSE));
|
||||
|
||||
sal_call_set_sdp_handling(inc_call->op, SalOpSDPNormal);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -710,7 +710,7 @@ static void check_ice_from_rtp(LinphoneCall *c1, LinphoneCall *c2, LinphoneStrea
|
|||
|
||||
const LinphoneCallParams *cp1 = linphone_call_get_current_params(c1);
|
||||
const LinphoneCallParams *cp2 = linphone_call_get_current_params(c2);
|
||||
if (cp1->update_call_when_ice_completed && cp2->update_call_when_ice_completed) {
|
||||
if (linphone_call_params_get_update_call_when_ice_completed(cp1) && linphone_call_params_get_update_call_when_ice_completed(cp2)) {
|
||||
memset(&remaddr, 0, remaddrlen);
|
||||
result_desc = sal_call_get_final_media_description(c2->op);
|
||||
expected_addr = result_desc->streams[0].rtp_addr;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue