diff --git a/coreapi/Call.cc b/coreapi/Call.cc index 09c117d91..0528e6e71 100644 --- a/coreapi/Call.cc +++ b/coreapi/Call.cc @@ -1171,21 +1171,21 @@ void linphone_call_create_op_to(LinphoneCall *call, LinphoneAddress *to){ 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); + 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); /*else privacy might be set by proxy */ } 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 (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); /*else privacy might be set by proxy */ } @@ -1378,7 +1378,7 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr call->referer=linphone_call_ref(params->referer); } - linphone_call_create_op_to(call, to); + linphone_call_create_op_to(call, to); return call; } @@ -2184,7 +2184,7 @@ const LinphoneAddress * linphone_call_get_to_address(const LinphoneCall *call){ } const char *linphone_call_get_to_header(const LinphoneCall *call, const char *name){ - return sal_custom_header_find(sal_op_get_recv_custom_header(call->op),name); + return sal_custom_header_find(sal_op_get_recv_custom_header(call->op),name); } char *linphone_call_get_remote_address_as_string(const LinphoneCall *call){ @@ -5969,7 +5969,7 @@ end: } int linphone_call_restart_invite(LinphoneCall *call) { - linphone_call_create_op(call); + linphone_call_create_op(call); linphone_call_stop_media_streams(call); ms_media_stream_sessions_uninit(&call->sessions[call->main_audio_stream_index]); ms_media_stream_sessions_uninit(&call->sessions[call->main_video_stream_index]); @@ -6204,4 +6204,3 @@ void linphone_call_notify_info_message_received(LinphoneCall *call, const Linpho void linphone_call_notify_ack_processing(LinphoneCall *call, LinphoneHeaders *msg, bool_t is_received) { NOTIFY_IF_EXIST(ack_processing, call, msg, is_received) } - diff --git a/coreapi/CallLog.cc b/coreapi/CallLog.cc index d81b44e8c..15a1b70f0 100644 --- a/coreapi/CallLog.cc +++ b/coreapi/CallLog.cc @@ -86,7 +86,7 @@ void call_logs_write_to_config_file(LinphoneCore *lc){ LpConfig *cfg=lc->config; if (linphone_core_get_global_state (lc)==LinphoneGlobalStartup) return; - + if (lc->max_call_logs == LINPHONE_MAX_CALL_HISTORY_UNLIMITED) return; for(i=0,elem=lc->call_logs;elem!=NULL;elem=elem->next,++i){ @@ -310,9 +310,8 @@ LinphoneCallLog * linphone_call_log_new(LinphoneCallDir dir, LinphoneAddress *fr set_call_log_date(cl,cl->start_date_time); cl->from=from; - LinphoneAddress * to_tmp = linphone_address_clone(to); - linphone_address_clean(to_tmp); - cl->to=to_tmp; + cl->to = linphone_address_clone(to); + linphone_address_clean(cl->to); cl->status=LinphoneCallAborted; /*default status*/ cl->quality=-1; @@ -459,9 +458,9 @@ static int create_call_log(void *data, int argc, char **argv, char **colName) { from = linphone_address_new(argv[1]); to = linphone_address_new(argv[2]); - + if (from == NULL || to == NULL) goto error; - + dir = (LinphoneCallDir) atoi(argv[3]); log = linphone_call_log_new(dir, from, to); @@ -485,7 +484,7 @@ static int create_call_log(void *data, int argc, char **argv, char **colName) { clsres->result = bctbx_list_append(clsres->result, log); return 0; - + error: if (from){ linphone_address_unref(from); diff --git a/coreapi/Conference.cc b/coreapi/Conference.cc index f1ab325ac..beebdb534 100644 --- a/coreapi/Conference.cc +++ b/coreapi/Conference.cc @@ -30,6 +30,7 @@ #include #include #include +#include namespace Linphone { @@ -41,7 +42,7 @@ inline std::list<_type> toStd(const bctbx_list_t *l){ } return ret; } - + class Conference { public: class Participant { @@ -50,33 +51,33 @@ public: m_uri = linphone_address_clone(linphone_call_get_remote_address(call)); m_call = call; } - + ~Participant() { linphone_address_unref(m_uri); if(m_call) m_call->conf_ref = NULL; - + } - + const LinphoneAddress *getUri() const { return m_uri; } - + LinphoneCall *getCall() const { return m_call; } - + private: Participant(const Participant &src); Participant &operator=(const Participant &src); - + private: LinphoneAddress *m_uri; LinphoneCall *m_call; - + friend class RemoteConference; }; - - + + class Params { public: Params(const LinphoneCore *core = NULL) { @@ -97,63 +98,60 @@ public: private: bool m_enableVideo; LinphoneConferenceStateChangedCb m_stateChangedCb; - void *m_userData; + void *m_userData; friend class Conference; }; - + Conference(LinphoneCore *core, LinphoneConference *conf, const Params *params = NULL); - virtual ~Conference() { - if(m_conferenceID) - ms_free(m_conferenceID); - } - + virtual ~Conference() {} + const Params &getCurrentParams() const {return m_currentParams;} - + virtual int inviteAddresses(const std::list &addresses, const LinphoneCallParams *params) = 0; virtual int addParticipant(LinphoneCall *call) = 0; virtual int removeParticipant(LinphoneCall *call) = 0; virtual int removeParticipant(const LinphoneAddress *uri) = 0; virtual int terminate() = 0; - + virtual int enter() = 0; virtual int leave() = 0; virtual bool isIn() const = 0; - + AudioStream *getAudioStream() const {return m_localParticipantStream;} int muteMicrophone(bool val); bool microphoneIsMuted() const {return m_isMuted;} float getInputVolume() const; - + virtual int getSize() const {return (int)m_participants.size() + (isIn()?1:0);} const std::list &getParticipants() const {return m_participants;} - + virtual int startRecording(const char *path) = 0; virtual int stopRecording() = 0; - + virtual void onCallStreamStarting(LinphoneCall *call, bool isPausedByRemote) {}; virtual void onCallStreamStopping(LinphoneCall *call) {}; virtual void onCallTerminating(LinphoneCall *call) {}; - + LinphoneConferenceState getState() const {return m_state;} LinphoneCore *getCore()const{ return m_core; } static const char *stateToString(LinphoneConferenceState state); - void setID(const char *conferenceID) { - if (m_conferenceID) - ms_free(m_conferenceID); - m_conferenceID = ms_strdup(conferenceID); - } - const char *getID() {return m_conferenceID;} + void setID(const char *conferenceID) { + m_conferenceID = conferenceID; + } + const char *getID() { + return m_conferenceID.c_str(); + } protected: void setState(LinphoneConferenceState state); Participant *findParticipant(const LinphoneCall *call) const; Participant *findParticipant(const LinphoneAddress *uri) const; - + protected: - char *m_conferenceID=NULL; + std::string m_conferenceID; LinphoneCore *m_core; AudioStream *m_localParticipantStream; bool m_isMuted; @@ -167,25 +165,25 @@ class LocalConference: public Conference { public: LocalConference(LinphoneCore *core, LinphoneConference *conf, const Params *params = NULL); virtual ~LocalConference(); - + virtual int inviteAddresses(const std::list &addresses, const LinphoneCallParams *params); virtual int addParticipant(LinphoneCall *call); virtual int removeParticipant(LinphoneCall *call); virtual int removeParticipant(const LinphoneAddress *uri); virtual int terminate(); - + virtual int enter(); virtual int leave(); virtual bool isIn() const {return m_localParticipantStream!=NULL;} virtual int getSize() const; - + virtual int startRecording(const char *path); virtual int stopRecording(); - + virtual void onCallStreamStarting(LinphoneCall *call, bool isPausedByRemote); virtual void onCallStreamStopping(LinphoneCall *call); virtual void onCallTerminating(LinphoneCall *call); - + private: void addLocalEndpoint(); int remoteParticipantsCount(); @@ -205,17 +203,17 @@ class RemoteConference: public Conference { public: RemoteConference(LinphoneCore *core, LinphoneConference *conf, const Params *params = NULL); virtual ~RemoteConference(); - + virtual int inviteAddresses(const std::list &addresses, const LinphoneCallParams *params); virtual int addParticipant(LinphoneCall *call); virtual int removeParticipant(LinphoneCall *call) {return -1;} virtual int removeParticipant(const LinphoneAddress *uri); virtual int terminate(); - + virtual int enter(); virtual int leave(); virtual bool isIn() const; - + virtual int startRecording(const char *path) {return 0;} virtual int stopRecording() {return 0;} @@ -223,14 +221,14 @@ private: bool focusIsReady() const; bool transferToFocus(LinphoneCall *call); void reset(); - + void onFocusCallSateChanged(LinphoneCallState state); void onPendingCallStateChanged(LinphoneCall *call, LinphoneCallState state); void onTransferingCallStateChanged(LinphoneCall *transfered, LinphoneCallState newCallState); - + static void callStateChangedCb(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *message); static void transferStateChanged(LinphoneCore *lc, LinphoneCall *transfered, LinphoneCallState new_call_state); - + const char *m_focusAddr; char *m_focusContact; LinphoneCall *m_focusCall; @@ -408,7 +406,7 @@ void LocalConference::addLocalEndpoint() { } int LocalConference::inviteAddresses(const std::list &addresses, const LinphoneCallParams *params){ - + for (std::list::const_iterator it = addresses.begin(); it != addresses.end(); ++it){ const LinphoneAddress *addr = *it; LinphoneCall * call = linphone_core_get_call_by_remote_address2(m_core, addr); @@ -572,10 +570,10 @@ int LocalConference::terminate() { linphone_call_terminate(call); } } - + Conference::terminate(); m_terminating = FALSE; - + return 0; } @@ -705,7 +703,7 @@ int RemoteConference::inviteAddresses(const std::list & int RemoteConference::addParticipant(LinphoneCall *call) { LinphoneAddress *addr; LinphoneCallParams *params; - + switch(m_state) { case LinphoneConferenceStopped: case LinphoneConferenceStartingFailed: @@ -734,7 +732,7 @@ int RemoteConference::addParticipant(LinphoneCall *call) { m_pendingCalls.push_back(call); } return 0; - + case LinphoneConferenceRunning: Conference::addParticipant(call); transferToFocus(call); @@ -750,7 +748,7 @@ int RemoteConference::removeParticipant(const LinphoneAddress *uri) { char *refer_to; LinphoneAddress *refer_to_addr; int res; - + switch(m_state) { case LinphoneConferenceRunning: if(findParticipant(uri) == NULL) { @@ -759,14 +757,14 @@ int RemoteConference::removeParticipant(const LinphoneAddress *uri) { ms_free(tmp); return -1; } - + refer_to_addr = linphone_address_clone(uri); linphone_address_set_method_param(refer_to_addr, "BYE"); refer_to = linphone_address_as_string(refer_to_addr); linphone_address_unref(refer_to_addr); res = sal_call_refer(m_focusCall->op, refer_to); ms_free(refer_to); - + if(res == 0) { return Conference::removeParticipant(uri); } else { @@ -775,7 +773,7 @@ int RemoteConference::removeParticipant(const LinphoneAddress *uri) { ms_free(tmp); return -1; } - + default: ms_error("Cannot remove %s from conference: Bad conference state (%s)", linphone_address_as_string(uri), stateToString(m_state)); return -1; @@ -788,7 +786,7 @@ int RemoteConference::terminate() { case LinphoneConferenceStarting: linphone_call_terminate(m_focusCall); break; - + default: break; } return 0; @@ -867,7 +865,7 @@ void RemoteConference::reset() { void RemoteConference::onFocusCallSateChanged(LinphoneCallState state) { list::iterator it; - + switch (state) { case LinphoneCallConnected: m_focusContact = ms_strdup(linphone_call_get_remote_contact(m_focusCall)); @@ -890,7 +888,7 @@ void RemoteConference::onFocusCallSateChanged(LinphoneCallState state) { Conference::terminate(); setState(LinphoneConferenceStartingFailed); break; - + case LinphoneCallEnd: reset(); Conference::terminate(); @@ -911,7 +909,7 @@ void RemoteConference::onPendingCallStateChanged(LinphoneCall *call, LinphoneCal linphone_call_transfer(call, m_focusContact); } break; - + case LinphoneCallError: case LinphoneCallEnd: m_pendingCalls.remove(call); @@ -920,7 +918,7 @@ void RemoteConference::onPendingCallStateChanged(LinphoneCall *call, LinphoneCal terminate(); } break; - + default: break; } } @@ -931,7 +929,7 @@ void RemoteConference::onTransferingCallStateChanged(LinphoneCall* transfered, L m_transferingCalls.push_back(transfered); findParticipant(transfered)->m_call = NULL; break; - + case LinphoneCallError: m_transferingCalls.remove(transfered); Conference::removeParticipant(transfered); diff --git a/include/linphone/conference.h b/include/linphone/conference.h index 5173cbdcf..ea12eac85 100644 --- a/include/linphone/conference.h +++ b/include/linphone/conference.h @@ -126,12 +126,12 @@ LINPHONE_PUBLIC bctbx_list_t *linphone_conference_get_participants(const Linphon LINPHONE_PUBLIC LinphoneStatus linphone_conference_invite_participants(LinphoneConference *conf, const bctbx_list_t *addresses, const LinphoneCallParams *params); /** - *Get the conference id as string + * Get the conference id as string */ LINPHONE_PUBLIC const char *linphone_conference_get_ID(const LinphoneConference *obj); /** - *set the conference id as string + * Set the conference id as string */ LINPHONE_PUBLIC void linphone_conference_set_ID(const LinphoneConference *obj, const char *conferenceID);