From 00d8956cd3cf106b5762858103886b09045e6ddb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@msavard.(none)> Date: Fri, 20 Jan 2012 09:06:58 -0500 Subject: [PATCH] Revert "Merge branch 'master' of git+ssh://git.sflphone.org/var/repos/sflphone/git/sflphone" This reverts commit a4256fcbdcd7a75d8a34c114412bec6b08e28b82, reversing changes made to aa2dd717db7df6928ec3998bef4f4d1059b66005. --- daemon/src/audio/audiolayer.h | 4 - daemon/src/audio/audiorecord.cpp | 56 +- daemon/src/audio/audiorecord.h | 12 +- daemon/src/audio/pulseaudio/pulselayer.cpp | 6 +- daemon/src/audio/recordable.cpp | 20 +- daemon/src/audio/recordable.h | 21 +- daemon/src/call.cpp | 86 +- daemon/src/call.h | 62 +- daemon/src/conference.cpp | 10 +- daemon/src/config/config.cpp | 33 +- daemon/src/config/config.h | 7 +- daemon/src/dbus/callmanager-introspec.xml | 1594 ++++++++--------- daemon/src/dbus/callmanager.cpp | 11 +- daemon/src/dbus/callmanager.h | 1 - .../dbus/configurationmanager-introspec.xml | 1341 +++++++------- daemon/src/dbus/configurationmanager.cpp | 16 +- daemon/src/dbus/configurationmanager.h | 4 +- daemon/src/history/Makefile.am | 12 +- daemon/src/history/history.cpp | 151 ++ daemon/src/history/history.h | 90 + daemon/src/history/historyitem.cpp | 81 +- daemon/src/history/historyitem.h | 19 +- daemon/src/history/historymanager.cpp | 183 -- daemon/src/history/historymanager.h | 134 -- daemon/src/iax/iaxvoiplink.cpp | 42 +- daemon/src/main.cpp | 1 + daemon/src/managerimpl.cpp | 13 +- daemon/src/managerimpl.h | 33 +- daemon/src/sip/sipvoiplink.cpp | 41 +- daemon/test/constants.h | 4 +- daemon/test/history-sample.tpl | 21 +- daemon/test/historytest.cpp | 82 +- daemon/test/historytest.h | 36 +- gnome/src/actions.c | 64 +- gnome/src/actions.h | 2 - gnome/src/callable_obj.c | 43 +- gnome/src/callable_obj.h | 6 +- gnome/src/config/accountconfigdialog.c | 2 +- gnome/src/config/audioconf.c | 267 +-- gnome/src/config/audioconf.h | 27 +- gnome/src/config/preferencesdialog.c | 2 +- gnome/src/config/preferencesdialog.h | 36 + gnome/src/contacts/calltree.c | 24 +- gnome/src/dbus/callmanager-introspec.xml | 1594 ++++++++--------- .../dbus/configurationmanager-introspec.xml | 1341 +++++++------- gnome/src/dbus/dbus.c | 34 +- gnome/src/dbus/dbus.h | 7 +- gnome/src/imwindow.c | 2 +- gnome/src/sflphone_const.h | 2 +- gnome/src/uimanager.c | 18 +- gnome/src/widget/imwidget.c | 2 +- kde/src/dbus/callmanager-introspec.xml | 1594 ++++++++--------- .../dbus/configurationmanager-introspec.xml | 1341 +++++++------- 53 files changed, 5078 insertions(+), 5557 deletions(-) create mode 100644 daemon/src/history/history.cpp create mode 100644 daemon/src/history/history.h delete mode 100644 daemon/src/history/historymanager.cpp delete mode 100644 daemon/src/history/historymanager.h diff --git a/daemon/src/audio/audiolayer.h b/daemon/src/audio/audiolayer.h index fbe02af0bd..87d76caf25 100644 --- a/daemon/src/audio/audiolayer.h +++ b/daemon/src/audio/audiolayer.h @@ -64,10 +64,6 @@ class AudioLayer { AudioLayer(); virtual ~AudioLayer(); - /** - * Function that returns the list of available audio device provided the stream - * type: AUDIO_STREAM_CAPTURE, AUDIO_STREAM_PLAYBACK. - */ virtual std::vector<std::string> getAudioDeviceList(AudioStreamDirection dir) const = 0; /** diff --git a/daemon/src/audio/audiorecord.cpp b/daemon/src/audio/audiorecord.cpp index 24226265a5..4b85829cc0 100644 --- a/daemon/src/audio/audiorecord.cpp +++ b/daemon/src/audio/audiorecord.cpp @@ -29,7 +29,7 @@ */ #include "audiorecord.h" -#include <cstring> // for strstr +#include <unistd.h> #include <sstream> // for stringstream // structure for the wave header @@ -50,7 +50,6 @@ struct wavhdr { SINT32 data_length; // in bytes }; - AudioRecord::AudioRecord() : fileHandle_(NULL) , fileType_(FILE_INVALID) , channels_(1) @@ -63,6 +62,7 @@ AudioRecord::AudioRecord() : fileHandle_(NULL) , mixBuffer_(new SFLDataFormat[nbSamplesMax_]) , micBuffer_(new SFLDataFormat[nbSamplesMax_]) , spkBuffer_(new SFLDataFormat[nbSamplesMax_]) + , filename_() , savePath_() { createFilename(); @@ -93,21 +93,19 @@ void AudioRecord::setRecordingOption(FILE_TYPE type, int sndSmplRate, const std: savePath_ = path + "/"; } - - -void AudioRecord::initFileName(std::string peerNumber) +void AudioRecord::initFilename(const std::string &peerNumber) { - std::string fName = fileName_; + std::string fName(filename_); fName.append("-" + peerNumber); if (fileType_ == FILE_RAW) { - if (strstr(fileName_, ".raw") == NULL) { - DEBUG("AudioRecord: concatenate .raw file extension: name : %s", fileName_); + if (filename_.find(".raw") == std::string::npos) { + DEBUG("AudioRecord: concatenate .raw file extension: name : %s", filename_.c_str()); fName.append(".raw"); } } else if (fileType_ == FILE_WAV) { - if (strstr(fileName_, ".wav") == NULL) { - DEBUG("AudioRecord: concatenate .wav file extension: name : %s", fileName_); + if (filename_.find(".wav") == std::string::npos) { + DEBUG("AudioRecord: concatenate .wav file extension: name : %s", filename_.c_str()); fName.append(".wav"); } } @@ -115,7 +113,7 @@ void AudioRecord::initFileName(std::string peerNumber) savePath_.append(fName); } -std::string AudioRecord::getFileName() +std::string AudioRecord::getFilename() const { return savePath_; } @@ -145,7 +143,6 @@ bool AudioRecord::openFile() return result; } - void AudioRecord::closeFile() { if (fileHandle_ == 0) return; @@ -153,20 +150,17 @@ void AudioRecord::closeFile() if (fileType_ == FILE_RAW) fclose(fileHandle_); else if (fileType_ == FILE_WAV) - this->closeWavFile(); + closeWavFile(); } - -bool AudioRecord::isOpenFile() +bool AudioRecord::isOpenFile() const { return fileHandle_ != 0; } - -bool AudioRecord::fileExists() +bool AudioRecord::fileExists() const { - DEBUG("AudioRecord: Trying to open %s ", fileName_); - return fopen(fileName_,"rb") != 0; + return access(savePath_.c_str(), F_OK) != -1; } bool AudioRecord::isRecording() const @@ -174,7 +168,6 @@ bool AudioRecord::isRecording() const return recordingEnabled_; } - bool AudioRecord::setRecording() { if (isOpenFile()) { @@ -201,7 +194,6 @@ void AudioRecord::stopRecording() recordingEnabled_ = false; } - void AudioRecord::createFilename() { time_t rawtime; @@ -214,7 +206,7 @@ void AudioRecord::createFilename() std::stringstream out; // DATE - out << timeinfo->tm_year+1900; + out << timeinfo->tm_year + 1900; if (timeinfo->tm_mon < 9) // january is 01, not 1 out << 0; @@ -247,11 +239,9 @@ void AudioRecord::createFilename() out << 0; out << timeinfo->tm_sec; + filename_ = out.str(); - // fileName_ = out.str(); - strncpy(fileName_, out.str().c_str(), 8192); - - DEBUG("AudioRecord: create filename for this call %s ", fileName_); + DEBUG("AudioRecord: create filename for this call %s ", filename_.c_str()); } bool AudioRecord::setRawFile() @@ -268,7 +258,6 @@ bool AudioRecord::setRawFile() return true; } - bool AudioRecord::setWavFile() { DEBUG("AudioRecord: Create new wave file %s, sampling rate: %d", savePath_.c_str(), sndSmplRate_); @@ -311,10 +300,9 @@ bool AudioRecord::setWavFile() return true; } - bool AudioRecord::openExistingRawFile() { - fileHandle_ = fopen(fileName_, "ab+"); + fileHandle_ = fopen(filename_.c_str(), "ab+"); if (!fileHandle_) { WARN("AudioRecord: could not create RAW file!"); @@ -324,12 +312,11 @@ bool AudioRecord::openExistingRawFile() return true; } - bool AudioRecord::openExistingWavFile() { - DEBUG("%s(%s)\n", __PRETTY_FUNCTION__, fileName_); + DEBUG("%s(%s)\n", __PRETTY_FUNCTION__, filename_.c_str()); - fileHandle_ = fopen(fileName_, "rb+"); + fileHandle_ = fopen(filename_.c_str(), "rb+"); if (!fileHandle_) { WARN("AudioRecord: Error: could not open WAV file!"); @@ -349,7 +336,7 @@ bool AudioRecord::openExistingWavFile() if (fclose(fileHandle_) != 0) WARN("AudioRecord: Error: Can't close file r+ "); - fileHandle_ = fopen(fileName_, "ab+"); + fileHandle_ = fopen(filename_.c_str(), "ab+"); if (!fileHandle_) { WARN("AudioRecord: Error: Could not createopen WAV file ab+!"); @@ -410,7 +397,6 @@ void AudioRecord::recSpkrData(SFLDataFormat* buffer, int nSamples) } } - void AudioRecord::recMicData(SFLDataFormat* buffer, int nSamples) { if (recordingEnabled_) { @@ -422,7 +408,6 @@ void AudioRecord::recMicData(SFLDataFormat* buffer, int nSamples) } } - void AudioRecord::recData(SFLDataFormat* buffer, int nSamples) { if (recordingEnabled_) { @@ -440,7 +425,6 @@ void AudioRecord::recData(SFLDataFormat* buffer, int nSamples) } } - void AudioRecord::recData(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int /*nSamples_2*/) { diff --git a/daemon/src/audio/audiorecord.h b/daemon/src/audio/audiorecord.h index d865a5509e..03a9f6a7d3 100644 --- a/daemon/src/audio/audiorecord.h +++ b/daemon/src/audio/audiorecord.h @@ -57,16 +57,16 @@ class AudioRecord { /** * Init recording file path */ - void initFileName(std::string peerNumber); + void initFilename(const std::string &peerNumber); /** * Return the filepath of the recording */ - std::string getFileName(); + std::string getFilename() const; /** * Check if no otehr file is opened, then create a new one - * @param fileName A string containing teh file (with/without extension) + * @param filename A string containing teh file (with/without extension) * @param type The sound file format (FILE_RAW, FILE_WAVE) * @param format Internal sound format (INT16 / INT32) * @return bool True if file was opened @@ -81,12 +81,12 @@ class AudioRecord { /** * Check if a file is already opened */ - bool isOpenFile(); + bool isOpenFile() const; /** * Check if a file already exists */ - bool fileExists(); + bool fileExists() const; /** * Check recording state @@ -231,7 +231,7 @@ class AudioRecord { /** * Filename for this recording */ - char fileName_[8192]; + std::string filename_; /** * Path for this recording diff --git a/daemon/src/audio/pulseaudio/pulselayer.cpp b/daemon/src/audio/pulseaudio/pulselayer.cpp index 52228db984..74f2dbf47e 100644 --- a/daemon/src/audio/pulseaudio/pulselayer.cpp +++ b/daemon/src/audio/pulseaudio/pulselayer.cpp @@ -189,16 +189,12 @@ bool PulseLayer::inSourceList(const std::string &deviceName) const std::vector<std::string> PulseLayer::getAudioDeviceList(AudioStreamDirection dir) const { - std::vector<std::string> emptyVector; - if(AUDIO_STREAM_CAPTURE == dir) { return sinkList_; } - else if(AUDIO_STREAM_PLAYBACK == dir) { + if(AUDIO_STREAM_PLAYBACK) { return sourceList_; } - - return emptyVector; } void PulseLayer::createStreams(pa_context* c) diff --git a/daemon/src/audio/recordable.cpp b/daemon/src/audio/recordable.cpp index b55b4ed7cb..71f5d00d6b 100644 --- a/daemon/src/audio/recordable.cpp +++ b/daemon/src/audio/recordable.cpp @@ -30,33 +30,33 @@ #include "recordable.h" #include "manager.h" -Recordable::Recordable() : recAudio(), recorder(&recAudio, Manager::instance().getMainBuffer()) +Recordable::Recordable() : recAudio_(), recorder_(&recAudio_, Manager::instance().getMainBuffer()) { - recAudio.setRecordingOption(AudioRecord::FILE_WAV, 8000, Manager::instance().audioPreference.getRecordpath()); + recAudio_.setRecordingOption(AudioRecord::FILE_WAV, 8000, Manager::instance().audioPreference.getRecordpath()); } Recordable::~Recordable() { - if (recAudio.isOpenFile()) - recAudio.closeFile(); + if (recAudio_.isOpenFile()) + recAudio_.closeFile(); } -void Recordable::initRecFileName(std::string filename) +void Recordable::initRecFilename(const std::string &filename) { - recAudio.initFileName(filename); + recAudio_.initFilename(filename); } -std::string Recordable::getFileName() +std::string Recordable::getFilename() const { - return recAudio.getFileName(); + return recAudio_.getFilename(); } void Recordable::setRecordingSmplRate(int smplRate) { - recAudio.setSndSamplingRate(smplRate); + recAudio_.setSndSamplingRate(smplRate); } int Recordable::getRecordingSmplRate() const { - return recAudio.getSndSamplingRate(); + return recAudio_.getSndSamplingRate(); } diff --git a/daemon/src/audio/recordable.h b/daemon/src/audio/recordable.h index 13effb2ef5..7df25c5365 100644 --- a/daemon/src/audio/recordable.h +++ b/daemon/src/audio/recordable.h @@ -43,8 +43,8 @@ class Recordable { /** * Return recording state (true/false) */ - bool isRecording() { - return recAudio.isRecording(); + bool isRecording() const { + return recAudio_.isRecording(); } /** @@ -57,18 +57,18 @@ class Recordable { * Stop recording */ void stopRecording() { - recAudio.stopRecording(); + recAudio_.stopRecording(); } /** * Init the recording file name according to path specified in configuration */ - void initRecFileName(std::string filename); + void initRecFilename(const std::string &filename); /** * Return the file path for this recording */ - std::string getFileName(); + virtual std::string getFilename() const; /** * Set recording sampling rate. @@ -82,16 +82,13 @@ class Recordable { /** * Virtual method to be implemented in order to the main - * buffer to retreive the recorded id. + * buffer to retrieve the recorded id. */ virtual std::string getRecFileId() const = 0; - /** - * An instance of audio recorder - */ - AudioRecord recAudio; - - AudioRecorder recorder; + protected: + AudioRecord recAudio_; + AudioRecorder recorder_; }; #endif diff --git a/daemon/src/call.cpp b/daemon/src/call.cpp index 258d2ca22e..f2f4a6172e 100644 --- a/daemon/src/call.cpp +++ b/daemon/src/call.cpp @@ -31,6 +31,7 @@ #include "call.h" #include "manager.h" #include "audio/mainbuffer.h" +#include "history/historyitem.h" const char * const Call::DEFAULT_ID = "audiolayer_id"; @@ -41,13 +42,16 @@ Call::Call(const std::string& id, Call::CallType type) , id_(id) , confID_() , type_(type) - , connectionState_(Call::Disconnected) - , callState_(Call::Inactive) - , callConfig_(Call::Classic) - , peerName_() + , connectionState_(Call::DISCONNECTED) + , callState_(Call::INACTIVE) + , isIPToIP_(false) , peerNumber_() , displayName_() -{} + , timestamp_start_(0) + , timestamp_stop_(0) +{ + time(×tamp_start_); +} Call::~Call() {} @@ -66,7 +70,6 @@ Call::getConnectionState() return connectionState_; } - void Call::setState(CallState state) { @@ -85,34 +88,34 @@ std::string Call::getStateStr() { switch (getState()) { - case Active: + case ACTIVE: switch (getConnectionState()) { - case Ringing: + case RINGING: return isIncoming() ? "INCOMING" : "RINGING"; - case Connected: + case CONNECTED: default: return isRecording() ? "RECORD" : "CURRENT"; } - case Hold: + case HOLD: return "HOLD"; - case Busy: + case BUSY: return "BUSY"; - case Inactive: + case INACTIVE: switch (getConnectionState()) { - case Ringing: + case RINGING: return isIncoming() ? "INCOMING" : "RINGING"; - case Connected: + case CONNECTED: return "CURRENT"; default: return "INACTIVE"; } - case Conferencing: + case CONFERENCING: return "CONFERENCING"; - case Refused: - case Error: + case REFUSED: + case ERROR: default: return "FAILURE"; } @@ -136,17 +139,17 @@ Call::getLocalAudioPort() bool Call::setRecording() { - bool recordStatus = Recordable::recAudio.isRecording(); + bool recordStatus = Recordable::recAudio_.isRecording(); - Recordable::recAudio.setRecording(); + Recordable::recAudio_.setRecording(); MainBuffer *mbuffer = Manager::instance().getMainBuffer(); - std::string process_id = Recordable::recorder.getRecorderID(); + std::string process_id = Recordable::recorder_.getRecorderID(); if (!recordStatus) { mbuffer->bindHalfDuplexOut(process_id, id_); mbuffer->bindHalfDuplexOut(process_id); - Recordable::recorder.start(); + Recordable::recorder_.start(); } else { mbuffer->unBindHalfDuplexOut(process_id, id_); mbuffer->unBindHalfDuplexOut(process_id); @@ -156,3 +159,44 @@ Call::setRecording() return recordStatus; } + +void Call::time_stop() +{ + time(×tamp_stop_); +} + +std::string Call::getTypeStr() const +{ + switch (type_) { + case INCOMING: + return "incoming"; + case OUTGOING: + return "outgoing"; + case MISSED: + return "missed"; + default: + return ""; + } +} + +std::map<std::string, std::string> Call::createHistoryEntry() const +{ + std::map<std::string, std::string> result; + result[HistoryItem::ACCOUNT_ID_KEY] = Manager::instance().getAccountFromCall(id_); + result[HistoryItem::CONFID_KEY] = confID_; + result[HistoryItem::CALLID_KEY] = id_; + result[HistoryItem::DISPLAY_NAME_KEY] = displayName_; + result[HistoryItem::PEER_NUMBER_KEY] = peerNumber_; + result[HistoryItem::RECORDING_PATH_KEY] = recAudio_.fileExists() ? getFilename() : ""; + std::stringstream time_str; + time_str << timestamp_start_; + result[HistoryItem::TIMESTAMP_START_KEY] = time_str.str(); + time_str.str(""); + time_str << timestamp_stop_; + result[HistoryItem::TIMESTAMP_STOP_KEY] = time_str.str(); + if (connectionState_ == RINGING) + result[HistoryItem::STATE_KEY] = HistoryItem::MISSED_STRING; + else + result[HistoryItem::STATE_KEY] = getTypeStr(); + return result; +} diff --git a/daemon/src/call.h b/daemon/src/call.h index fcb5bba734..784acd9e7d 100644 --- a/daemon/src/call.h +++ b/daemon/src/call.h @@ -47,15 +47,10 @@ class Call : public Recordable { static const char * const DEFAULT_ID; /** - * This determines if the call is a direct IP-to-IP call or a classic call, made with an existing account + * This determines if the call originated from the local user (OUTGOING) + * or from some remote peer (INCOMING, MISSED). */ - enum CallConfiguration {Classic, IPtoIP}; - - /** - * This determines if the call originated from the local user (Outgoing) - * or from some remote peer (Incoming). - */ - enum CallType {Incoming, Outgoing}; + enum CallType {INCOMING, OUTGOING, MISSED}; /** * Tell where we're at with the call. The call gets Connected when we know @@ -65,12 +60,12 @@ class Call : public Recordable { * Audio should be transmitted when ConnectionState = Connected AND * CallState = Active. */ - enum ConnectionState {Disconnected, Trying, Progressing, Ringing, Connected}; + enum ConnectionState {DISCONNECTED, TRYING, PROGRESSING, RINGING, CONNECTED}; /** * The Call State. */ - enum CallState {Inactive, Active, Hold, Busy, Conferencing, Refused, Error}; + enum CallState {INACTIVE, ACTIVE, HOLD, BUSY, CONFERENCING, REFUSED, ERROR}; /** * Constructor of a call @@ -122,24 +117,6 @@ class Call : public Recordable { return peerNumber_; } - /** - * Set the peer name (caller in ingoing) - * not protected by mutex (when created) - * @param name The peer name - */ - void setPeerName(const std::string& name) { - peerName_ = name; - } - - /** - * Get the peer name (caller in ingoing) - * not protected by mutex (when created) - * @return std::string The peer name - */ - std::string getPeerName() const { - return peerName_; - } - /** * Set the display name (caller in ingoing) * not protected by mutex (when created) @@ -163,8 +140,8 @@ class Call : public Recordable { * @return true if yes * false otherwise */ - bool isIncoming() { - return type_ == Incoming; + bool isIncoming() const { + return type_ == INCOMING; } /** @@ -193,12 +170,8 @@ class Call : public Recordable { std::string getStateStr(); - void setCallConfiguration(Call::CallConfiguration callConfig) { - callConfig_ = callConfig; - } - - Call::CallConfiguration getCallConfiguration() const { - return callConfig_; + void setIPToIP(bool IPToIP) { + isIPToIP_ = IPToIP; } /** @@ -230,16 +203,15 @@ class Call : public Recordable { unsigned int getLocalAudioPort(); std::string getRecFileId() const { - return getPeerName(); - } - - std::string getFileName() const { - return peerNumber_; + return getDisplayName(); } + void time_stop(); + std::map<std::string, std::string> createHistoryEntry() const; virtual bool setRecording(); private: + std::string getTypeStr() const; /** Protect every attribute that can be changed by two threads */ ost::Mutex callMutex_; @@ -267,16 +239,16 @@ class Call : public Recordable { CallState callState_; /** Direct IP-to-IP or classic call */ - CallConfiguration callConfig_; - - /** Name of the peer */ - std::string peerName_; + bool isIPToIP_; /** Number of the peer */ std::string peerNumber_; /** Display Name */ std::string displayName_; + + time_t timestamp_start_; + time_t timestamp_stop_; }; #endif diff --git a/daemon/src/conference.cpp b/daemon/src/conference.cpp index fc37157b58..d40da64e58 100644 --- a/daemon/src/conference.cpp +++ b/daemon/src/conference.cpp @@ -41,7 +41,7 @@ Conference::Conference() , confState_(ACTIVE_ATTACHED) , participants_() { - Recordable::initRecFileName(id_); + Recordable::initRecFilename(id_); } int Conference::getState() const @@ -101,12 +101,12 @@ ParticipantSet Conference::getParticipantList() const bool Conference::setRecording() { - bool recordStatus = Recordable::recAudio.isRecording(); + bool recordStatus = Recordable::recAudio_.isRecording(); - Recordable::recAudio.setRecording(); + Recordable::recAudio_.setRecording(); MainBuffer *mbuffer = Manager::instance().getMainBuffer(); - std::string process_id(Recordable::recorder.getRecorderID()); + std::string process_id(Recordable::recorder_.getRecorderID()); // start recording if (!recordStatus) { @@ -115,7 +115,7 @@ bool Conference::setRecording() mbuffer->bindHalfDuplexOut(process_id); - Recordable::recorder.start(); + Recordable::recorder_.start(); } else { for (ParticipantSet::const_iterator iter = participants_.begin(); iter != participants_.end(); ++iter) mbuffer->unBindHalfDuplexOut(process_id, *iter); diff --git a/daemon/src/config/config.cpp b/daemon/src/config/config.cpp index ede2679075..32d56f9481 100644 --- a/daemon/src/config/config.cpp +++ b/daemon/src/config/config.cpp @@ -42,9 +42,6 @@ namespace Conf { -ConfigTree::~ConfigTree() -{} - void ConfigTree::addDefaultValue(const std::pair<std::string, std::string>& token, std::string section) { defaultValueMap_.insert(token); @@ -90,11 +87,11 @@ ConfigTree::removeSection(const std::string& section) /** Retrieve the sections as an array */ std::list<std::string> -ConfigTree::getSections() +ConfigTree::getSections() const { std::list<std::string> sections; - for (SectionMap::iterator iter = sections_.begin(); iter != sections_.end(); ++iter) + for (SectionMap::const_iterator iter = sections_.begin(); iter != sections_.end(); ++iter) sections.push_back(iter->first); return sections; @@ -194,8 +191,7 @@ ConfigTree::getConfigTreeItem(const std::string& section, const std::string& ite * @todo Élimier les 45,000 classes qui servent à rien pour Conf. * The true/false logic is useless here. */ -bool -ConfigTree::setConfigTreeItem(const std::string& section, +void ConfigTree::setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value) { @@ -214,17 +210,17 @@ ConfigTree::setConfigTreeItem(const std::string& section, // something that would fit. std::string defaultValue = getDefaultValue(itemName); addConfigTreeItem(section, ConfigTreeItem(itemName, value, defaultValue)); - return true; + return; } // Use default value if the value is empty. if (value.empty()) { iterItem->second.setValue(getDefaultValue(itemName)); - return true; + return; } iterItem->second.setValue(value); - return true; + return; } // Save config to a file (ini format) @@ -265,16 +261,15 @@ ConfigTree::saveConfigTree(const std::string& fileName) const } // Create the tree from an existing ini file -// 0 = error -// 1 = OK -// 2 = unable to open -int +// false = error +// true = OK +bool ConfigTree::populateFromFile(const std::string& fileName) { DEBUG("ConfigTree: Populate from file %s", fileName.c_str()); if (fileName.empty()) - return 0; + return false; std::fstream file; @@ -284,11 +279,11 @@ ConfigTree::populateFromFile(const std::string& fileName) file.open(fileName.data(), std::fstream::out); if (!file.is_open()) - return 0; + return false; file.close(); - return 2; + return false; } // get length of file: @@ -300,7 +295,7 @@ ConfigTree::populateFromFile(const std::string& fileName) if (length == 0) { file.close(); - return 2; // should load config + return false; // should load config } std::string line; @@ -336,7 +331,7 @@ ConfigTree::populateFromFile(const std::string& fileName) if (chmod(fileName.c_str(), S_IRUSR | S_IWUSR)) DEBUG("Failed to set permission on configuration file because: %m"); - return 1; + return true; } std::list<std::string> diff --git a/daemon/src/config/config.h b/daemon/src/config/config.h index aff39f99a7..6c1643aa19 100644 --- a/daemon/src/config/config.h +++ b/daemon/src/config/config.h @@ -80,7 +80,6 @@ class ConfigTreeIterator { class ConfigTree { public: ConfigTree() : sections_(), defaultValueMap_() {} - ~ConfigTree(); /** * Add a default value for a given key. * It looks in a map of default values when @@ -105,7 +104,7 @@ class ConfigTree { * * @return array Strings of the sections */ - std::list<std::string> getSections(); + std::list<std::string> getSections() const; void addConfigTreeItem(const std::string& section, const ConfigTreeItem item); /** @@ -115,7 +114,7 @@ class ConfigTree { * @param itemName The itemName= in the .ini file * @param value The value to assign to that itemName */ - bool setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value); + void setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value); /** * Get a value. @@ -141,7 +140,7 @@ class ConfigTree { /** * Load data (and fill ConfigTree) from disk */ - int populateFromFile(const std::string& fileName); + bool populateFromFile(const std::string& fileName); bool getConfigTreeItemToken(const std::string& section, const std::string& itemName, std::list<std::string>& arg) const; diff --git a/daemon/src/dbus/callmanager-introspec.xml b/daemon/src/dbus/callmanager-introspec.xml index 46cec40068..5c38193ffd 100644 --- a/daemon/src/dbus/callmanager-introspec.xml +++ b/daemon/src/dbus/callmanager-introspec.xml @@ -1,825 +1,781 @@ <?xml version="1.0" encoding="UTF-8" ?> <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.CallManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>The CallManager interface is used to manage - any call and conference related actions.</p> - <p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p> - </tp:docstring> - <method name="placeCall" tp:name-for-bindings="placeCall"> - <tp:docstring> - <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface. - </tp:docstring> - </arg> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> - <tp:added version="0.9.8"/> - <tp:docstring> - Place a call with the fist registered account, regarding to the account list order. - <tp:rationale> - Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) - </tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="refuse" tp:name-for-bindings="refuse"> - <tp:docstring> - Refuse an incoming call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - - </method> - - <method name="accept" tp:name-for-bindings="accept"> - <tp:docstring> - Answer an incoming call. Automatically put the current call on state HOLD. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUp" tp:name-for-bindings="hangUp"> - <tp:docstring> - Hangup a call in state "CURRENT" or "HOLD". - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hangup a conference, and every call participating to the conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The unique conference ID. - </tp:docstring> - </arg> - </method> - - <method name="hold" tp:name-for-bindings="hold"> - <tp:docstring> - Place a call on hold. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="unhold" tp:name-for-bindings="unhold"> - <tp:docstring> - Hold off a call, and place this call on state CURRENT. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="transfer" tp:name-for-bindings="transfer"> - <tp:docstring> - Transfer a call to given phone number. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - The phone number to transfer the call to. - </tp:docstring> - </arg> - </method> - - <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> - <tp:docstring> - Perform an attended transfer on two calls - </tp:docstring> - <arg type="s" name="transferID" direction="in"> - <tp:docstring> - The callID of the call to be transfered. - </tp:docstring> - </arg> - <arg type="s" name="targetID" direction="in"> - <tp:docstring> - The callID of the target call. - </tp:docstring> - </arg> - </method> - - <method name="playDTMF" tp:name-for-bindings="playDTMF"> - <tp:docstring> - Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server. - </tp:docstring> - <arg type="s" name="key" direction="in"> - <tp:docstring> - Unicode charter for pressed key - </tp:docstring> - </arg> - </method> - - <method name="startTone" tp:name-for-bindings="startTone"> - <tp:docstring> - Start audio stream and play tone.. - </tp:docstring> - <arg type="i" name="start" direction="in"/> - <arg type="i" name="type" direction="in"/> - </method> - - <method name="setVolume" tp:name-for-bindings="setVolume"> - <tp:docstring> - <p>Sets the volume using a linear scale [0,100].</p> - <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="in"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="getVolume" tp:name-for-bindings="getVolume"> - <tp:docstring> - <p>Return the volume value of the given device on a linear scale [0,100].</p> - <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="out"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join two participants together to create a 3-way conference including the current client.</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="sel_callID" direction="in"/> - <arg type="s" name="drag_callID" direction="in"/> - </method> + <interface name="org.sflphone.SFLphone.CallManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>The CallManager interface is used to manage call and conference related actions.</p> + <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. + SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p> + </tp:docstring> + <method name="placeCall" tp:name-for-bindings="placeCall"> + <tp:docstring> + <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface. + </tp:docstring> + </arg> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> + <tp:added version="0.9.8"/> + <tp:docstring> + Place a call with the first registered account in the account list. + <tp:rationale> + Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) + </tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="refuse" tp:name-for-bindings="refuse"> + <tp:docstring> + Refuse an incoming call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + + </method> + + <method name="accept" tp:name-for-bindings="accept"> + <tp:docstring> + Answer an incoming call. Automatically puts the current call on HOLD. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUp" tp:name-for-bindings="hangUp"> + <tp:docstring> + Hangup a call in state "CURRENT" or "HOLD". + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hangup a conference, and every call participating to the conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The unique conference ID. + </tp:docstring> + </arg> + </method> + + <method name="hold" tp:name-for-bindings="hold"> + <tp:docstring> + Place a call on hold. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="unhold" tp:name-for-bindings="unhold"> + <tp:docstring> + Take a call off hold, and place this call in state CURRENT. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="transfer" tp:name-for-bindings="transfer"> + <tp:docstring> + Transfer a call to the given phone number. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + The phone number to which the call will be transferred. + </tp:docstring> + </arg> + </method> + + <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> + <tp:docstring> + Perform an attended transfer on two calls. + </tp:docstring> + <arg type="s" name="transferID" direction="in"> + <tp:docstring> + The callID of the call to be transfered. + </tp:docstring> + </arg> + <arg type="s" name="targetID" direction="in"> + <tp:docstring> + The callID of the target call. + </tp:docstring> + </arg> + </method> + + <method name="playDTMF" tp:name-for-bindings="playDTMF"> + <tp:docstring> + Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server. + </tp:docstring> + <arg type="s" name="key" direction="in"> + <tp:docstring> + Unicode character for pressed key. + </tp:docstring> + </arg> + </method> + + <method name="startTone" tp:name-for-bindings="startTone"> + <tp:docstring> + Start audio stream and play tone. + </tp:docstring> + <arg type="i" name="start" direction="in"/> + <arg type="i" name="type" direction="in"/> + </method> + + <method name="setVolume" tp:name-for-bindings="setVolume"> + <tp:docstring> + <p>Sets the volume using a linear scale [0,100].</p> + <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="in"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="getVolume" tp:name-for-bindings="getVolume"> + <tp:docstring> + <p>Return the volume value of the given device on a linear scale [0,100].</p> + <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="out"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join two participants together to create a 3-way conference including the current client.</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="sel_callID" direction="in"/> + <arg type="s" name="drag_callID" direction="in"/> + </method> <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList"> - <tp:added version="0.9.14"/> - <tp:docstring> - <p>Create a conference from a list of participant</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="as" name="participants" direction="in"/> - </method> - - <method name="addParticipant" tp:name-for-bindings="addParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join a new particiant to an existing conference.</p> - <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to add to the conference - </tp:docstring> - </arg> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p> - <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p> - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID - </tp:docstring> - </arg> - </method> - - <method name="joinConference" tp:name-for-bindings="joinConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Join two conferences together. - </tp:docstring> - <arg type="s" name="sel_confID" direction="in"/> - <arg type="s" name="drag_confID" direction="in"/> - </method> - - <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a hashtable containing conference details. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The conference ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out"> - <tp:docstring> - A map containing the ID of the conferences - and their states: - <ul> - <li>ACTIVE_ATTACHED</li> - <li>ACTIVE_DETACHED</li> - <li>HOLD</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a list containing all active - conferences. - <tp:rationale>To update client status, one should - use <tp:member-ref>getParticipantList</tp:member-ref> - with provided conference IDs.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of conferences. - </tp:docstring> - </arg> - </method> - - <method name="setRecording" tp:name-for-bindings="setRecording"> - <tp:docstring> - Start recording a call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to record. - </tp:docstring> - </arg> - </method> - - <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> - <tp:docstring> - Tells whether or not a call is being recorded. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="b" name="isRecording" direction="out"> - <tp:docstring> - Returns true is the call is being recorded. False otherwise. - </tp:docstring> - </arg> - </method> - - <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> - <tp:docstring> - Once after starting recording for the first time, this signal is emited to - provide the recorded file path to client application. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="filepath"/> - </signal> - - <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> - <tp:docstring/> - <arg type="s" name="filepath" /> - </signal> - - - <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> - <tp:docstring> - Get all the details about a specific call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>A map containing the call details: </p> - <ul> - <li>ACCOUNTID</li> - <li>PEER_NUMBER</li> - <li>PEER_NAME</li> - <li>DISPLAY_NAME</li> - <li>CALL_STATE</li> - <li>CALL_TYPE</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getCallList" tp:name-for-bindings="getCallList"> - <tp:docstring> - Get the list of active calls. - <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of call IDs. - </tp:docstring> - </arg> - </method> - - <method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="codecName" direction="out"/> - </method> - - <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> - <tp:docstring> - Send a text message to the specified call - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="message" direction="in"/> - </method> - - <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> - <tp:docstring> - <p>Notify that a cell have been created.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when call have been created by the daemon itself.</p> - <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the calle. Clients must notify teh right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="to"> - <tp:docstring> - The sip uri this call is trying to reach - </tp:docstring> - </arg> - </signal> - - <signal name="incomingCall" tp:name-for-bindings="incomingCall"> - <tp:docstring> - <p>Notify an incoming call.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when we receive a call from a remote peer</p> - <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the callee. Clients must notify the right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="from"> - <tp:docstring> - The caller phone number. - </tp:docstring> - </arg> - </signal> - - <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> - <tp:docstring> - Notify clients that a new text message has been received. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="from" /> - <arg type="s" name="message" /> - </signal> - - <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> - <tp:docstring> - <p>Notify of a change in a call state.</p> - <p>The client must subscribe to this signal.</p> - </tp:docstring> - <arg type="s" name="callID"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="s" name="state" > - <tp:docstring> - The acceptable states are: - <ul> - <li>INCOMING: Initial state of incoming calls</li> - <li>RINGING: Initial state of received outgoing call</li> - <li>CURRENT: The normal active state of an answered call</li> - <li>HUNGUP: Notify that the call has been hungup by peer</li> - <li>BUSY</li> - <li>FAILURE: Error when processing a call</li> - <li>HOLD</li> - <li>UNHOLD_CURRENT</li> - <li>UNHOLD_RECORD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> - <tp:added version="0.9.7"/> - <tp:docstring> - Notify of a change in the conferences state - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - The acceptable states are: - <ul> - <li>ACTIVE_ATTACHED: SFLphone user is - participating to this conference</li> - <li>ACTIVE_DETACHED: This situation can - occur if a call is received while - SFLphone user is participating to a - conference. In this case, one can leave - the conference by answering the - call. Other participants may continue - conferencing normally.</li> - <li>HOLD: Each call in this conference - is on state HOLD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Get the call IDs of every participant to a given conference. The client should keep and update the list of participant. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of the call IDs. - </tp:docstring> - </arg> - </method> - - <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - A new conference ID. - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </signal> - - <method name="holdConference" tp:name-for-bindings="holdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold on every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="unholdConference" tp:name-for-bindings="unholdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold off every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="filepath" direction="in"/> - <arg type="b" name="result" direction="out"/> - </method> - - <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring/> - <arg type="s" name="filepath" direction="in"/> - </method> - - <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> - <tp:docstring> - <p>Call state changed, SFLphone received a notification - from registrar concerning this call.</p> - </tp:docstring> - <arg type="s" name="callID" /> - <tp:docstring> - The call ID - </tp:docstring> - <arg type="s" name="state" /> - <tp:docstring> - Description string - </tp:docstring> - <arg type="i" name="code" /> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </signal> - - <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> - <tp:docstring> - <p>Account state changed, SFLphone received a notification - from registrar.</p> - </tp:docstring> - <arg type="s" name="accountID" > - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - Description string - </tp:docstring> - </arg> - <arg type="i" name="code"> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </arg> - </signal> - - <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> - <tp:docstring> - Notify the clients of the voicemail number for a specific account, if applicable. - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID. - </tp:docstring> - </arg> - <arg type="i" name="count"> - <tp:docstring> - The number of waiting messages. - </tp:docstring> - </arg> - </signal> - - <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> - <tp:docstring> - <p>Notify clients of a volume level - change.</p> - <p>This signal occurs only if ALSA is - enabled since Pulseaudio streams are - managed externally. </p> - </tp:docstring> - <arg type="s" name="device"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value"> - <tp:docstring> - The new volume value - </tp:docstring> - </arg> - </signal> - - <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> - <tp:docstring> - <p>Transfer has been successfully - processed. Client should remove transfered - call from call list as it is no longer - accessible in SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="transferFailed" tp:name-for-bindings="transferFailed"> - <tp:docstring> - <p>Transfer operation failed. Corespondin - call is no longer accessible in - SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Signal sent on SDES session success. Media transmission is encripted - for this call only. It does not apply for a - conference.</p> - <p>A conference can be considered to be secured if and only if each - participant is secured.</p> - </tp:docstring> - <arg type="s" name="callID"/> - </signal> - - <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Sinal sent to notify that SDES session - failed.</p> - <p>Media transmission is not encrypted.</p> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <!-- ZRTP Methods and Signals --> - <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="cipher" /> - </signal> - - <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="reason" /> - <arg type="s" name="severity" /> - </signal> - - <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="showSAS" tp:name-for-bindings="showSAS"> - <tp:added version="0.9.7"/> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="sas" /> - <arg type="b" name="verified"/> - </signal> - - <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="accepted" direction="in"/> - </method> - - <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="yesNo" direction="in"/> - </method> - - </interface> + <tp:added version="0.9.14"/> + <tp:docstring> + <p>Create a conference from a list of participants</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="as" name="participants" direction="in"/> + </method> + + <method name="addParticipant" tp:name-for-bindings="addParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join a new particiant to an existing conference.</p> + <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to add to the conference + </tp:docstring> + </arg> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p> + <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p> + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID + </tp:docstring> + </arg> + </method> + + <method name="joinConference" tp:name-for-bindings="joinConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Join two conferences together. + </tp:docstring> + <arg type="s" name="sel_confID" direction="in"/> + <arg type="s" name="drag_confID" direction="in"/> + </method> + + <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a hashtable containing conference details. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The conference ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out"> + <tp:docstring> + A map containing the ID of the conferences + and their states: + <ul> + <li>ACTIVE_ATTACHED</li> + <li>ACTIVE_DETACHED</li> + <li>HOLD</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a list containing all active + conferences. + <tp:rationale>To update client status, one should + use <tp:member-ref>getParticipantList</tp:member-ref> + with provided conference IDs.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of conferences. + </tp:docstring> + </arg> + </method> + + <method name="setRecording" tp:name-for-bindings="setRecording"> + <tp:docstring> + Start recording a call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to record. + </tp:docstring> + </arg> + </method> + + <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> + <tp:docstring> + Tells whether or not a call is being recorded. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="b" name="isRecording" direction="out"> + <tp:docstring> + Returns true is the call is being recorded. False otherwise. + </tp:docstring> + </arg> + </method> + + <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> + <tp:docstring> + Once after starting recording for the first time, this signal is emited to + provide the recorded file path to client application. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="filepath"/> + </signal> + + <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> + <tp:docstring/> + <arg type="s" name="filepath" /> + </signal> + + + <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> + <tp:docstring> + Get all the details about a specific call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>A map containing the call details: </p> + <ul> + <li>ACCOUNTID</li> + <li>PEER_NUMBER</li> + <li>PEER_NAME</li> + <li>DISPLAY_NAME</li> + <li>CALL_STATE</li> + <li>CALL_TYPE</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getCallList" tp:name-for-bindings="getCallList"> + <tp:docstring> + Get the list of active calls. + <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of call IDs. + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="codecName" direction="out"/> + </method> + + <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> + <tp:docstring> + Send a text message to the specified call + </tp:docstring> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="message" direction="in"/> + </method> + + <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> + <tp:docstring> + <p>Notify that a call has been created.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other actions for + this call. This signal is emitted when call haves been created by the daemon itself.</p> + <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the call. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="to"> + <tp:docstring> + The SIP URI this call is trying to reach. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingCall" tp:name-for-bindings="incomingCall"> + <tp:docstring> + <p>Notify an incoming call.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other action for + this call. This signal is emitted when we receive a call from a remote peer</p> + <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the callee. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="from"> + <tp:docstring> + The caller phone number. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> + <tp:docstring> + Notify clients that a new text message has been received. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="from" /> + <arg type="s" name="message" /> + </signal> + + <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> + <tp:docstring> + <p>Notify of a change in a call state.</p> + <p>The client must subscribe to this signal.</p> + </tp:docstring> + <arg type="s" name="callID"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="s" name="state" > + <tp:docstring> + The acceptable states are: + <ul> + <li>INCOMING: Initial state of incoming calls</li> + <li>RINGING: Initial state of received outgoing call</li> + <li>CURRENT: The normal active state of an answered call</li> + <li>HUNGUP: Notify that the call has been hungup by peer</li> + <li>BUSY</li> + <li>FAILURE: Error when processing a call</li> + <li>HOLD</li> + <li>UNHOLD_CURRENT</li> + <li>UNHOLD_RECORD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> + <tp:added version="0.9.7"/> + <tp:docstring> + Notify of a change in the conferences state + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + The acceptable states are: + <ul> + <li>ACTIVE_ATTACHED: SFLphone user is + participating to this conference</li> + <li>ACTIVE_DETACHED: This situation can + occur if a call is received while + SFLphone user is participating to a + conference. In this case, one can leave + the conference by answering the + call. Other participants may continue + conferencing normally.</li> + <li>HOLD: Each call in this conference + is on state HOLD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Get the call IDs of every participant to a given conference. The client should keep and update the list of participants. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of the call IDs. + </tp:docstring> + </arg> + </method> + + <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + A new conference ID. + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </signal> + + <method name="holdConference" tp:name-for-bindings="holdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold every call which is participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="unholdConference" tp:name-for-bindings="unholdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold off every call participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <arg type="s" name="filepath" direction="in"/> + <arg type="b" name="result" direction="out"/> + </method> + + <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <tp:docstring/> + <arg type="s" name="filepath" direction="in"/> + </method> + + <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> + <tp:docstring> + <p>Call state changed, SFLphone received a notification + from registrar concerning this call.</p> + </tp:docstring> + <arg type="s" name="callID" /> + <tp:docstring> + The call ID + </tp:docstring> + <arg type="s" name="state" /> + <tp:docstring> + Description string + </tp:docstring> + <arg type="i" name="code" /> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </signal> + + <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> + <tp:docstring> + <p>Account state changed, SFLphone received a notification + from registrar.</p> + </tp:docstring> + <arg type="s" name="accountID" > + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + Description string + </tp:docstring> + </arg> + <arg type="i" name="code"> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </arg> + </signal> + + <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> + <tp:docstring> + Notify the clients of the voicemail number for a specific account, if applicable. + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID. + </tp:docstring> + </arg> + <arg type="i" name="count"> + <tp:docstring> + The number of waiting messages. + </tp:docstring> + </arg> + </signal> + + <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> + <tp:docstring> + <p>Notify clients of a volume level change.</p> + <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p> + </tp:docstring> + <arg type="s" name="device"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value"> + <tp:docstring> + The new volume value + </tp:docstring> + </arg> + </signal> + + <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> + <tp:docstring> + <p>Transfer has been successfully + processed. Client should remove transfered + call from call list as it is no longer + accessible in SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="transferFailed" tp:name-for-bindings="transferFailed"> + <tp:docstring> + <p>Transfer operation failed. Corespondin + call is no longer accessible in + SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Signal sent on SDES session success. Media transmission is encripted + for this call only. It does not apply for a conference.</p> + <p>A conference can be considered to be secured if and only if each + participant is secured.</p> + </tp:docstring> + <arg type="s" name="callID"/> + </signal> + + <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Sinal sent to notify that SDES session failed.</p> + <p>Media transmission is not encrypted.</p> + </tp:docstring> + <arg type="s" name="callID" /> + </signal> + + <!-- ZRTP Methods and Signals --> + <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="cipher" /> + </signal> + + <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="reason" /> + <arg type="s" name="severity" /> + </signal> + + <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="showSAS" tp:name-for-bindings="showSAS"> + <tp:added version="0.9.7"/> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="sas" /> + <arg type="b" name="verified"/> + </signal> + + <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="accepted" direction="in"/> + </method> + + <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="yesNo" direction="in"/> + </method> + + </interface> </node> diff --git a/daemon/src/dbus/callmanager.cpp b/daemon/src/dbus/callmanager.cpp index 3a13295efe..809e0628ed 100644 --- a/daemon/src/dbus/callmanager.cpp +++ b/daemon/src/dbus/callmanager.cpp @@ -237,14 +237,11 @@ CallManager::getIsRecording(const std::string& callID) return Manager::instance().isRecording(callID); } - -std::string -CallManager::getCurrentAudioCodecName(const std::string& callID) +std::string CallManager::getCurrentAudioCodecName(const std::string& callID) { return Manager::instance().getCurrentCodecName(callID).c_str(); } - std::map<std::string, std::string> CallManager::getCallDetails(const std::string& callID) { @@ -257,12 +254,6 @@ CallManager::getCallList() return Manager::instance().getCallList(); } -std::string -CallManager::getCurrentCallID() -{ - return Manager::instance().getCurrentCallId(); -} - void CallManager::playDTMF(const std::string& key) { diff --git a/daemon/src/dbus/callmanager.h b/daemon/src/dbus/callmanager.h index e0592f32b4..7758fa7235 100644 --- a/daemon/src/dbus/callmanager.h +++ b/daemon/src/dbus/callmanager.h @@ -86,7 +86,6 @@ class CallManager void attendedTransfer(const std::string& transferID, const std::string& targetID); std::map< std::string, std::string > getCallDetails(const std::string& callID); std::vector< std::string > getCallList(); - std::string getCurrentCallID(); /* Conference related methods */ void joinParticipant(const std::string& sel_callID, const std::string& drag_callID); diff --git a/daemon/src/dbus/configurationmanager-introspec.xml b/daemon/src/dbus/configurationmanager-introspec.xml index 6271c12c9d..5f30f25268 100644 --- a/daemon/src/dbus/configurationmanager-introspec.xml +++ b/daemon/src/dbus/configurationmanager-introspec.xml @@ -1,107 +1,107 @@ <?xml version="1.0" ?> <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.ConfigurationManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... - </tp:docstring> - - <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> - <tp:docstring> - Get all parameters of the specified account. - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> - <tp:docstring> - The available keys / parameters are: - <ul> - <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> - <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> - <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> - <li>HOSTNAME: The IP adress or hostname of the registrar</li> - <li>USERNAME: The username (or extension) of the account</li> - <li>PASSWORD: The password associated to the account</li> - <li>REALM</li> - <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> - <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> - <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> - <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> - <li>PUBLISHED_ADDRESS: The SIP published address</li> - <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> - <li>PUBLISHED_PORT: The SIP published port</li> - <li>DISPLAY_NAMEL: The display name</li> - <li>STUN_ENABLE: True or False (Default: False)</li> - <li>STUN_SERVER: The STUN server address</li> - <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> - <li>REGISTRATION_STATE_CODE</li> - <li>REGISTRATION_STATE_DESCRIPTION</li> - <li>SRTP_KEY_EXCHANGE</li> - <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> - <li>SRTP_RTP_FALLBACK</li> - <li>ZRTP_DISPLAY_SAS</li> - <li>ZRTP_DISPLAY_SAS_ONCE</li> - <li>ZRTP_HELLO_HASH</li> - <li>ZRTP_NOT_SUPP_WARNING</li> - <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> - <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> - <li>TLS_CA_LIST_FILE</li> - <li>TLS_CERTIFICATE_FILE</li> - <li>TLS_PRIVATE_KEY_FILE</li> - <li>TLS_METHOD</li> - <li>TLS_CIPHERS</li> - <li>TLS_SERVER_NAME</li> - <li>TLS_VERIFY_SERVER</li> - <li>TLS_VERIFY_CLIENT</li> - <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> - <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> - <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> - <tp:docstring> - Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. - <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> - <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setCredentials" tp:name-for-bindings="setCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> + <interface name="org.sflphone.SFLphone.ConfigurationManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... + </tp:docstring> + + <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> + <tp:docstring> + Get all parameters of the specified account. + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> + <tp:docstring> + The available keys / parameters are: + <ul> + <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> + <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> + <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> + <li>HOSTNAME: The IP adress or hostname of the registrar</li> + <li>USERNAME: The username (or extension) of the account</li> + <li>PASSWORD: The password associated to the account</li> + <li>REALM</li> + <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> + <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> + <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> + <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> + <li>PUBLISHED_ADDRESS: The SIP published address</li> + <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> + <li>PUBLISHED_PORT: The SIP published port</li> + <li>DISPLAY_NAMEL: The display name</li> + <li>STUN_ENABLE: True or False (Default: False)</li> + <li>STUN_SERVER: The STUN server address</li> + <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> + <li>REGISTRATION_STATE_CODE</li> + <li>REGISTRATION_STATE_DESCRIPTION</li> + <li>SRTP_KEY_EXCHANGE</li> + <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> + <li>SRTP_RTP_FALLBACK</li> + <li>ZRTP_DISPLAY_SAS</li> + <li>ZRTP_DISPLAY_SAS_ONCE</li> + <li>ZRTP_HELLO_HASH</li> + <li>ZRTP_NOT_SUPP_WARNING</li> + <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> + <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> + <li>TLS_CA_LIST_FILE</li> + <li>TLS_CERTIFICATE_FILE</li> + <li>TLS_PRIVATE_KEY_FILE</li> + <li>TLS_METHOD</li> + <li>TLS_CIPHERS</li> + <li>TLS_SERVER_NAME</li> + <li>TLS_VERIFY_SERVER</li> + <li>TLS_VERIFY_CLIENT</li> + <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> + <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> + <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> + <tp:docstring> + Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. + <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> + <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setCredentials" tp:name-for-bindings="setCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> <tp:docstring> Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved. </tp:docstring> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> + <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> <tp:docstring> Available parameters are: @@ -134,587 +134,584 @@ </arg> </method> - <method name="getCredentials" tp:name-for-bindings="getCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="addAccount" tp:name-for-bindings="addAccount"> - <tp:docstring> - Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> - <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - The new account settings - </tp:docstring> - </arg> - <arg type="s" name="createdAccountId" direction="out"> - <tp:docstring> - A new account ID - </tp:docstring> - </arg> - </method> - - <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> - <tp:docstring> - Update the accounts order. - <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="order" direction="in"> - <tp:docstring> - An ordered list of account IDs, delimited by '/' - </tp:docstring> - </arg> - </method> - - <method name="removeAccount" tp:name-for-bindings="removeAccount"> - <tp:docstring> - Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - </tp:docstring> - <arg type="s" name="accoundID" direction="in"> - <tp:docstring> - The account to remove, identified by its ID - </tp:docstring> - </arg> - </method> - - <method name="getAccountList" tp:name-for-bindings="getAccountList"> - <tp:docstring> - Get a list of all created accounts, as stored by the core. - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of account IDs - </tp:docstring> - </arg> - </method> - - <method name="sendRegister" tp:name-for-bindings="sendRegister"> - <tp:docstring> - Send account registration (REGISTER) to the registrar. - </tp:docstring> - the account if expire=1, unregister if expire=0. - - @param[in] input accountID - --> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="i" name="expire" direction="in"> - <tp:docstring> - <p>To register, expire must be 1.</p> - <p>To un-register, expire must be 0.</p> - </tp:docstring> - </arg> - </method> - - <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="enabled" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- /////////////////////// --> - - <!-- Codecs-related methods --> - - <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="payload" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="list" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Audio devices methods --> - - <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="audioPlugin" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - - <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="name" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="plugin" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <method name="getCredentials" tp:name-for-bindings="getCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="addAccount" tp:name-for-bindings="addAccount"> + <tp:docstring> + Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> + <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + The new account settings + </tp:docstring> + </arg> + <arg type="s" name="createdAccountId" direction="out"> + <tp:docstring> + A new account ID + </tp:docstring> + </arg> + </method> + + <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> + <tp:docstring> + Update the accounts order. + <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="order" direction="in"> + <tp:docstring> + An ordered list of account IDs, delimited by '/' + </tp:docstring> + </arg> + </method> + + <method name="removeAccount" tp:name-for-bindings="removeAccount"> + <tp:docstring> + Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + </tp:docstring> + <arg type="s" name="accoundID" direction="in"> + <tp:docstring> + The account to remove, identified by its ID + </tp:docstring> + </arg> + </method> + + <method name="getAccountList" tp:name-for-bindings="getAccountList"> + <tp:docstring> + Get a list of all created accounts, as stored by the core. + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of account IDs + </tp:docstring> + </arg> + </method> + + <method name="sendRegister" tp:name-for-bindings="sendRegister"> + <tp:docstring> + Send account registration (REGISTER) to the registrar. + </tp:docstring> + the account if expire=1, unregister if expire=0. + + @param[in] input accountID + --> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="i" name="expire" direction="in"> + <tp:docstring> + <p>To register, expire must be 1.</p> + <p>To un-register, expire must be 0.</p> + </tp:docstring> + </arg> + </method> + + <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="enabled" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- /////////////////////// --> + + <!-- Codecs-related methods --> + + <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="payload" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="list" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Audio devices methods --> + + <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="audioPlugin" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + + <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="name" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="plugin" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - </arg> - </method> - - <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - </arg> - </method> - - - <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <!-- General Settings Panel --> - - <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="level" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook configuration --> - <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook list --> - <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Hook configuration --> - <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + </arg> + </method> + + <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + </arg> + </method> + + + <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <!-- General Settings Panel --> + + <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> + <tp:docstring> + </tp:docstring> + </method> + + <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="level" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook configuration --> + <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook list --> + <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Hook configuration --> + <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getHistory" tp:name-for-bindings="getHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> <!-- Return a List of type Dict<string, string> >...a List of Dicts --> <arg type="aa{ss}" name="entries" direction="out"/> - </method> - - <method name="setHistory" tp:name-for-bindings="setHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="entries" direction="in"> - </arg> - </method> - - <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> - </signal> - - <signal name="errorAlert" tp:name-for-bindings="errorAlert"> - <arg type="i" name="code"> - <tp:docstring> - </tp:docstring> - </arg> - </signal> - - <!-- TLS Methods --> - <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> + </method> + + <method name="clearHistory" tp:name-for-bindings="clearHistory"> + </method> + + <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> + </signal> + + <signal name="errorAlert" tp:name-for-bindings="errorAlert"> + <arg type="i" name="code"> + <tp:docstring> + </tp:docstring> + </arg> + </signal> + + <!-- TLS Methods --> + <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="interface" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="address" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="interface" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="address" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> </interface> - </node> +</node> diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp index aec8f5e881..09be098ff3 100644 --- a/daemon/src/dbus/configurationmanager.cpp +++ b/daemon/src/dbus/configurationmanager.cpp @@ -59,8 +59,8 @@ std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails() return sipaccount->getIp2IpDetails(); std::map<std::string, std::string> tlsSettings = getTlsSettings(); - std::copy(tlsSettings.begin(), tlsSettings.end(), std::inserter( - ip2ipAccountDetails, ip2ipAccountDetails.end())); + std::copy(tlsSettings.begin(), tlsSettings.end(), + std::inserter(ip2ipAccountDetails, ip2ipAccountDetails.end())); return ip2ipAccountDetails; } @@ -155,7 +155,7 @@ std::vector<std::string> ConfigurationManager::getAccountList() * Send the list of all codecs loaded to the client through DBus. * Can stay global, as only the active codecs will be set per accounts */ -std::vector<int32_t > ConfigurationManager::getAudioCodecList() +std::vector<int32_t> ConfigurationManager::getAudioCodecList() { std::vector<int32_t> list(Manager::instance().audioCodecFactory.getAudioCodecList()); @@ -336,6 +336,11 @@ int32_t ConfigurationManager::getHistoryLimit() return Manager::instance().getHistoryLimit(); } +void ConfigurationManager::clearHistory() +{ + return Manager::instance().clearHistory(); +} + void ConfigurationManager::setHistoryLimit(const int32_t& days) { Manager::instance().setHistoryLimit(days); @@ -403,11 +408,6 @@ std::vector<std::map<std::string, std::string> > ConfigurationManager::getHistor return Manager::instance().getHistory(); } -void ConfigurationManager::setHistory(const std::vector<std::map<std::string, std::string> > &entries) -{ - Manager::instance().setHistorySerialized(entries); -} - std::string ConfigurationManager::getAddrFromInterfaceName(const std::string& interface) { diff --git a/daemon/src/dbus/configurationmanager.h b/daemon/src/dbus/configurationmanager.h index 9264c886bc..486421d43b 100644 --- a/daemon/src/dbus/configurationmanager.h +++ b/daemon/src/dbus/configurationmanager.h @@ -68,7 +68,7 @@ class ConfigurationManager : void removeAccount(const std::string& accoundID); void deleteAllCredential(const std::string& accountID); std::vector< std::string > getAccountList(); - void sendRegister(const std::string& accoundID , const int32_t& expire); + void sendRegister(const std::string& accoundID, const int32_t& expire); std::map< std::string, std::string > getTlsSettingsDefault(); @@ -108,6 +108,7 @@ class ConfigurationManager : void setHistoryLimit(const int32_t& days); int32_t getHistoryLimit(); + void clearHistory(); int32_t getMailNotify(); void setMailNotify(); @@ -124,7 +125,6 @@ class ConfigurationManager : void setHookSettings(const std::map<std::string, std::string>& settings); std::vector<std::map<std::string, std::string> > getHistory(); - void setHistory(const std::vector<std::map<std::string, std::string> > &entries); std::map<std::string, std::string> getTlsSettings(); void setTlsSettings(const std::map< std::string, std::string >& details); diff --git a/daemon/src/history/Makefile.am b/daemon/src/history/Makefile.am index 843782642e..7d16303f14 100644 --- a/daemon/src/history/Makefile.am +++ b/daemon/src/history/Makefile.am @@ -1,11 +1,9 @@ include ../../globals.mak -SUBDIRS = - noinst_LTLIBRARIES = libhistory.la -libhistory_la_SOURCES = \ - historyitem.h \ - historyitem.cpp \ - historymanager.h \ - historymanager.cpp +libhistory_la_SOURCES = \ + historyitem.h \ + historyitem.cpp \ + history.h \ + history.cpp diff --git a/daemon/src/history/history.cpp b/daemon/src/history/history.cpp new file mode 100644 index 0000000000..caa95b663e --- /dev/null +++ b/daemon/src/history/history.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. + * + * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 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, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "history.h" +#include <cerrno> +#include <algorithm> +#include <sys/stat.h> // for mkdir +#include <ctime> +#include "global.h" +#include "logger.h" +#include "call.h" + +namespace { + int oldestAllowed(int days) + { + time_t currentTimestamp; + time(¤tTimestamp); + // Number of seconds in one day: 60 sec/min x 60 min/hr x 24hr/day + static const int DAY_UNIX_TIMESTAMP = 60 * 60 * 24; + return static_cast<int>(currentTimestamp) - (days * DAY_UNIX_TIMESTAMP); + } + + using std::map; + using std::string; + using std::vector; +} + +History::History() : + items_(), path_("") +{} + +bool History::load(int limit) +{ + ensurePath(); + std::ifstream infile(path_.c_str()); + if (!infile) { + DEBUG("No history file to load"); + return false; + } + while (!infile.eof()) { + HistoryItem item(infile); + addEntry(item, limit); + } + return true; +} + +bool History::save() +{ + DEBUG("History: Saving history in XDG directory: %s", path_.c_str()); + ensurePath(); + std::sort(items_.begin(), items_.end()); + std::ofstream outfile(path_.c_str()); + if (outfile.fail()) + return false; + for (vector<HistoryItem>::const_iterator iter = items_.begin(); + iter != items_.end(); ++iter) + outfile << *iter << std::endl; + return true; +} + +void History::addEntry(const HistoryItem &item, int oldest) +{ + if (item.hasPeerNumber() and item.youngerThan(oldest)) + items_.push_back(item); +} + +void History::ensurePath() +{ + if (path_.empty()) { + string xdg_data = string(HOMEDIR) + DIR_SEPARATOR_STR + ".local/share/sflphone"; + + string userdata; + // If the environment variable is set (not null and not empty), we'll use it to save the history + // Else we 'll the standard one, ie: XDG_DATA_HOME = $HOMEDIR/.local/share/sflphone + if (XDG_DATA_HOME != NULL) { + string xdg_env(XDG_DATA_HOME); + (!xdg_env.empty()) ? userdata = xdg_env : userdata = xdg_data; + } else + userdata = xdg_data; + + if (mkdir(userdata.data(), 0755) != 0) { + // If directory creation failed + if (errno != EEXIST) { + DEBUG("History: Cannot create directory: %m"); + return; + } + } + // Load user's history + path_ = userdata + DIR_SEPARATOR_STR + "history"; + } +} + +vector<map<string, string> > History::getSerialized() const +{ + vector<map<string, string> > result; + for (vector<HistoryItem>::const_iterator iter = items_.begin(); + iter != items_.end(); ++iter) + result.push_back(iter->toMap()); + + return result; +} + +void History::setPath(const std::string &path) +{ + path_ = path; +} + +void History::addCall(Call *call, int limit) +{ + if (!call) { + ERROR("History: Call is NULL, ignoring"); + return; + } + call->time_stop(); + HistoryItem item(call->createHistoryEntry()); + addEntry(item, limit); +} + +void History::clear() +{ + items_.clear(); +} diff --git a/daemon/src/history/history.h b/daemon/src/history/history.h new file mode 100644 index 0000000000..c4d9628e4c --- /dev/null +++ b/daemon/src/history/history.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. + * + * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 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, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#ifndef HISTORY_ +#define HISTORY_ + +#include "historyitem.h" +#include <vector> + +class Call; + +class History { + + public: + History(); + + /** Load history from file */ + bool load(int limit); + + /** + *@return True if the history has been successfully saved in the file + */ + bool save(); + + /* + *@return The number of items found in the history file + */ + size_t numberOfItems() const { + return items_.size(); + } + + bool empty() const { + return items_.empty(); + } + + std::vector<std::map<std::string, std::string> > getSerialized() const; + + void addCall(Call *call, int limit); + void clear(); + private: + void setPath(const std::string &path); + /* If no path has been set, this will initialize path to a + * system-dependent location */ + void ensurePath(); + /* + * Add a new history item in the data structure + */ + void addEntry(const HistoryItem &new_item, int limit); + + /* + * Vector containing the history items + */ + std::vector<HistoryItem> items_; + + /* The path to the history file */ + std::string path_; + + friend class HistoryTest; +}; + +#endif // HISTORY_ diff --git a/daemon/src/history/historyitem.cpp b/daemon/src/history/historyitem.cpp index a0edd4b34d..57799b276a 100644 --- a/daemon/src/history/historyitem.cpp +++ b/daemon/src/history/historyitem.cpp @@ -31,65 +31,54 @@ */ #include "historyitem.h" -#include <sstream> #include <cstdlib> -#include "config/config.h" +#include <istream> const char * const HistoryItem::ACCOUNT_ID_KEY = "accountid"; const char * const HistoryItem::CALLID_KEY = "callid"; const char * const HistoryItem::CONFID_KEY = "confid"; -const char * const HistoryItem::PEER_NAME_KEY = "peer_name"; +const char * const HistoryItem::DISPLAY_NAME_KEY = "display_name"; const char * const HistoryItem::PEER_NUMBER_KEY = "peer_number"; const char * const HistoryItem::RECORDING_PATH_KEY = "recordfile"; +const char * const HistoryItem::STATE_KEY = "state"; const char * const HistoryItem::TIMESTAMP_START_KEY = "timestamp_start"; const char * const HistoryItem::TIMESTAMP_STOP_KEY = "timestamp_stop"; -const char * const HistoryItem::STATE_KEY = "state"; + const char * const HistoryItem::MISSED_STRING = "missed"; const char * const HistoryItem::INCOMING_STRING = "incoming"; const char * const HistoryItem::OUTGOING_STRING = "outgoing"; -HistoryItem::HistoryItem(const std::map<std::string, std::string> &args) - : entryMap_(args) -{} +using std::map; +using std::string; -HistoryItem::HistoryItem(const std::string &item, Conf::ConfigTree &historyList) - : entryMap_() -{ - const char *const KEYS [] = { - ACCOUNT_ID_KEY, - CALLID_KEY, - CONFID_KEY, - PEER_NAME_KEY, - PEER_NUMBER_KEY, - RECORDING_PATH_KEY, - TIMESTAMP_START_KEY, - TIMESTAMP_STOP_KEY, - STATE_KEY, - NULL}; - for (int i = 0; KEYS[i]; ++i) - entryMap_[KEYS[i]] = historyList.getConfigTreeItemValue(item, KEYS[i]); -} +HistoryItem::HistoryItem(const map<string, string> &args) : entryMap_(args), + timestampStart_(std::atol(entryMap_[TIMESTAMP_START_KEY].c_str())) +{} -void HistoryItem::save(Conf::ConfigTree &history) const +HistoryItem::HistoryItem(std::istream &entry) : entryMap_(), timestampStart_(0) { - // The section is : "[" + random integer = "]" - std::stringstream section; - section << rand(); - const std::string sectionstr = section.str(); - - typedef std::map<std::string, std::string>::const_iterator EntryIter; - for (EntryIter iter = entryMap_.begin(); iter != entryMap_.end(); ++iter) - history.setConfigTreeItem(sectionstr, iter->first, iter->second); + string tmp; + while (std::getline(entry, tmp, '\n')) { + size_t pos = tmp.find('='); + if (pos == string::npos) + break; + else if (pos < tmp.length() - 1) { + string key(tmp.substr(0, pos)); + string val(tmp.substr(pos + 1, tmp.length() - pos - 1)); + entryMap_[key] = val; + } + } + timestampStart_ = std::atol(entryMap_[TIMESTAMP_START_KEY].c_str()); } -std::map<std::string, std::string> HistoryItem::toMap() const +map<string, string> HistoryItem::toMap() const { return entryMap_; } -bool HistoryItem::youngerThan(int otherTime) const +bool HistoryItem::youngerThan(unsigned long otherTime) const { - return atol(getTimestampStart().c_str()) >= otherTime; + return timestampStart_ > otherTime; } bool HistoryItem::hasPeerNumber() const @@ -97,12 +86,16 @@ bool HistoryItem::hasPeerNumber() const return entryMap_.find(PEER_NUMBER_KEY) != entryMap_.end(); } -std::string HistoryItem::getTimestampStart() const { - using std::map; - using std::string; - map<string, string>::const_iterator iter(entryMap_.find(TIMESTAMP_START_KEY)); - if (iter != entryMap_.end()) - return iter->second; - else - return ""; +void HistoryItem::print(std::ostream &o) const +{ + // every entry starts with "[" + random integer = "]" + for (map<string, string>::const_iterator iter = entryMap_.begin(); + iter != entryMap_.end(); ++iter) + o << iter->first << "=" << iter->second << std::endl; +} + +std::ostream& operator << (std::ostream& o, const HistoryItem& item) +{ + item.print(o); + return o; } diff --git a/daemon/src/history/historyitem.h b/daemon/src/history/historyitem.h index c134e46f18..3f7e1e5143 100644 --- a/daemon/src/history/historyitem.h +++ b/daemon/src/history/historyitem.h @@ -36,16 +36,12 @@ #include <string> #include <map> -namespace Conf { -class ConfigTree; -} - class HistoryItem { public: static const char * const ACCOUNT_ID_KEY; static const char * const CONFID_KEY; static const char * const CALLID_KEY; - static const char * const PEER_NAME_KEY; + static const char * const DISPLAY_NAME_KEY; static const char * const PEER_NUMBER_KEY; static const char * const RECORDING_PATH_KEY; static const char * const TIMESTAMP_START_KEY; @@ -56,20 +52,23 @@ class HistoryItem { static const char * const INCOMING_STRING; static const char * const OUTGOING_STRING; HistoryItem(const std::map<std::string, std::string> &args); - HistoryItem(const std::string &item, Conf::ConfigTree &list); + HistoryItem(std::istream &stream); bool hasPeerNumber() const; - bool youngerThan(int otherTime) const; - - void save(Conf::ConfigTree &history) const; + bool youngerThan(unsigned long otherTime) const; std::map<std::string, std::string> toMap() const; + void print(std::ostream &o) const; + bool operator< (const HistoryItem &other) const { + return timestampStart_ > other.timestampStart_; + } private: - std::string getTimestampStart() const; std::map<std::string, std::string> entryMap_; + unsigned long timestampStart_; // cached as we use this a lot, avoids string ops }; +std::ostream& operator << (std::ostream& o, const HistoryItem& item); #endif // HISTORY_ITEM diff --git a/daemon/src/history/historymanager.cpp b/daemon/src/history/historymanager.cpp deleted file mode 100644 index 46966cc504..0000000000 --- a/daemon/src/history/historymanager.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. - * - * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 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, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Additional permission under GNU GPL version 3 section 7: - * - * If you modify this program, or any covered work, by linking or - * combining it with the OpenSSL project's OpenSSL library (or a - * modified version of that library), containing parts covered by the - * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. - * grants you additional permission to convey the resulting work. - * Corresponding Source for a non-source form of such a combination - * shall include the source code for the parts of OpenSSL used as well - * as that of the covered work. - */ - -#include "historymanager.h" -#include <cerrno> -#include <cc++/file.h> -#include <ctime> -#include "config/config.h" - -namespace { - int get_unix_timestamp_equivalent(int days) - { - // Number of seconds in one day: 60 x 60 x 24 - static const int DAY_UNIX_TIMESTAMP = 86400; - return days * DAY_UNIX_TIMESTAMP; - } -} - -HistoryManager::HistoryManager() : - history_items_(), history_loaded_(false), history_path_("") -{} - -int HistoryManager::loadHistory(int limit, const std::string &path) -{ - Conf::ConfigTree historyList; - createHistoryPath(path); - loadHistoryFromFile(historyList); - return loadHistoryItemsMap(historyList, limit); -} - -bool HistoryManager::saveHistory() -{ - Conf::ConfigTree historyList; - saveHistoryItemsVector(historyList); - return saveHistoryToFile(historyList); -} - -bool HistoryManager::loadHistoryFromFile(Conf::ConfigTree &historyList) -{ - int exist = historyList.populateFromFile(history_path_.c_str()); - history_loaded_ = (exist == 2) ? false : true; - - return history_loaded_; -} - -int HistoryManager::loadHistoryItemsMap(Conf::ConfigTree &historyList, int limit) -{ - using std::string; - - // We want to save only the items recent enough (ie compared to CONFIG_HISTORY_LIMIT) - time_t currentTimestamp; - time(¤tTimestamp); - int historyLimit = get_unix_timestamp_equivalent(limit); - int oldestEntryTime = static_cast<int>(currentTimestamp) - historyLimit; - - std::list<std::string> sections(historyList.getSections()); - int nb_items = 0; - for (std::list<std::string>::const_iterator iter = sections.begin(); iter != sections.end(); ++iter) { - HistoryItem item(*iter, historyList); - // Make a check on the start timestamp to know it is loadable according to CONFIG_HISTORY_LIMIT - if (item.youngerThan(oldestEntryTime)) { - addNewHistoryEntry(item); - ++nb_items; - } - } - - return nb_items; -} - -bool HistoryManager::saveHistoryToFile(const Conf::ConfigTree &historyList) const -{ - DEBUG("HistoryManager: Saving history in XDG directory: %s", history_path_.c_str()); - return historyList.saveConfigTree(history_path_.data()); -} - -void HistoryManager::saveHistoryItemsVector(Conf::ConfigTree &historyList) const -{ - for (std::vector<HistoryItem>::const_iterator iter = history_items_.begin(); iter != history_items_.end(); ++iter) - iter->save(historyList); -} - -void HistoryManager::addNewHistoryEntry(const HistoryItem &new_item) -{ - history_items_.push_back(new_item); -} - -void HistoryManager::createHistoryPath(const std::string &path) -{ - std::string xdg_data = std::string(HOMEDIR) + DIR_SEPARATOR_STR + ".local/share/sflphone"; - - if (path.empty()) { - std::string userdata; - // If the environment variable is set (not null and not empty), we'll use it to save the history - // Else we 'll the standard one, ie: XDG_DATA_HOME = $HOMEDIR/.local/share/sflphone - if (XDG_DATA_HOME != NULL) { - std::string xdg_env(XDG_DATA_HOME); - (!xdg_env.empty()) ? userdata = xdg_env : userdata = xdg_data; - } else - userdata = xdg_data; - - if (mkdir(userdata.data(), 0755) != 0) { - // If directory creation failed - if (errno != EEXIST) { - DEBUG("HistoryManager: Cannot create directory: %m"); - return; - } - } - // Load user's history - setHistoryPath(userdata + DIR_SEPARATOR_STR + "history"); - } else - setHistoryPath(path); -} - - -std::vector<std::map<std::string, std::string> > HistoryManager::getSerialized() const -{ - using std::map; - using std::string; - using std::vector; - - vector<map<string, string> > result; - for (vector<HistoryItem>::const_iterator iter = history_items_.begin(); - iter != history_items_.end(); ++iter) - result.push_back(iter->toMap()); - - return result; -} - -int HistoryManager::setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history, int limit) -{ - history_items_.clear(); - using std::map; - using std::string; - using std::vector; - - // We want to save only the items recent enough (ie compared to CONFIG_HISTORY_LIMIT) - // Get the current timestamp - time_t current_timestamp; - time(¤t_timestamp); - int history_limit = get_unix_timestamp_equivalent(limit); - - int items_added = 0; - for (vector<map<string, string> >::const_iterator iter = history.begin(); iter != history.end(); ++iter) { - HistoryItem new_item(*iter); - - if (new_item.hasPeerNumber() and new_item.youngerThan((int) current_timestamp - history_limit)) { - addNewHistoryEntry(new_item); - ++items_added; - } - } - - return items_added; -} - diff --git a/daemon/src/history/historymanager.h b/daemon/src/history/historymanager.h deleted file mode 100644 index 3e25dff8a6..0000000000 --- a/daemon/src/history/historymanager.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. - * - * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 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, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Additional permission under GNU GPL version 3 section 7: - * - * If you modify this program, or any covered work, by linking or - * combining it with the OpenSSL project's OpenSSL library (or a - * modified version of that library), containing parts covered by the - * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. - * grants you additional permission to convey the resulting work. - * Corresponding Source for a non-source form of such a combination - * shall include the source code for the parts of OpenSSL used as well - * as that of the covered work. - */ - -#ifndef _HISTORY_MANAGER -#define _HISTORY_MANAGER - -#include "historyitem.h" -#include "global.h" - -class HistoryManager { - - public: - /* - * Constructor - */ - HistoryManager(); - - /** - *@param path A specific file to use; if empty, use the global one - * - *@return int The number of history items successfully loaded - */ - int loadHistory(int limit, const std::string &path=""); - - /** - *@return bool True if the history has been successfully saved in the file - */ - bool saveHistory(); - - /* - * Load the history from a file to the dedicated data structure - */ - bool loadHistoryFromFile(Conf::ConfigTree &history_list); - - /* - * @return int The number of history items loaded - */ - int loadHistoryItemsMap(Conf::ConfigTree &history_list, int limit); - - /* - * Inverse method, ie save a data structure containing the history into a file - */ - bool saveHistoryToFile(const Conf::ConfigTree &history_list) const; - - void saveHistoryItemsVector(Conf::ConfigTree &history_list) const; - - /** - *@return bool True if the history file has been successfully read - */ - bool isLoaded() const { - return history_loaded_; - } - - void setHistoryPath(const std::string &filename) { - history_path_ = filename; - } - - /* - *@return int The number of items found in the history file - */ - size_t numberOfItems() const { - return history_items_.size(); - } - - bool empty() const { - return history_items_.empty(); - } - - std::vector<std::string> getHistorySerialized() const; - std::vector<std::map<std::string, std::string> > getSerialized() const; - - int setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history, int limit); - - private: - /* - * Set the path to the history file - * - * @param path A specific file to use; if empty, use the global one - */ - void createHistoryPath(const std::string &path=""); - /* - * Add a new history item in the data structure - */ - void addNewHistoryEntry(const HistoryItem &new_item); - - /* - * Vector containing the history items - */ - std::vector<HistoryItem> history_items_; - - /* - * History has been loaded - */ - bool history_loaded_; - - /* - * The path to the history file - */ - - std::string history_path_; - - friend class HistoryTest; -}; - -#endif //_HISTORY_MANAGER diff --git a/daemon/src/iax/iaxvoiplink.cpp b/daemon/src/iax/iaxvoiplink.cpp index f8e10cb1e1..1f926e7790 100644 --- a/daemon/src/iax/iaxvoiplink.cpp +++ b/daemon/src/iax/iaxvoiplink.cpp @@ -142,7 +142,7 @@ IAXVoIPLink::sendAudioFromMic() for (CallMap::const_iterator iter = callMap_.begin(); iter != callMap_.end() ; ++iter) { IAXCall *currentCall = dynamic_cast<IAXCall*>(iter->second); - if (!currentCall or currentCall->getState() != Call::Active) + if (!currentCall or currentCall->getState() != Call::ACTIVE) continue; int codecType = currentCall->getAudioCodec(); @@ -240,14 +240,14 @@ IAXVoIPLink::sendUnregister(Account *a) Call* IAXVoIPLink::newOutgoingCall(const std::string& id, const std::string& toUrl) { - IAXCall* call = new IAXCall(id, Call::Outgoing); + IAXCall* call = new IAXCall(id, Call::OUTGOING); call->setPeerNumber(toUrl); - call->initRecFileName(toUrl); + call->initRecFilename(toUrl); iaxOutgoingInvite(call); - call->setConnectionState(Call::Progressing); - call->setState(Call::Active); + call->setConnectionState(Call::PROGRESSING); + call->setState(Call::ACTIVE); addCall(call); return call; @@ -265,8 +265,8 @@ IAXVoIPLink::answer(Call *c) iax_answer(call->session); mutexIAX_.leave(); - call->setState(Call::Active); - call->setConnectionState(Call::Connected); + call->setState(Call::ACTIVE); + call->setConnectionState(Call::CONNECTED); Manager::instance().getMainBuffer()->flushAllBuffers(); } @@ -326,7 +326,7 @@ IAXVoIPLink::onhold(const std::string& id) iax_quelch_moh(call->session, true); mutexIAX_.leave(); - call->setState(Call::Hold); + call->setState(Call::HOLD); } void @@ -343,7 +343,7 @@ IAXVoIPLink::offhold(const std::string& id) iax_unquelch(call->session); mutexIAX_.leave(); Manager::instance().getAudioDriver()->startStream(); - call->setState(Call::Active); + call->setState(Call::ACTIVE); } void @@ -468,8 +468,8 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call) break; case IAX_EVENT_REJECT: - call->setConnectionState(Call::Connected); - call->setState(Call::Error); + call->setConnectionState(Call::CONNECTED); + call->setState(Call::ERROR); Manager::instance().callFailure(id); removeCall(id); break; @@ -484,13 +484,13 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call) case IAX_EVENT_ANSWER: case IAX_EVENT_TRANSFER: - if (call->getConnectionState() == Call::Connected) + if (call->getConnectionState() == Call::CONNECTED) break; Manager::instance().addStream(call->getCallId()); - call->setConnectionState(Call::Connected); - call->setState(Call::Active); + call->setConnectionState(Call::CONNECTED); + call->setState(Call::ACTIVE); if (event->ies.format) call->format = event->ies.format; @@ -503,8 +503,8 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call) break; case IAX_EVENT_BUSY: - call->setConnectionState(Call::Connected); - call->setState(Call::Busy); + call->setConnectionState(Call::CONNECTED); + call->setState(Call::BUSY); Manager::instance().callBusy(id); removeCall(id); break; @@ -518,7 +518,7 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call) break; case IAX_EVENT_RINGA: - call->setConnectionState(Call::Ringing); + call->setConnectionState(Call::RINGING); Manager::instance().peerRingingCall(call->getCallId()); break; @@ -608,18 +608,18 @@ void IAXVoIPLink::iaxHandlePrecallEvent(iax_event* event) case IAX_EVENT_CONNECT: id = Manager::instance().getNewCallID(); - call = new IAXCall(id, Call::Incoming); + call = new IAXCall(id, Call::INCOMING); call->session = event->session; - call->setConnectionState(Call::Progressing); + call->setConnectionState(Call::PROGRESSING); if (event->ies.calling_number) call->setPeerNumber(event->ies.calling_number); if (event->ies.calling_name) - call->setPeerName(std::string(event->ies.calling_name)); + call->setDisplayName(std::string(event->ies.calling_name)); // if peerNumber exist append it to the name string - call->initRecFileName(std::string(event->ies.calling_number)); + call->initRecFilename(std::string(event->ies.calling_number)); Manager::instance().incomingCall(call, accountID_); format = call->getFirstMatchingFormat(event->ies.format, accountID_); diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp index ad6cd9fb9c..4423af4177 100644 --- a/daemon/src/main.cpp +++ b/daemon/src/main.cpp @@ -155,6 +155,7 @@ main(int argc, char **argv) DEBUG("Starting DBus event loop"); Manager::instance().getDbusManager()->exec(); + Manager::instance().saveHistory(); return 0; } diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp index aba54726dc..5175812413 100644 --- a/daemon/src/managerimpl.cpp +++ b/daemon/src/managerimpl.cpp @@ -1963,9 +1963,10 @@ std::vector<std::string> ManagerImpl::getAudioOutputDeviceList() ost::MutexLock lock(audioLayerMutex_); - if (audiodriver_) - devices = audiodriver_->getAudioDeviceList(AUDIO_STREAM_PLAYBACK); - audioLayerMutexUnlock(); + AlsaLayer *alsalayer = dynamic_cast<AlsaLayer*>(audiodriver_); + + if (alsalayer) + devices = alsalayer->getAudioDeviceList(AUDIO_STREAM_PLAYBACK); return devices; } @@ -1980,8 +1981,10 @@ std::vector<std::string> ManagerImpl::getAudioInputDeviceList() ost::MutexLock lock(audioLayerMutex_); - if (audiodriver_) - devices = audiodriver_->getAudioDeviceList(AUDIO_STREAM_CAPTURE); + AlsaLayer *alsalayer = dynamic_cast<AlsaLayer *>(audiodriver_); + + if (alsalayer) + devices = alsalayer->getAudioDeviceList(AUDIO_STREAM_CAPTURE); return devices; } diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h index 2412ac2068..222c62b36e 100644 --- a/daemon/src/managerimpl.h +++ b/daemon/src/managerimpl.h @@ -51,7 +51,6 @@ #include "audio/codecs/audiocodecfactory.h" #include "audio/mainbuffer.h" -#include "history/historymanager.h" #include "preferences.h" #include "noncopyable.h" @@ -67,6 +66,7 @@ class YamlEmitter; class DTMF; class AudioFile; class AudioLayer; +class History; class TelephoneTone; class VoIPLink; @@ -82,8 +82,6 @@ typedef std::map<std::string, Account*> AccountMap; /** Define a type for a std::string to std::string Map inside ManagerImpl */ typedef std::map<std::string, std::string> CallAccountMap; -typedef std::map<std::string, Call::CallConfiguration> CallConfigMap; - /** To send multiple string */ typedef std::list<std::string> TokenList; @@ -415,7 +413,7 @@ class ManagerImpl { * 0 for unregistration request * 1 for registration request */ - void sendRegister(const ::std::string& accountId , const int32_t& enable); + void sendRegister(const std::string& accountId , const int32_t& enable); /** * Get account list @@ -758,7 +756,7 @@ class ManagerImpl { * @return bool true on success * false otherwise */ - bool setConfig(const std::string& section, const std::string& name, const std::string& value); + void setConfig(const std::string& section, const std::string& name, const std::string& value); /** * Change a specific value in the configuration tree. @@ -769,7 +767,7 @@ class ManagerImpl { * @return bool true on success * false otherwise */ - bool setConfig(const std::string& section, const std::string& name, int value); + void setConfig(const std::string& section, const std::string& name, int value); /** * Get a int from the configuration tree @@ -909,11 +907,11 @@ class ManagerImpl { void initAudioDriver(); void audioLayerMutexLock() { - audiolayerMutex_.enterMutex(); + audioLayerMutex_.enterMutex(); } void audioLayerMutexUnlock() { - audiolayerMutex_.leaveMutex(); + audioLayerMutex_.leaveMutex(); } /** @@ -1001,7 +999,7 @@ class ManagerImpl { /** * Mutex used to protect audio layer */ - ost::Mutex audiolayerMutex_; + ost::Mutex audioLayerMutex_; /** * Waiting Call Vectors @@ -1060,13 +1058,11 @@ class ManagerImpl { /** Mutex to lock the call account map (main thread + voiplink thread) */ ost::Mutex callAccountMapMutex_; - CallConfigMap callConfigMap_; - - bool associateConfigToCall(const std::string& callID, Call::CallConfiguration config); + std::map<std::string, bool> IPToIPMap_; - Call::CallConfiguration getConfigFromCall(const std::string& callID) const; + void setIPToIPForCall(const std::string& callID, bool IPToIP); - bool removeCallConfig(const std::string& callID); + bool isIPToIP(const std::string& callID) const; /** *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */ @@ -1146,12 +1142,8 @@ class ManagerImpl { bool accountExists(const std::string& accountID); std::vector<std::map<std::string, std::string> > getHistory() const; + void clearHistory(); - /** - * Set a list of serialized history entries - * @param Vector of history entries - */ - void setHistorySerialized(const std::vector<std::map<std::string, std::string> > &history); /** * Get an account pointer * @param accountID account ID to get @@ -1190,6 +1182,7 @@ class ManagerImpl { * Send registration to all enabled accounts */ void registerAccounts(); + void saveHistory(); private: NON_COPYABLE(ManagerImpl); @@ -1198,7 +1191,7 @@ class ManagerImpl { * To handle the persistent history * TODO: move this to ConfigurationManager */ - HistoryManager history_; + History *history_; /** * Instant messaging module, resposible to initiate, format, parse, diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp index e0f00a7df9..6d370dc8cb 100644 --- a/daemon/src/sip/sipvoiplink.cpp +++ b/daemon/src/sip/sipvoiplink.cpp @@ -403,7 +403,7 @@ Call *SIPVoIPLink::newOutgoingCall(const std::string& id, const std::string& toU if (account == NULL) // TODO: We should investigate how we could get rid of this error and create a IP2IP call instead throw VoipLinkException("Could not get account for this call"); - SIPCall* call = new SIPCall(id, Call::Outgoing, cp_); + SIPCall* call = new SIPCall(id, Call::OUTGOING, cp_); // If toUri is not a well formated sip URI, use account information to process it std::string toUri; @@ -450,7 +450,7 @@ Call *SIPVoIPLink::newOutgoingCall(const std::string& id, const std::string& toU throw VoipLinkException("Could not start rtp session for early media"); } - call->initRecFileName(toUrl); + call->initRecFilename(toUrl); call->getLocalSDP()->setLocalIP(addrSdp); call->getLocalSDP()->createOffer(account->getActiveCodecs()); @@ -479,8 +479,8 @@ SIPVoIPLink::answer(Call *c) if (pjsip_inv_send_msg(call->inv, tdata) != PJ_SUCCESS) throw VoipLinkException("Could not send invite request answer (200 OK)"); - call->setConnectionState(Call::Connected); - call->setState(Call::Active); + call->setConnectionState(Call::CONNECTED); + call->setState(Call::ACTIVE); } void @@ -550,7 +550,7 @@ void SIPVoIPLink::onhold(const std::string& id) { SIPCall *call = getSIPCall(id); - call->setState(Call::Hold); + call->setState(Call::HOLD); call->getAudioRtp().stop(); Sdp *sdpSession = call->getLocalSDP(); @@ -602,7 +602,7 @@ SIPVoIPLink::offhold(const std::string& id) sdpSession->addAttributeToLocalAudioMedia("sendrecv"); if (SIPSessionReinvite(call) == PJ_SUCCESS) - call->setState(Call::Active); + call->setState(Call::ACTIVE); } void @@ -718,7 +718,7 @@ SIPVoIPLink::refuse(const std::string& id) { SIPCall *call = getSIPCall(id); - if (!call->isIncoming() or call->getConnectionState() == Call::Connected) + if (!call->isIncoming() or call->getConnectionState() == Call::CONNECTED) return; call->getAudioRtp().stop(); @@ -840,8 +840,8 @@ SIPVoIPLink::SIPStartCall(SIPCall *call) if (pjsip_inv_send_msg(call->inv, tdata) != PJ_SUCCESS) return false; - call->setConnectionState(Call::Progressing); - call->setState(Call::Active); + call->setConnectionState(Call::PROGRESSING); + call->setState(Call::ACTIVE); addCall(call); return true; @@ -870,9 +870,9 @@ SIPVoIPLink::SIPCallClosed(SIPCall *call) void SIPVoIPLink::SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata UNUSED) { - if (call->getConnectionState() != Call::Connected) { - call->setConnectionState(Call::Connected); - call->setState(Call::Active); + if (call->getConnectionState() != Call::CONNECTED) { + call->setConnectionState(Call::CONNECTED); + call->setState(Call::ACTIVE); Manager::instance().peerAnsweredCall(call->getCallId()); } } @@ -896,9 +896,9 @@ bool SIPVoIPLink::SIPNewIpToIpCall(const std::string& id, const std::string& to) if (!account) return false; - SIPCall *call = new SIPCall(id, Call::Outgoing, cp_); - call->setCallConfiguration(Call::IPtoIP); - call->initRecFileName(to); + SIPCall *call = new SIPCall(id, Call::OUTGOING, cp_); + call->setIPToIP(true); + call->initRecFilename(to); std::string localAddress(getInterfaceAddrFromName(account->getLocalInterface())); @@ -1263,7 +1263,6 @@ void SIPVoIPLink::findLocalAddressFromUri(const std::string& uri, pjsip_transpor namespace { std::string parseDisplayName(const char * buffer) { - // Parse the display name from "From" header const char* from_header = strstr(buffer, "From: "); if (!from_header) @@ -1329,7 +1328,7 @@ void invite_session_state_changed_cb(pjsip_inv_session *inv, pjsip_event *e) } if (inv->state == PJSIP_INV_STATE_EARLY and e->body.tsx_state.tsx->role == PJSIP_ROLE_UAC) { - call->setConnectionState(Call::Ringing); + call->setConnectionState(Call::RINGING); Manager::instance().peerRingingCall(call->getCallId()); } else if (inv->state == PJSIP_INV_STATE_CONFIRMED) { // After we sent or received a ACK - The connection is established @@ -1768,7 +1767,7 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata) UrlHook::runAction(Manager::instance().hookPreference.getUrlCommand(), header_value); } - SIPCall* call = new SIPCall(Manager::instance().getNewCallID(), Call::Incoming, cp_); + SIPCall* call = new SIPCall(Manager::instance().getNewCallID(), Call::INCOMING, cp_); Manager::instance().associateCallToAccount(call->getCallId(), account_id); // May use the published address as well @@ -1790,10 +1789,10 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata) std::string peerNumber(tmp, length); stripSipUriPrefix(peerNumber); - call->setConnectionState(Call::Progressing); + call->setConnectionState(Call::PROGRESSING); call->setPeerNumber(peerNumber); call->setDisplayName(displayName); - call->initRecFileName(peerNumber); + call->initRecFilename(peerNumber); setCallMediaLocal(call, addrToUse); @@ -1878,7 +1877,7 @@ static pj_bool_t transaction_request_cb(pjsip_rx_data *rdata) PJ_ASSERT_RETURN(pjsip_inv_initial_answer(call->inv, rdata, PJSIP_SC_RINGING, NULL, NULL, &tdata) == PJ_SUCCESS, 1); PJ_ASSERT_RETURN(pjsip_inv_send_msg(call->inv, tdata) == PJ_SUCCESS, 1); - call->setConnectionState(Call::Ringing); + call->setConnectionState(Call::RINGING); Manager::instance().incomingCall(call, account_id); Manager::instance().getAccountLink(account_id)->addCall(call); diff --git a/daemon/test/constants.h b/daemon/test/constants.h index 8194770f66..684f00ebac 100644 --- a/daemon/test/constants.h +++ b/daemon/test/constants.h @@ -31,11 +31,9 @@ #ifndef CONSTANTS_H_ #define CONSTANTS_H_ -#define YES_STR "1" -#define NO_STR "0" #define HISTORY_SAMPLE "history-sample.tpl" #define HISTORY_SAMPLE_SIZE 3 #define CONFIG_SAMPLE "sflphoned-sample.yml" -#define HUGE_HISTORY_LIMIT 999999999 +#define HISTORY_LIMIT 30 #endif /* CONSTANTS_H_ */ diff --git a/daemon/test/history-sample.tpl b/daemon/test/history-sample.tpl index 9cd7a615a4..ec7fcdf0dc 100644 --- a/daemon/test/history-sample.tpl +++ b/daemon/test/history-sample.tpl @@ -1,31 +1,28 @@ -[207464428] accountid= confid= -id=Account:1239059899 -name=Emmanuel Milou -number=136 +callid=Account:1239059899 +peer_name=Emmanuel Milou +peer_number=136 recordfile= timestamp_start=747638685 timestamp_stop=747638765 state=outgoing -[221051947] accountid=empty confid= -id= -name=Savoir-faire Linux -number=514-276-5468 +callid= +peer_name=Savoir-faire Linux +peer_number=514-276-5468 recordfile= timestamp_start=144562000 timestamp_stop=144562458 state=missed -[871962260] accountid= confid= -id=Account:43789459478 -name= -number=5143848557 +callid=Account:43789459478 +peer_name= +peer_number=5143848557 recordfile= timestamp_start=775354456 timestamp_stop=775354987 diff --git a/daemon/test/historytest.cpp b/daemon/test/historytest.cpp index a910e3d8ec..1c6ec3596c 100644 --- a/daemon/test/historytest.cpp +++ b/daemon/test/historytest.cpp @@ -33,7 +33,7 @@ #include <cstdlib> #include "historytest.h" -#include "manager.h" +#include "logger.h" #include "constants.h" #include "validator.h" @@ -57,93 +57,51 @@ void backup() void HistoryTest::setUp() { backup(); - history_ = new HistoryManager(); + history_ = new History; + history_->setPath(HISTORY_SAMPLE); } -void HistoryTest::test_create_history_path() +void HistoryTest::test_create_path() { - DEBUG("-------------------- HistoryTest::test_create_history_path --------------------\n"); + DEBUG("-------------------- HistoryTest::test_set_path --------------------\n"); std::string path(HISTORY_SAMPLE); - - history_->createHistoryPath(path); - CPPUNIT_ASSERT(!history_->isLoaded()); - CPPUNIT_ASSERT(history_->history_path_ == path); + CPPUNIT_ASSERT(history_->path_ == path); } -void HistoryTest::test_load_history_from_file() +void HistoryTest::test_load_from_file() { - DEBUG("-------------------- HistoryTest::test_load_history_from_file --------------------\n"); - - bool res; - Conf::ConfigTree history_list; + DEBUG("-------------------- HistoryTest::test_load_from_file --------------------\n"); - history_->createHistoryPath(HISTORY_SAMPLE); - res = history_->loadHistoryFromFile(history_list); - - CPPUNIT_ASSERT(history_->isLoaded()); + bool res = history_->load(HISTORY_LIMIT); CPPUNIT_ASSERT(res); } -void HistoryTest::test_load_history_items_map() +void HistoryTest::test_load_items() { - DEBUG("-------------------- HistoryTest::test_load_history_items_map --------------------\n"); - - std::string path; - int nb_items; - Conf::ConfigTree history_list; - - history_->setHistoryPath(HISTORY_SAMPLE); - history_->loadHistoryFromFile(history_list); - nb_items = history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT); - CPPUNIT_ASSERT(nb_items == HISTORY_SAMPLE_SIZE); + DEBUG("-------------------- HistoryTest::test_load_items --------------------\n"); + bool res = history_->load(HISTORY_LIMIT); + CPPUNIT_ASSERT(res); CPPUNIT_ASSERT(history_->numberOfItems() == HISTORY_SAMPLE_SIZE); } -void HistoryTest::test_save_history_items_map() -{ - DEBUG("-------------------- HistoryTest::test_save_history_items_map --------------------\n"); - - std::string path; - Conf::ConfigTree history_list, history_list2; - - history_->setHistoryPath(HISTORY_SAMPLE); - history_->loadHistoryFromFile(history_list); - history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT); - history_->saveHistoryItemsVector(history_list2); -} - -void HistoryTest::test_save_history_to_file() +void HistoryTest::test_save_to_file() { - DEBUG("-------------------- HistoryTest::test_save_history_to_file --------------------\n"); - - std::string path; - Conf::ConfigTree history_list, history_list2; - std::map<std::string, std::string> res; - std::map<std::string, std::string>::iterator iter; - - history_->setHistoryPath(HISTORY_SAMPLE); - history_->loadHistoryFromFile(history_list); - history_->loadHistoryItemsMap(history_list, HUGE_HISTORY_LIMIT); - history_->saveHistoryItemsVector(history_list2); - CPPUNIT_ASSERT(history_->saveHistoryToFile(history_list2)); + DEBUG("-------------------- HistoryTest::test_save_to_file --------------------\n"); + CPPUNIT_ASSERT(history_->save()); } -void HistoryTest::test_get_history_serialized() +void HistoryTest::test_get_serialized() { - DEBUG("-------------------- HistoryTest::test_get_history_serialized --------------------\n"); - - std::vector<std::string>::iterator iter; - std::string tmp; - - CPPUNIT_ASSERT(history_->loadHistory(HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE); + DEBUG("-------------------- HistoryTest::test_get_serialized --------------------\n"); + bool res = history_->load(HISTORY_LIMIT); + CPPUNIT_ASSERT(res); CPPUNIT_ASSERT(history_->getSerialized().size() == HISTORY_SAMPLE_SIZE); } void HistoryTest::tearDown() { - // Delete the history object delete history_; restore(); } diff --git a/daemon/test/historytest.h b/daemon/test/historytest.h index 1706bab7d8..19f2b372e8 100644 --- a/daemon/test/historytest.h +++ b/daemon/test/historytest.h @@ -38,15 +38,15 @@ // Application import #include "noncopyable.h" -#include "history/historymanager.h" +#include "history/history.h" /* * @file historyTest.h * @brief Regroups unitary tests related to the phone number cleanup function. */ -#ifndef _HISTORY_TEST_ -#define _HISTORY_TEST_ +#ifndef HISTORY_TEST_ +#define HISTORY_TEST_ class HistoryTest : public CppUnit::TestCase { @@ -54,12 +54,10 @@ class HistoryTest : public CppUnit::TestCase { * Use cppunit library macros to add unit test the factory */ CPPUNIT_TEST_SUITE(HistoryTest); - CPPUNIT_TEST(test_create_history_path); - CPPUNIT_TEST(test_save_history_items_map); - CPPUNIT_TEST(test_load_history_from_file); - CPPUNIT_TEST(test_load_history_items_map); - CPPUNIT_TEST(test_get_history_serialized); - // CPPUNIT_TEST (test_save_history_to_file); + CPPUNIT_TEST(test_create_path); + CPPUNIT_TEST(test_load_from_file); + CPPUNIT_TEST(test_load_items); + CPPUNIT_TEST(test_get_serialized); CPPUNIT_TEST_SUITE_END(); public: @@ -71,21 +69,15 @@ class HistoryTest : public CppUnit::TestCase { */ void setUp(); - void test_create_history_path(); + void test_create_path(); - void test_load_history_from_file(); + void test_load_from_file(); - void test_load_history_items_map(); + void test_load_items(); - void test_save_history_items_map(); + void test_save_to_file(); - void test_save_history_to_file(); - - void test_get_history_serialized(); - - void test_set_serialized_history(); - - void test_set_serialized_history_with_limit(); + void test_get_serialized(); /* * Code factoring - Common resources can be released here. @@ -95,11 +87,11 @@ class HistoryTest : public CppUnit::TestCase { private: NON_COPYABLE(HistoryTest); - HistoryManager *history_; + History *history_; }; /* Register our test module */ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(HistoryTest, "HistoryTest"); CPPUNIT_TEST_SUITE_REGISTRATION(HistoryTest); -#endif +#endif // HISTORY_TEST_ diff --git a/gnome/src/actions.c b/gnome/src/actions.c index 4e33ba443a..17233fba91 100644 --- a/gnome/src/actions.c +++ b/gnome/src/actions.c @@ -97,7 +97,7 @@ sflphone_notify_voice_mail(const gchar* accountID , guint count) * Else, check if it an IP call. if not, popup an error message */ -static gboolean _is_direct_call(callable_obj_t * c) +static gboolean is_direct_call(callable_obj_t * c) { if (g_strcasecmp(c->_accountID, "empty") == 0) { if (!g_str_has_prefix(c->_peer_number, "sip:")) { @@ -142,9 +142,6 @@ void sflphone_quit() { if (calllist_get_size(current_calls_tab) == 0 || main_window_ask_quit()) { - // Save the history - sflphone_save_history(); - dbus_unregister(getpid()); dbus_clean(); account_list_free(); @@ -190,7 +187,7 @@ sflphone_hung_up(callable_obj_t * c) c->_confID = NULL; } - // test wether the widget contain text, if not remove it + // test whether the widget contains text, if not remove it if ((im_window_get_nb_tabs() > 1) && c->_im_widget && !(IM_WIDGET(c->_im_widget)->containText)) im_window_remove_tab(c->_im_widget); else @@ -213,7 +210,7 @@ void sflphone_fill_account_list(void) if (array) { for (gchar **accountID = array; accountID && *accountID; accountID++) { - account_t * a = g_new0(account_t,1); + account_t * a = g_new0(account_t, 1); a->accountID = g_strdup(*accountID); a->credential_information = NULL; account_list_add(a); @@ -558,7 +555,7 @@ sflphone_incoming_call(callable_obj_t * c) calltree_display(current_calls_tab); // Change the status bar if we are dealing with a direct SIP call - if (_is_direct_call(c)) { + if (is_direct_call(c)) { gchar *msg = g_markup_printf_escaped(_("Direct SIP call")); statusbar_pop_message(__MSG_ACCOUNT_DEFAULT); statusbar_push_message(msg , NULL, __MSG_ACCOUNT_DEFAULT); @@ -828,9 +825,9 @@ static int place_registered_call(callable_obj_t * c) void sflphone_place_call(callable_obj_t * c) { - DEBUG("Actions: Placing call with %s @ %s and accountid %s", c->_peer_name, c->_peer_number, c->_accountID); + DEBUG("Actions: Placing call with %s @ %s and accountid %s", c->_display_name, c->_peer_number, c->_accountID); - if (_is_direct_call(c)) { + if (is_direct_call(c)) { gchar *msg = g_markup_printf_escaped(_("Direct SIP call")); statusbar_pop_message(__MSG_ACCOUNT_DEFAULT); statusbar_push_message(msg , NULL, __MSG_ACCOUNT_DEFAULT); @@ -1057,55 +1054,6 @@ void sflphone_fill_history(void) fill_treeview_with_calls(); } -/* Ordered from highest timestamp (most recent) to lowest (oldest) */ -static gint -history_compare_func(gconstpointer a, gconstpointer b) -{ - gconstpointer first_value = g_hash_table_lookup(* (GHashTable **) a, TIMESTAMP_START_KEY); - gconstpointer second_value = g_hash_table_lookup(* (GHashTable **) b, TIMESTAMP_START_KEY); - /* treat NULL values as less than non-NULL values, like g_strcmp0 does */ - if (!first_value) - return -(first_value != second_value); - else if (!second_value) - return first_value != second_value; - - long f = atol(first_value); - long s = atol(second_value); - if (f > s) - return -1; - else if (f == s) - return 0; - else - return 1; -} - -void sflphone_save_history(void) -{ - gint size = calllist_get_size(history_tab); - - GPtrArray *sorted_history = g_ptr_array_new(); - /* For each entry in our call history */ - for (gint i = 0; i < size; ++i) { - QueueElement *current = calllist_get_nth(history_tab, i); - - if (!current) { - WARN("SFLphone: Warning: %dth element is null", i); - break; - } - - if (current->type == HIST_CALL) { - GHashTable *value = create_hashtable_from_history_entry(current->elem.call); - g_ptr_array_add(sorted_history, (gpointer) value); - } - else - ERROR("SFLphone: Error: Unknown type for serialization"); - } - - g_ptr_array_sort(sorted_history, history_compare_func); - dbus_set_history(sorted_history); - g_ptr_array_free(sorted_history, TRUE); -} - void sflphone_srtp_sdes_on(callable_obj_t * c) { diff --git a/gnome/src/actions.h b/gnome/src/actions.h index 203460e499..efb2fe2f93 100644 --- a/gnome/src/actions.h +++ b/gnome/src/actions.h @@ -201,8 +201,6 @@ void status_bar_display_account (); void sflphone_fill_history (void); -void sflphone_save_history (void); - /** * Action called when a new participant is dragged in */ diff --git a/gnome/src/callable_obj.c b/gnome/src/callable_obj.c index 995cbdf80a..d381941927 100644 --- a/gnome/src/callable_obj.c +++ b/gnome/src/callable_obj.c @@ -46,7 +46,7 @@ gint get_state_callstruct(gconstpointer a, gconstpointer b) return c->_state == state ? 0 : 1; } -gchar* call_get_peer_name(const gchar *format) +gchar* call_get_display_name(const gchar *format) { const gchar *end = g_strrstr(format, "<"); return g_strndup(format, end ? end - format : 0); @@ -115,7 +115,7 @@ void call_remove_all_errors(callable_obj_t * call) callable_obj_t *create_new_call(callable_type_t type, call_state_t state, const gchar* const callID, const gchar* const accountID, - const gchar* const peer_name, + const gchar* const display_name, const gchar* const peer_number) { callable_obj_t *obj = g_new0(callable_obj_t, 1); @@ -129,9 +129,9 @@ callable_obj_t *create_new_call(callable_type_t type, call_state_t state, time(&obj->_time_start); time(&obj->_time_stop); - obj->_peer_name = g_strdup(peer_name); + obj->_display_name = g_strdup(display_name); obj->_peer_number = g_strdup(peer_number); - obj->_peer_info = get_peer_info(peer_name, peer_number); + obj->_peer_info = get_peer_info(display_name, peer_number); return obj; } @@ -142,7 +142,7 @@ callable_obj_t *create_new_call_from_details(const gchar *call_id, GHashTable *d const gchar * const accountID = g_hash_table_lookup(details, "ACCOUNTID"); const gchar * const peer_number = g_hash_table_lookup(details, "PEER_NUMBER"); - const gchar * const peer_name = g_hash_table_lookup(details, "DISPLAY_NAME"); + const gchar * const display_name = g_hash_table_lookup(details, "DISPLAY_NAME"); const gchar * const state_str = g_hash_table_lookup(details, "CALL_STATE"); if (g_strcasecmp(state_str, "CURRENT") == 0) @@ -159,7 +159,7 @@ callable_obj_t *create_new_call_from_details(const gchar *call_id, GHashTable *d state = CALL_STATE_FAILURE; gchar *number = call_get_peer_number(peer_number); - callable_obj_t *c = create_new_call(CALL, state, call_id, accountID, peer_name, number); + callable_obj_t *c = create_new_call(CALL, state, call_id, accountID, display_name, number); g_free(number); return c; } @@ -176,29 +176,27 @@ static gconstpointer get_str(GHashTable *entry, gconstpointer key) static const char * const ACCOUNT_ID_KEY = "accountid"; static const char * const CALLID_KEY = "callid"; static const char * const CONFID_KEY = "confid"; -static const char * const PEER_NAME_KEY = "peer_name"; +static const char * const DISPLAY_NAME_KEY = "display_name"; static const char * const PEER_NUMBER_KEY = "peer_number"; static const char * const RECORDING_PATH_KEY = "recordfile"; -static const char * const TIMESTAMP_STOP_KEY = "timestamp_stop"; static const char * const STATE_KEY = "state"; +static const char * const TIMESTAMP_STOP_KEY = "timestamp_stop"; callable_obj_t *create_history_entry_from_hashtable(GHashTable *entry) { gconstpointer callID = get_str(entry, CALLID_KEY); gconstpointer accountID = get_str(entry, ACCOUNT_ID_KEY); - gconstpointer peer_name = get_str(entry, PEER_NAME_KEY); + gconstpointer display_name = get_str(entry, DISPLAY_NAME_KEY); gconstpointer peer_number = get_str(entry, PEER_NUMBER_KEY); - callable_obj_t *new_call = create_new_call(HISTORY_ENTRY, CALL_STATE_DIALING, callID, accountID, peer_name, peer_number); + callable_obj_t *new_call = create_new_call(HISTORY_ENTRY, CALL_STATE_DIALING, callID, accountID, display_name, peer_number); new_call->_history_state = g_strdup(get_str(entry, STATE_KEY)); gconstpointer value = g_hash_table_lookup(entry, TIMESTAMP_START_KEY); new_call->_time_start = value ? atoi(value) : 0; value = g_hash_table_lookup(entry, TIMESTAMP_STOP_KEY); new_call->_time_stop = value ? atoi(value) : 0; - value = g_hash_table_lookup(entry, RECORDING_PATH_KEY); - new_call->_recordfile = g_strdup(value); - value = g_hash_table_lookup(entry, CONFID_KEY); - new_call->_confID = g_strdup(value); - new_call->_historyConfID = g_strdup(value); + new_call->_recordfile = g_strdup(g_hash_table_lookup(entry, RECORDING_PATH_KEY)); + new_call->_confID = g_strdup(g_hash_table_lookup(entry, CONFID_KEY)); + new_call->_historyConfID = g_strdup(new_call->_confID); new_call->_record_is_playing = FALSE; return new_call; @@ -212,7 +210,7 @@ void free_callable_obj_t (callable_obj_t *c) g_free(c->_accountID); g_free(c->_srtp_cipher); g_free(c->_sas); - g_free(c->_peer_name); + g_free(c->_display_name); g_free(c->_peer_number); g_free(c->_trsft_to); g_free(c->_peer_info); @@ -251,21 +249,19 @@ GHashTable* create_hashtable_from_history_entry(callable_obj_t *entry) const gchar *call_id = entry->_callID ? entry->_callID : ""; const gchar *peer_number = entry->_peer_number ? entry->_peer_number : ""; - const gchar *peer_name = (entry->_peer_name && *entry->_peer_name) ? entry->_peer_name : "empty"; + const gchar *display_name = (entry->_display_name && *entry->_display_name) ? entry->_display_name : "empty"; const gchar *account_id = (entry->_accountID && *entry->_accountID) ? entry->_accountID : "empty"; const gchar *conf_id = entry->_historyConfID ? entry->_historyConfID : ""; const gchar *recording_path = entry->_recordfile ? entry->_recordfile : ""; GHashTable *result = g_hash_table_new(NULL, g_str_equal); + add_to_hashtable(result, ACCOUNT_ID_KEY, account_id); add_to_hashtable(result, CALLID_KEY, call_id); add_to_hashtable(result, CONFID_KEY, conf_id); + add_to_hashtable(result, DISPLAY_NAME_KEY, display_name); add_to_hashtable(result, PEER_NUMBER_KEY, peer_number); - add_to_hashtable(result, PEER_NAME_KEY, peer_name); add_to_hashtable(result, RECORDING_PATH_KEY, recording_path); - add_to_hashtable(result, ACCOUNT_ID_KEY, account_id); - add_to_hashtable(result, TIMESTAMP_START_KEY, time_start); - add_to_hashtable(result, TIMESTAMP_STOP_KEY, time_stop); add_to_hashtable(result, STATE_KEY, history_state); /* These values were already allocated dynamically */ g_hash_table_insert(result, g_strdup(TIMESTAMP_START_KEY), time_start); @@ -304,3 +300,8 @@ gchar *get_formatted_start_timestamp(time_t start) strftime(str, sizeof str, fmt, &start_tm); return g_markup_printf_escaped("%s\n", str); } + +gboolean call_was_outgoing(callable_obj_t * obj) +{ + return g_strcmp0(obj->_history_state, OUTGOING_STRING) == 0; +} diff --git a/gnome/src/callable_obj.h b/gnome/src/callable_obj.h index 849ec7783d..b2437962e6 100644 --- a/gnome/src/callable_obj.h +++ b/gnome/src/callable_obj.h @@ -112,7 +112,7 @@ typedef struct { /** * The information about the person we are talking */ - gchar *_peer_name; + gchar *_display_name; gchar *_peer_number; /** @@ -183,7 +183,7 @@ gint get_state_callstruct(gconstpointer, gconstpointer); * @param c The call * @return The full name of the caller or an empty string */ -gchar* call_get_peer_name(const gchar*); +gchar* call_get_display_name(const gchar*); /** * This function parse the callable_obj_t.from field to return the number @@ -202,4 +202,6 @@ gchar* get_formatted_start_timestamp(time_t); gchar* call_get_audio_codec(callable_obj_t *obj); +gboolean call_was_outgoing(callable_obj_t * obj); + #endif diff --git a/gnome/src/config/accountconfigdialog.c b/gnome/src/config/accountconfigdialog.c index 0ff56eace9..ef55ea27cd 100644 --- a/gnome/src/config/accountconfigdialog.c +++ b/gnome/src/config/accountconfigdialog.c @@ -1064,7 +1064,7 @@ static GtkWidget* create_audiocodecs_configuration(account_t *currentAccount) GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); - GtkWidget *box = create_audiocodecs_box(currentAccount); + GtkWidget *box = audiocodecs_box(currentAccount); // Box for the audiocodecs GtkWidget *audiocodecs = gnome_main_section_new(_("Audio")); diff --git a/gnome/src/config/audioconf.c b/gnome/src/config/audioconf.c index 982aa526d3..84d6b42c68 100644 --- a/gnome/src/config/audioconf.c +++ b/gnome/src/config/audioconf.c @@ -1,7 +1,6 @@ /* * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,8 +28,6 @@ * as that of the covered work. */ -#include <gtk/gtk.h> - #include "audioconf.h" #include "utils.h" @@ -55,9 +52,8 @@ static GtkWidget *codecMoveUpButton; static GtkWidget *codecMoveDownButton; static GtkWidget *codecTreeView; // View used instead of store to get access to selection static GtkWidget *pulse; -static GtkWidget *alsabox; // alsa audio plugin/device selection menu -static GtkWidget *pulseaudiobox; // pulseaudio device selection menu -static GtkWidget *audio_conf; +static GtkWidget *alsabox; +static GtkWidget *alsa_conf; // Codec properties ID enum { @@ -69,7 +65,6 @@ enum { }; static void active_is_always_recording(void); -static GtkWidget *device_selection_box_alsa(void); /** * Fills the tree list with supported codecs @@ -105,7 +100,7 @@ static void preferences_dialog_fill_codec_list(account_t *a) /** * Fill store with output audio plugins */ -static void +void preferences_dialog_fill_audio_plugin_list() { gtk_list_store_clear(pluginlist); @@ -126,48 +121,40 @@ preferences_dialog_fill_audio_plugin_list() } } -static void +void preferences_dialog_fill_output_audio_device_list() { - int device_index = 0; - gtk_list_store_clear(outputlist); - DEBUG("FILL OUTPUT DEVICE LIST"); - // Call dbus to retrieve list for (gchar **list = dbus_get_audio_output_device_list(); *list ; list++) { - // int device_index = dbus_get_audio_device_index(*list); + int device_index = dbus_get_audio_device_index(*list); GtkTreeIter iter; gtk_list_store_append(outputlist, &iter); - gtk_list_store_set(outputlist, &iter, 0, *list, 1, device_index++, -1); + gtk_list_store_set(outputlist, &iter, 0, *list, 1, device_index, -1); } } -static void +void preferences_dialog_fill_ringtone_audio_device_list() { - int device_index = 0; - gtk_list_store_clear(ringtonelist); - DEBUG("FILL RINGTONE DEVICE LIST"); - // Call dbus to retreive output device for (gchar **list = dbus_get_audio_output_device_list(); *list; list++) { - // int device_index = dbus_get_audio_device_index(*list); + int device_index = dbus_get_audio_device_index(*list); GtkTreeIter iter; gtk_list_store_append(ringtonelist, &iter); - gtk_list_store_set(ringtonelist, &iter, 0, *list, 1, device_index++, -1); + gtk_list_store_set(ringtonelist, &iter, 0, *list, 1, device_index, -1); } } -static void +void select_active_output_audio_device() { - SelectedAudioLayer selected = get_selected_audio_api(); + gboolean show_alsa = must_show_alsa_conf(); - if(ALSA_LAYER_SELECTED != selected) + if(!show_alsa) return; // Select active output device on server @@ -202,12 +189,10 @@ select_active_output_audio_device() /** * Select active output audio device */ -static void +void select_active_ringtone_audio_device() { - SelectedAudioLayer selected = get_selected_audio_api(); - - if (ALSA_LAYER_SELECTED == selected) { + if (must_show_alsa_conf()) { // Select active ringtone device on server gchar **devices = dbus_get_current_audio_devices_index(); int currentDeviceIndex = atoi(devices[2]); @@ -235,34 +220,28 @@ select_active_ringtone_audio_device() } } -static void +void preferences_dialog_fill_input_audio_device_list() { - int device_index = 0; - gtk_list_store_clear(inputlist); - DEBUG("FILL INPUT DEVICE LIST"); - // Call dbus to retreive list gchar **list = dbus_get_audio_input_device_list(); // For each device name included in list for (; *list; list++) { - // int device_index = dbus_get_audio_device_index(*list); + int device_index = dbus_get_audio_device_index(*list); GtkTreeIter iter; gtk_list_store_append(inputlist, &iter); - gtk_list_store_set(inputlist, &iter, 0, *list, 1, device_index++, -1); + gtk_list_store_set(inputlist, &iter, 0, *list, 1, device_index, -1); } } -static void +void select_active_input_audio_device() { - SelectedAudioLayer selected = get_selected_audio_api(); - - if (ALSA_LAYER_SELECTED == selected) { + if (must_show_alsa_conf()) { // Select active input device on server gchar **devices = dbus_get_current_audio_devices_index(); int currentDeviceIndex = atoi(devices[1]); @@ -319,7 +298,7 @@ select_output_audio_plugin(GtkComboBox* widget, gpointer data UNUSED) } } -static void +void select_active_output_audio_plugin() { // Select active output device on server @@ -537,7 +516,7 @@ static void codec_move_down(GtkButton *button UNUSED, gpointer data) codec_move(FALSE, data); } -GtkWidget* create_audiocodecs_box(account_t *a) +GtkWidget* audiocodecs_box(account_t *a) { GtkWidget *audiocodecs_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); gtk_container_set_border_width(GTK_CONTAINER(audiocodecs_hbox), 10); @@ -609,25 +588,19 @@ GtkWidget* create_audiocodecs_box(account_t *a) } void -switch_audio_manager(void) +select_audio_manager(void) { - SelectedAudioLayer selected = get_selected_audio_api(); - - if (PULSEAUDIO_LAYER_SELECTED == selected) { - dbus_set_audio_manager(ALSA_API_STR); - gtk_widget_set_sensitive(audio_conf, TRUE); - gtk_widget_hide(pulseaudiobox); - gtk_container_remove(GTK_CONTAINER(audio_conf), pulseaudiobox); - gtk_container_add(GTK_CONTAINER(audio_conf), alsabox); - gtk_widget_show(alsabox); + if (!must_show_alsa_conf() && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pulse))) { + dbus_set_audio_manager(ALSA_API_STR); + alsabox = alsa_box(); + gtk_container_add(GTK_CONTAINER(alsa_conf), alsabox); + gtk_widget_show(alsa_conf); + gtk_widget_set_sensitive(alsa_conf, TRUE); gtk_action_set_sensitive(volumeToggle_, TRUE); - } else if (ALSA_LAYER_SELECTED == selected) { + } else if (must_show_alsa_conf() && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pulse))) { dbus_set_audio_manager(PULSEAUDIO_API_STR); - gtk_widget_set_sensitive(audio_conf, TRUE); - gtk_widget_hide(alsabox); - gtk_container_remove(GTK_CONTAINER(audio_conf), alsabox); - gtk_container_add(GTK_CONTAINER(audio_conf), pulseaudiobox); - gtk_widget_show(pulseaudiobox); + gtk_container_remove(GTK_CONTAINER(alsa_conf) , alsabox); + gtk_widget_hide(alsa_conf); if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(volumeToggle_))) { main_window_volume_controls(FALSE); @@ -637,11 +610,6 @@ switch_audio_manager(void) gtk_action_set_sensitive(volumeToggle_, FALSE); } - - preferences_dialog_fill_output_audio_device_list(); - preferences_dialog_fill_input_audio_device_list(); - preferences_dialog_fill_ringtone_audio_device_list(); - } void @@ -688,7 +656,7 @@ active_is_always_recording(void) dbus_set_is_always_recording(!dbus_get_is_always_recording()); } -GtkWidget* device_selection_box_alsa() +GtkWidget* alsa_box() { GtkWidget *alsa_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); gtk_widget_show(alsa_hbox); @@ -767,7 +735,7 @@ GtkWidget* device_selection_box_alsa() gtk_table_attach(GTK_TABLE(table), input, 2, 3, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); gtk_widget_show(input); - DEBUG("Audio: Configuration ringtone"); + DEBUG("Audio: Configuration rintgtone"); label = gtk_label_new(_("Ringtone")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 1, 2, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); @@ -794,92 +762,6 @@ GtkWidget* device_selection_box_alsa() return alsa_hbox; } -GtkWidget *device_selection_box_pulseaudio() -{ - GtkWidget *pulseaudio_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); - gtk_widget_show(pulseaudio_hbox); - - GtkWidget *table = gtk_table_new(6, 3, FALSE); - gtk_table_set_col_spacing(GTK_TABLE(table), 0, 40); - gtk_box_pack_start(GTK_BOX(pulseaudio_hbox), table, TRUE, TRUE, 1); - gtk_widget_show(table); - - // Device : Output Device - // Create title label - DEBUG("Audio: Configuration output"); - GtkWidget *label = gtk_label_new(_("Output")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(label); - // Set choices of output devices - outputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); - preferences_dialog_fill_output_audio_device_list(); - output = gtk_combo_box_new_with_model(GTK_TREE_MODEL(outputlist)); - select_active_output_audio_device(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), output); - g_signal_connect(G_OBJECT(output), "changed", G_CALLBACK(select_audio_output_device), output); - - // Set rendering - GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(output), renderer, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(output), renderer, "text", 0, NULL); - gtk_table_attach(GTK_TABLE(table), output, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(output); - - // Device : Input device - // Create title label - DEBUG("Audio: Configuration input"); - label = gtk_label_new(_("Input")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(label); - - // Set choice of ouput devices - inputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); - preferences_dialog_fill_input_audio_device_list(); - input = gtk_combo_box_new_with_model(GTK_TREE_MODEL(inputlist)); - select_active_input_audio_device(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), input); - g_signal_connect(G_OBJECT(input), "changed", G_CALLBACK(select_audio_input_device), input); - - // Set rendering - renderer = gtk_cell_renderer_text_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(input), renderer, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(input), renderer, "text", 0, NULL); - gtk_table_attach(GTK_TABLE(table), input, 2, 3, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(input); - - // Device : Ringtone device - // Create title label - DEBUG("Audio: Configuration ringtone"); - label = gtk_label_new(_("Ringtone")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(label); - // set choices of ringtone devices - ringtonelist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); - preferences_dialog_fill_ringtone_audio_device_list(); - ringtone = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ringtonelist)); - select_active_ringtone_audio_device(); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), output); - g_signal_connect(G_OBJECT(ringtone), "changed", G_CALLBACK(select_audio_ringtone_device), output); - - // Set rendering - renderer = gtk_cell_renderer_text_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(ringtone), renderer, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(ringtone), renderer, "text", 0, NULL); - gtk_table_attach(GTK_TABLE(table), ringtone, 2, 3, 5, 6, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0); - gtk_widget_show(ringtone); - - gtk_widget_show_all(pulseaudio_hbox); - - // Update the combo box - update_device_widget(dbus_get_current_audio_output_plugin()); - return pulseaudio_hbox; -} - - - static void record_path_changed(GtkFileChooser *chooser , GtkLabel *label UNUSED) { gchar* path; @@ -890,55 +772,42 @@ static void record_path_changed(GtkFileChooser *chooser , GtkLabel *label UNUSED GtkWidget* create_audio_configuration() { /* Main widget */ - GtkWidget *frame = NULL; - GtkWidget *table = NULL; - GtkWidget *audio_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_container_set_border_width(GTK_CONTAINER(audio_vbox), 10); + GtkWidget *frame; + GtkWidget *table; gnome_main_section_new_with_table(_("Sound Manager"), &frame, &table, 1, 4); gtk_box_pack_start(GTK_BOX(audio_vbox), frame, FALSE, FALSE, 0); - SelectedAudioLayer selected = get_selected_audio_api(); + gchar *audio_manager = dbus_get_audio_manager(); + gboolean pulse_audio = FALSE; + + if (g_strcmp0(audio_manager, PULSEAUDIO_API_STR) == 0) + pulse_audio = TRUE; + + g_free(audio_manager); pulse = gtk_radio_button_new_with_mnemonic(NULL , _("_Pulseaudio")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pulse), (selected == PULSEAUDIO_LAYER_SELECTED) ? TRUE : FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pulse), pulse_audio); gtk_table_attach(GTK_TABLE(table), pulse, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); GtkWidget *alsa = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(pulse), _("_ALSA")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alsa), (selected == ALSA_LAYER_SELECTED) ? TRUE : FALSE); - g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(switch_audio_manager), NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alsa), !pulse_audio); + g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(select_audio_manager), NULL); gtk_table_attach(GTK_TABLE(table), alsa, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - // Box for audio device selection - audio_conf = gnome_main_section_new(_("Audio Device Selection")); - gtk_box_pack_start(GTK_BOX(audio_vbox), audio_conf, FALSE, FALSE, 0); - gtk_widget_show(audio_conf); - - // Alsa specific device configuration - alsabox = device_selection_box_alsa(); - g_object_ref(G_OBJECT(alsabox)); - - // Pulseaudio specific device configuration - pulseaudiobox = device_selection_box_pulseaudio(); - g_object_ref(G_OBJECT(pulseaudiobox)); - - switch (selected) { - case ALSA_LAYER_SELECTED: - gtk_container_add(GTK_CONTAINER(audio_conf), alsabox); - gtk_widget_hide(pulseaudiobox); - gtk_widget_show(alsabox); - break; - case PULSEAUDIO_LAYER_SELECTED: - gtk_container_add(GTK_CONTAINER(audio_conf), pulseaudiobox); - gtk_widget_hide(alsabox); - gtk_widget_show(pulseaudiobox); - break; - case UNKNOWN_AUDIO_LAYER: - default: - DEBUG("Error: Unknown audio layer"); - break; - }; + // Box for the ALSA configuration + alsa_conf = gnome_main_section_new(_("ALSA settings")); + gtk_box_pack_start(GTK_BOX(audio_vbox), alsa_conf, FALSE, FALSE, 0); + gtk_widget_show(alsa_conf); + + if (must_show_alsa_conf()) { + // Box for the ALSA configuration + alsabox = alsa_box(); + gtk_container_add(GTK_CONTAINER(alsa_conf) , alsabox); + gtk_widget_hide(alsa_conf); + } gnome_main_section_new_with_table(_("Recordings"), &frame, &table, 2, 3); gtk_box_pack_start(GTK_BOX(audio_vbox), frame, FALSE, FALSE, 0); @@ -999,27 +868,19 @@ GtkWidget* create_audio_configuration() gtk_widget_show_all(audio_vbox); + if (!pulse_audio) + gtk_widget_show(alsa_conf); + else + gtk_widget_hide(alsa_conf); + return audio_vbox; } /** Show/Hide the alsa configuration panel */ -SelectedAudioLayer get_selected_audio_api() +gboolean must_show_alsa_conf() { - SelectedAudioLayer selected = UNKNOWN_AUDIO_LAYER; gchar *api = dbus_get_audio_manager(); - - if(g_strcmp0(api, ALSA_API_STR) == 0) { - selected = ALSA_LAYER_SELECTED; - } - else if (g_strcmp0(api, PULSEAUDIO_API_STR) == 0) { - selected = PULSEAUDIO_LAYER_SELECTED; - } - else { - DEBUG("ERROR UNKNOWN SELECTION"); - } - - + int ret = g_strcmp0(api, ALSA_API_STR); g_free(api); - - return selected; + return ret == 0; } diff --git a/gnome/src/config/audioconf.h b/gnome/src/config/audioconf.h index 4d53f053ef..6f0b399f73 100644 --- a/gnome/src/config/audioconf.h +++ b/gnome/src/config/audioconf.h @@ -33,28 +33,15 @@ #include "actions.h" -/** - * Selected audio layer enumeration type - */ -typedef enum SelectedAudioLayer_ { - ALSA_LAYER_SELECTED, - PULSEAUDIO_LAYER_SELECTED, - UNKNOWN_AUDIO_LAYER, -} SelectedAudioLayer; - -/** - * Return the full audio configuration panel - */ GtkWidget* create_audio_configuration (void); -/** - * Returns the audio codec activation/deactivation & preference ordering box - */ -GtkWidget* create_audiocodecs_box(account_t *); +GtkWidget* api_box(); +GtkWidget* alsa_box(); +GtkWidget* pulse_box(); +GtkWidget* audiocodecs_box(); +GtkWidget* ringtone_box(); -/** - * Returns the type of the selected api (i.e. ALSA or PULSEAUDIO) - */ -SelectedAudioLayer get_selected_audio_api(void); +gboolean get_api(); +gboolean must_show_alsa_conf (); #endif // __AUDIO_CONF_H diff --git a/gnome/src/config/preferencesdialog.c b/gnome/src/config/preferencesdialog.c index efaf7a98f7..3bd5057913 100644 --- a/gnome/src/config/preferencesdialog.c +++ b/gnome/src/config/preferencesdialog.c @@ -47,10 +47,10 @@ #include "addressbook-config.h" #include "shortcuts-config.h" #include "hooks-config.h" +#include "audioconf.h" #include "uimanager.h" #include "unused.h" #include "mainwindow.h" -#include "audioconf.h" /** * Local variables diff --git a/gnome/src/config/preferencesdialog.h b/gnome/src/config/preferencesdialog.h index 523241e723..41b92082cb 100644 --- a/gnome/src/config/preferencesdialog.h +++ b/gnome/src/config/preferencesdialog.h @@ -38,6 +38,42 @@ * @brief The Preferences window. */ +/** + * Fill the input audio plugin list widget with the data the server send + * Currently not used + */ +void preferences_dialog_fill_input_audio_plugin_list(); + +/** + * Fill the output audio plugin list widget with the data the server send + */ +void preferences_dialog_fill_output_audio_plugin_list(); + +/** + * Fill the output audio device list widget with the data the server send + */ +void preferences_dialog_fill_output_audio_device_list(); + +/** + * Select an output audio device + */ +void select_active_output_audio_device(); + +/** + * Fill the input audio device list widget with the data the server send + */ +void preferences_dialog_fill_input_audio_device_list(); + +/** + * Select an input audio device + */ +void select_active_input_audio_device(); + +/** + * Select an output audio plugin + */ +void select_active_output_audio_plugin(); + /** * Update the combo box state. * If the default plugin has been selected, the audio devices have to been unsensitive diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c index 3ccf76705a..33f76cacbd 100644 --- a/gnome/src/contacts/calltree.c +++ b/gnome/src/contacts/calltree.c @@ -33,7 +33,6 @@ #include "calllist.h" #include "calltree.h" #include <stdlib.h> -#include <glib/gprintf.h> #include "eel-gconf-extensions.h" #include "unused.h" @@ -211,7 +210,7 @@ row_activated(GtkTreeView *tree_view UNUSED, } } else { // If history or contact: double click action places a new call - callable_obj_t* new_call = create_new_call(CALL, CALL_STATE_DIALING, "", selectedCall->_accountID, selectedCall->_peer_name, selectedCall->_peer_number); + callable_obj_t* new_call = create_new_call(CALL, CALL_STATE_DIALING, "", selectedCall->_accountID, selectedCall->_display_name, selectedCall->_peer_number); calllist_add_call(current_calls_tab, new_call); calltree_add_call(current_calls_tab, new_call, NULL); @@ -332,6 +331,16 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS return TRUE; } +static gchar *clean_display_number(gchar *name) +{ + const gchar SIP_PREFIX[] = "<sip:"; + const gchar SIPS_PREFIX[] = "<sips:"; + if (g_str_has_prefix(name, SIP_PREFIX)) + name += (sizeof(SIP_PREFIX) - 1); + else if (g_str_has_prefix(name, SIPS_PREFIX)) + name += (sizeof(SIPS_PREFIX) - 1); + return name; +} static gchar * calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, const gchar *const audio_codec) @@ -339,7 +348,7 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, con gchar display_number[strlen(c->_peer_number) + 1]; strcpy(display_number, c->_peer_number); - if (c->_type != CALL || g_strcmp0(c->_history_state, OUTGOING_STRING)) { + if (c->_type != CALL || !call_was_outgoing(c)) { // Get the hostname for this call (NULL if not existent) gchar * hostname = g_strrstr(c->_peer_number, "@"); @@ -349,13 +358,14 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, con } // Different display depending on type - const gchar *name, *details = NULL; + gchar *name, *details = NULL; - if (*c->_peer_name) { - name = c->_peer_name; + if (*c->_display_name) { + name = c->_display_name; details = display_number; } else { name = display_number; + name = clean_display_number(name); details = ""; } @@ -712,7 +722,7 @@ calltree_update_call_recursive(calltab_t* tab, callable_obj_t * c, GtkTreeIter * g_free(duration); gchar *old_description = description; - description = g_strconcat(old_description , full_duration, NULL); + description = g_strconcat(old_description, full_duration, NULL); g_free(full_duration); g_free(old_description); } diff --git a/gnome/src/dbus/callmanager-introspec.xml b/gnome/src/dbus/callmanager-introspec.xml index 46cec40068..5c38193ffd 100644 --- a/gnome/src/dbus/callmanager-introspec.xml +++ b/gnome/src/dbus/callmanager-introspec.xml @@ -1,825 +1,781 @@ <?xml version="1.0" encoding="UTF-8" ?> <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.CallManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>The CallManager interface is used to manage - any call and conference related actions.</p> - <p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p> - </tp:docstring> - <method name="placeCall" tp:name-for-bindings="placeCall"> - <tp:docstring> - <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface. - </tp:docstring> - </arg> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> - <tp:added version="0.9.8"/> - <tp:docstring> - Place a call with the fist registered account, regarding to the account list order. - <tp:rationale> - Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) - </tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="refuse" tp:name-for-bindings="refuse"> - <tp:docstring> - Refuse an incoming call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - - </method> - - <method name="accept" tp:name-for-bindings="accept"> - <tp:docstring> - Answer an incoming call. Automatically put the current call on state HOLD. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUp" tp:name-for-bindings="hangUp"> - <tp:docstring> - Hangup a call in state "CURRENT" or "HOLD". - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hangup a conference, and every call participating to the conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The unique conference ID. - </tp:docstring> - </arg> - </method> - - <method name="hold" tp:name-for-bindings="hold"> - <tp:docstring> - Place a call on hold. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="unhold" tp:name-for-bindings="unhold"> - <tp:docstring> - Hold off a call, and place this call on state CURRENT. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="transfer" tp:name-for-bindings="transfer"> - <tp:docstring> - Transfer a call to given phone number. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - The phone number to transfer the call to. - </tp:docstring> - </arg> - </method> - - <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> - <tp:docstring> - Perform an attended transfer on two calls - </tp:docstring> - <arg type="s" name="transferID" direction="in"> - <tp:docstring> - The callID of the call to be transfered. - </tp:docstring> - </arg> - <arg type="s" name="targetID" direction="in"> - <tp:docstring> - The callID of the target call. - </tp:docstring> - </arg> - </method> - - <method name="playDTMF" tp:name-for-bindings="playDTMF"> - <tp:docstring> - Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server. - </tp:docstring> - <arg type="s" name="key" direction="in"> - <tp:docstring> - Unicode charter for pressed key - </tp:docstring> - </arg> - </method> - - <method name="startTone" tp:name-for-bindings="startTone"> - <tp:docstring> - Start audio stream and play tone.. - </tp:docstring> - <arg type="i" name="start" direction="in"/> - <arg type="i" name="type" direction="in"/> - </method> - - <method name="setVolume" tp:name-for-bindings="setVolume"> - <tp:docstring> - <p>Sets the volume using a linear scale [0,100].</p> - <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="in"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="getVolume" tp:name-for-bindings="getVolume"> - <tp:docstring> - <p>Return the volume value of the given device on a linear scale [0,100].</p> - <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="out"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join two participants together to create a 3-way conference including the current client.</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="sel_callID" direction="in"/> - <arg type="s" name="drag_callID" direction="in"/> - </method> + <interface name="org.sflphone.SFLphone.CallManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>The CallManager interface is used to manage call and conference related actions.</p> + <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. + SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p> + </tp:docstring> + <method name="placeCall" tp:name-for-bindings="placeCall"> + <tp:docstring> + <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface. + </tp:docstring> + </arg> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> + <tp:added version="0.9.8"/> + <tp:docstring> + Place a call with the first registered account in the account list. + <tp:rationale> + Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) + </tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="refuse" tp:name-for-bindings="refuse"> + <tp:docstring> + Refuse an incoming call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + + </method> + + <method name="accept" tp:name-for-bindings="accept"> + <tp:docstring> + Answer an incoming call. Automatically puts the current call on HOLD. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUp" tp:name-for-bindings="hangUp"> + <tp:docstring> + Hangup a call in state "CURRENT" or "HOLD". + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hangup a conference, and every call participating to the conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The unique conference ID. + </tp:docstring> + </arg> + </method> + + <method name="hold" tp:name-for-bindings="hold"> + <tp:docstring> + Place a call on hold. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="unhold" tp:name-for-bindings="unhold"> + <tp:docstring> + Take a call off hold, and place this call in state CURRENT. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="transfer" tp:name-for-bindings="transfer"> + <tp:docstring> + Transfer a call to the given phone number. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + The phone number to which the call will be transferred. + </tp:docstring> + </arg> + </method> + + <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> + <tp:docstring> + Perform an attended transfer on two calls. + </tp:docstring> + <arg type="s" name="transferID" direction="in"> + <tp:docstring> + The callID of the call to be transfered. + </tp:docstring> + </arg> + <arg type="s" name="targetID" direction="in"> + <tp:docstring> + The callID of the target call. + </tp:docstring> + </arg> + </method> + + <method name="playDTMF" tp:name-for-bindings="playDTMF"> + <tp:docstring> + Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server. + </tp:docstring> + <arg type="s" name="key" direction="in"> + <tp:docstring> + Unicode character for pressed key. + </tp:docstring> + </arg> + </method> + + <method name="startTone" tp:name-for-bindings="startTone"> + <tp:docstring> + Start audio stream and play tone. + </tp:docstring> + <arg type="i" name="start" direction="in"/> + <arg type="i" name="type" direction="in"/> + </method> + + <method name="setVolume" tp:name-for-bindings="setVolume"> + <tp:docstring> + <p>Sets the volume using a linear scale [0,100].</p> + <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="in"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="getVolume" tp:name-for-bindings="getVolume"> + <tp:docstring> + <p>Return the volume value of the given device on a linear scale [0,100].</p> + <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="out"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join two participants together to create a 3-way conference including the current client.</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="sel_callID" direction="in"/> + <arg type="s" name="drag_callID" direction="in"/> + </method> <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList"> - <tp:added version="0.9.14"/> - <tp:docstring> - <p>Create a conference from a list of participant</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="as" name="participants" direction="in"/> - </method> - - <method name="addParticipant" tp:name-for-bindings="addParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join a new particiant to an existing conference.</p> - <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to add to the conference - </tp:docstring> - </arg> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p> - <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p> - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID - </tp:docstring> - </arg> - </method> - - <method name="joinConference" tp:name-for-bindings="joinConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Join two conferences together. - </tp:docstring> - <arg type="s" name="sel_confID" direction="in"/> - <arg type="s" name="drag_confID" direction="in"/> - </method> - - <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a hashtable containing conference details. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The conference ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out"> - <tp:docstring> - A map containing the ID of the conferences - and their states: - <ul> - <li>ACTIVE_ATTACHED</li> - <li>ACTIVE_DETACHED</li> - <li>HOLD</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a list containing all active - conferences. - <tp:rationale>To update client status, one should - use <tp:member-ref>getParticipantList</tp:member-ref> - with provided conference IDs.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of conferences. - </tp:docstring> - </arg> - </method> - - <method name="setRecording" tp:name-for-bindings="setRecording"> - <tp:docstring> - Start recording a call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to record. - </tp:docstring> - </arg> - </method> - - <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> - <tp:docstring> - Tells whether or not a call is being recorded. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="b" name="isRecording" direction="out"> - <tp:docstring> - Returns true is the call is being recorded. False otherwise. - </tp:docstring> - </arg> - </method> - - <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> - <tp:docstring> - Once after starting recording for the first time, this signal is emited to - provide the recorded file path to client application. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="filepath"/> - </signal> - - <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> - <tp:docstring/> - <arg type="s" name="filepath" /> - </signal> - - - <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> - <tp:docstring> - Get all the details about a specific call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>A map containing the call details: </p> - <ul> - <li>ACCOUNTID</li> - <li>PEER_NUMBER</li> - <li>PEER_NAME</li> - <li>DISPLAY_NAME</li> - <li>CALL_STATE</li> - <li>CALL_TYPE</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getCallList" tp:name-for-bindings="getCallList"> - <tp:docstring> - Get the list of active calls. - <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of call IDs. - </tp:docstring> - </arg> - </method> - - <method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="codecName" direction="out"/> - </method> - - <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> - <tp:docstring> - Send a text message to the specified call - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="message" direction="in"/> - </method> - - <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> - <tp:docstring> - <p>Notify that a cell have been created.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when call have been created by the daemon itself.</p> - <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the calle. Clients must notify teh right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="to"> - <tp:docstring> - The sip uri this call is trying to reach - </tp:docstring> - </arg> - </signal> - - <signal name="incomingCall" tp:name-for-bindings="incomingCall"> - <tp:docstring> - <p>Notify an incoming call.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when we receive a call from a remote peer</p> - <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the callee. Clients must notify the right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="from"> - <tp:docstring> - The caller phone number. - </tp:docstring> - </arg> - </signal> - - <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> - <tp:docstring> - Notify clients that a new text message has been received. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="from" /> - <arg type="s" name="message" /> - </signal> - - <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> - <tp:docstring> - <p>Notify of a change in a call state.</p> - <p>The client must subscribe to this signal.</p> - </tp:docstring> - <arg type="s" name="callID"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="s" name="state" > - <tp:docstring> - The acceptable states are: - <ul> - <li>INCOMING: Initial state of incoming calls</li> - <li>RINGING: Initial state of received outgoing call</li> - <li>CURRENT: The normal active state of an answered call</li> - <li>HUNGUP: Notify that the call has been hungup by peer</li> - <li>BUSY</li> - <li>FAILURE: Error when processing a call</li> - <li>HOLD</li> - <li>UNHOLD_CURRENT</li> - <li>UNHOLD_RECORD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> - <tp:added version="0.9.7"/> - <tp:docstring> - Notify of a change in the conferences state - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - The acceptable states are: - <ul> - <li>ACTIVE_ATTACHED: SFLphone user is - participating to this conference</li> - <li>ACTIVE_DETACHED: This situation can - occur if a call is received while - SFLphone user is participating to a - conference. In this case, one can leave - the conference by answering the - call. Other participants may continue - conferencing normally.</li> - <li>HOLD: Each call in this conference - is on state HOLD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Get the call IDs of every participant to a given conference. The client should keep and update the list of participant. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of the call IDs. - </tp:docstring> - </arg> - </method> - - <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - A new conference ID. - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </signal> - - <method name="holdConference" tp:name-for-bindings="holdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold on every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="unholdConference" tp:name-for-bindings="unholdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold off every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="filepath" direction="in"/> - <arg type="b" name="result" direction="out"/> - </method> - - <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring/> - <arg type="s" name="filepath" direction="in"/> - </method> - - <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> - <tp:docstring> - <p>Call state changed, SFLphone received a notification - from registrar concerning this call.</p> - </tp:docstring> - <arg type="s" name="callID" /> - <tp:docstring> - The call ID - </tp:docstring> - <arg type="s" name="state" /> - <tp:docstring> - Description string - </tp:docstring> - <arg type="i" name="code" /> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </signal> - - <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> - <tp:docstring> - <p>Account state changed, SFLphone received a notification - from registrar.</p> - </tp:docstring> - <arg type="s" name="accountID" > - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - Description string - </tp:docstring> - </arg> - <arg type="i" name="code"> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </arg> - </signal> - - <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> - <tp:docstring> - Notify the clients of the voicemail number for a specific account, if applicable. - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID. - </tp:docstring> - </arg> - <arg type="i" name="count"> - <tp:docstring> - The number of waiting messages. - </tp:docstring> - </arg> - </signal> - - <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> - <tp:docstring> - <p>Notify clients of a volume level - change.</p> - <p>This signal occurs only if ALSA is - enabled since Pulseaudio streams are - managed externally. </p> - </tp:docstring> - <arg type="s" name="device"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value"> - <tp:docstring> - The new volume value - </tp:docstring> - </arg> - </signal> - - <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> - <tp:docstring> - <p>Transfer has been successfully - processed. Client should remove transfered - call from call list as it is no longer - accessible in SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="transferFailed" tp:name-for-bindings="transferFailed"> - <tp:docstring> - <p>Transfer operation failed. Corespondin - call is no longer accessible in - SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Signal sent on SDES session success. Media transmission is encripted - for this call only. It does not apply for a - conference.</p> - <p>A conference can be considered to be secured if and only if each - participant is secured.</p> - </tp:docstring> - <arg type="s" name="callID"/> - </signal> - - <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Sinal sent to notify that SDES session - failed.</p> - <p>Media transmission is not encrypted.</p> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <!-- ZRTP Methods and Signals --> - <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="cipher" /> - </signal> - - <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="reason" /> - <arg type="s" name="severity" /> - </signal> - - <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="showSAS" tp:name-for-bindings="showSAS"> - <tp:added version="0.9.7"/> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="sas" /> - <arg type="b" name="verified"/> - </signal> - - <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="accepted" direction="in"/> - </method> - - <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="yesNo" direction="in"/> - </method> - - </interface> + <tp:added version="0.9.14"/> + <tp:docstring> + <p>Create a conference from a list of participants</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="as" name="participants" direction="in"/> + </method> + + <method name="addParticipant" tp:name-for-bindings="addParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join a new particiant to an existing conference.</p> + <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to add to the conference + </tp:docstring> + </arg> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p> + <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p> + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID + </tp:docstring> + </arg> + </method> + + <method name="joinConference" tp:name-for-bindings="joinConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Join two conferences together. + </tp:docstring> + <arg type="s" name="sel_confID" direction="in"/> + <arg type="s" name="drag_confID" direction="in"/> + </method> + + <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a hashtable containing conference details. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The conference ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out"> + <tp:docstring> + A map containing the ID of the conferences + and their states: + <ul> + <li>ACTIVE_ATTACHED</li> + <li>ACTIVE_DETACHED</li> + <li>HOLD</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a list containing all active + conferences. + <tp:rationale>To update client status, one should + use <tp:member-ref>getParticipantList</tp:member-ref> + with provided conference IDs.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of conferences. + </tp:docstring> + </arg> + </method> + + <method name="setRecording" tp:name-for-bindings="setRecording"> + <tp:docstring> + Start recording a call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to record. + </tp:docstring> + </arg> + </method> + + <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> + <tp:docstring> + Tells whether or not a call is being recorded. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="b" name="isRecording" direction="out"> + <tp:docstring> + Returns true is the call is being recorded. False otherwise. + </tp:docstring> + </arg> + </method> + + <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> + <tp:docstring> + Once after starting recording for the first time, this signal is emited to + provide the recorded file path to client application. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="filepath"/> + </signal> + + <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> + <tp:docstring/> + <arg type="s" name="filepath" /> + </signal> + + + <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> + <tp:docstring> + Get all the details about a specific call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>A map containing the call details: </p> + <ul> + <li>ACCOUNTID</li> + <li>PEER_NUMBER</li> + <li>PEER_NAME</li> + <li>DISPLAY_NAME</li> + <li>CALL_STATE</li> + <li>CALL_TYPE</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getCallList" tp:name-for-bindings="getCallList"> + <tp:docstring> + Get the list of active calls. + <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of call IDs. + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="codecName" direction="out"/> + </method> + + <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> + <tp:docstring> + Send a text message to the specified call + </tp:docstring> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="message" direction="in"/> + </method> + + <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> + <tp:docstring> + <p>Notify that a call has been created.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other actions for + this call. This signal is emitted when call haves been created by the daemon itself.</p> + <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the call. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="to"> + <tp:docstring> + The SIP URI this call is trying to reach. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingCall" tp:name-for-bindings="incomingCall"> + <tp:docstring> + <p>Notify an incoming call.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other action for + this call. This signal is emitted when we receive a call from a remote peer</p> + <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the callee. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="from"> + <tp:docstring> + The caller phone number. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> + <tp:docstring> + Notify clients that a new text message has been received. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="from" /> + <arg type="s" name="message" /> + </signal> + + <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> + <tp:docstring> + <p>Notify of a change in a call state.</p> + <p>The client must subscribe to this signal.</p> + </tp:docstring> + <arg type="s" name="callID"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="s" name="state" > + <tp:docstring> + The acceptable states are: + <ul> + <li>INCOMING: Initial state of incoming calls</li> + <li>RINGING: Initial state of received outgoing call</li> + <li>CURRENT: The normal active state of an answered call</li> + <li>HUNGUP: Notify that the call has been hungup by peer</li> + <li>BUSY</li> + <li>FAILURE: Error when processing a call</li> + <li>HOLD</li> + <li>UNHOLD_CURRENT</li> + <li>UNHOLD_RECORD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> + <tp:added version="0.9.7"/> + <tp:docstring> + Notify of a change in the conferences state + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + The acceptable states are: + <ul> + <li>ACTIVE_ATTACHED: SFLphone user is + participating to this conference</li> + <li>ACTIVE_DETACHED: This situation can + occur if a call is received while + SFLphone user is participating to a + conference. In this case, one can leave + the conference by answering the + call. Other participants may continue + conferencing normally.</li> + <li>HOLD: Each call in this conference + is on state HOLD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Get the call IDs of every participant to a given conference. The client should keep and update the list of participants. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of the call IDs. + </tp:docstring> + </arg> + </method> + + <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + A new conference ID. + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </signal> + + <method name="holdConference" tp:name-for-bindings="holdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold every call which is participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="unholdConference" tp:name-for-bindings="unholdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold off every call participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <arg type="s" name="filepath" direction="in"/> + <arg type="b" name="result" direction="out"/> + </method> + + <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <tp:docstring/> + <arg type="s" name="filepath" direction="in"/> + </method> + + <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> + <tp:docstring> + <p>Call state changed, SFLphone received a notification + from registrar concerning this call.</p> + </tp:docstring> + <arg type="s" name="callID" /> + <tp:docstring> + The call ID + </tp:docstring> + <arg type="s" name="state" /> + <tp:docstring> + Description string + </tp:docstring> + <arg type="i" name="code" /> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </signal> + + <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> + <tp:docstring> + <p>Account state changed, SFLphone received a notification + from registrar.</p> + </tp:docstring> + <arg type="s" name="accountID" > + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + Description string + </tp:docstring> + </arg> + <arg type="i" name="code"> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </arg> + </signal> + + <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> + <tp:docstring> + Notify the clients of the voicemail number for a specific account, if applicable. + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID. + </tp:docstring> + </arg> + <arg type="i" name="count"> + <tp:docstring> + The number of waiting messages. + </tp:docstring> + </arg> + </signal> + + <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> + <tp:docstring> + <p>Notify clients of a volume level change.</p> + <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p> + </tp:docstring> + <arg type="s" name="device"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value"> + <tp:docstring> + The new volume value + </tp:docstring> + </arg> + </signal> + + <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> + <tp:docstring> + <p>Transfer has been successfully + processed. Client should remove transfered + call from call list as it is no longer + accessible in SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="transferFailed" tp:name-for-bindings="transferFailed"> + <tp:docstring> + <p>Transfer operation failed. Corespondin + call is no longer accessible in + SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Signal sent on SDES session success. Media transmission is encripted + for this call only. It does not apply for a conference.</p> + <p>A conference can be considered to be secured if and only if each + participant is secured.</p> + </tp:docstring> + <arg type="s" name="callID"/> + </signal> + + <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Sinal sent to notify that SDES session failed.</p> + <p>Media transmission is not encrypted.</p> + </tp:docstring> + <arg type="s" name="callID" /> + </signal> + + <!-- ZRTP Methods and Signals --> + <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="cipher" /> + </signal> + + <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="reason" /> + <arg type="s" name="severity" /> + </signal> + + <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="showSAS" tp:name-for-bindings="showSAS"> + <tp:added version="0.9.7"/> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="sas" /> + <arg type="b" name="verified"/> + </signal> + + <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="accepted" direction="in"/> + </method> + + <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="yesNo" direction="in"/> + </method> + + </interface> </node> diff --git a/gnome/src/dbus/configurationmanager-introspec.xml b/gnome/src/dbus/configurationmanager-introspec.xml index 6271c12c9d..5f30f25268 100644 --- a/gnome/src/dbus/configurationmanager-introspec.xml +++ b/gnome/src/dbus/configurationmanager-introspec.xml @@ -1,107 +1,107 @@ <?xml version="1.0" ?> <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.ConfigurationManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... - </tp:docstring> - - <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> - <tp:docstring> - Get all parameters of the specified account. - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> - <tp:docstring> - The available keys / parameters are: - <ul> - <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> - <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> - <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> - <li>HOSTNAME: The IP adress or hostname of the registrar</li> - <li>USERNAME: The username (or extension) of the account</li> - <li>PASSWORD: The password associated to the account</li> - <li>REALM</li> - <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> - <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> - <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> - <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> - <li>PUBLISHED_ADDRESS: The SIP published address</li> - <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> - <li>PUBLISHED_PORT: The SIP published port</li> - <li>DISPLAY_NAMEL: The display name</li> - <li>STUN_ENABLE: True or False (Default: False)</li> - <li>STUN_SERVER: The STUN server address</li> - <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> - <li>REGISTRATION_STATE_CODE</li> - <li>REGISTRATION_STATE_DESCRIPTION</li> - <li>SRTP_KEY_EXCHANGE</li> - <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> - <li>SRTP_RTP_FALLBACK</li> - <li>ZRTP_DISPLAY_SAS</li> - <li>ZRTP_DISPLAY_SAS_ONCE</li> - <li>ZRTP_HELLO_HASH</li> - <li>ZRTP_NOT_SUPP_WARNING</li> - <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> - <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> - <li>TLS_CA_LIST_FILE</li> - <li>TLS_CERTIFICATE_FILE</li> - <li>TLS_PRIVATE_KEY_FILE</li> - <li>TLS_METHOD</li> - <li>TLS_CIPHERS</li> - <li>TLS_SERVER_NAME</li> - <li>TLS_VERIFY_SERVER</li> - <li>TLS_VERIFY_CLIENT</li> - <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> - <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> - <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> - <tp:docstring> - Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. - <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> - <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setCredentials" tp:name-for-bindings="setCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> + <interface name="org.sflphone.SFLphone.ConfigurationManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... + </tp:docstring> + + <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> + <tp:docstring> + Get all parameters of the specified account. + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> + <tp:docstring> + The available keys / parameters are: + <ul> + <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> + <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> + <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> + <li>HOSTNAME: The IP adress or hostname of the registrar</li> + <li>USERNAME: The username (or extension) of the account</li> + <li>PASSWORD: The password associated to the account</li> + <li>REALM</li> + <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> + <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> + <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> + <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> + <li>PUBLISHED_ADDRESS: The SIP published address</li> + <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> + <li>PUBLISHED_PORT: The SIP published port</li> + <li>DISPLAY_NAMEL: The display name</li> + <li>STUN_ENABLE: True or False (Default: False)</li> + <li>STUN_SERVER: The STUN server address</li> + <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> + <li>REGISTRATION_STATE_CODE</li> + <li>REGISTRATION_STATE_DESCRIPTION</li> + <li>SRTP_KEY_EXCHANGE</li> + <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> + <li>SRTP_RTP_FALLBACK</li> + <li>ZRTP_DISPLAY_SAS</li> + <li>ZRTP_DISPLAY_SAS_ONCE</li> + <li>ZRTP_HELLO_HASH</li> + <li>ZRTP_NOT_SUPP_WARNING</li> + <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> + <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> + <li>TLS_CA_LIST_FILE</li> + <li>TLS_CERTIFICATE_FILE</li> + <li>TLS_PRIVATE_KEY_FILE</li> + <li>TLS_METHOD</li> + <li>TLS_CIPHERS</li> + <li>TLS_SERVER_NAME</li> + <li>TLS_VERIFY_SERVER</li> + <li>TLS_VERIFY_CLIENT</li> + <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> + <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> + <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> + <tp:docstring> + Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. + <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> + <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setCredentials" tp:name-for-bindings="setCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> <tp:docstring> Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved. </tp:docstring> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> + <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> <tp:docstring> Available parameters are: @@ -134,587 +134,584 @@ </arg> </method> - <method name="getCredentials" tp:name-for-bindings="getCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="addAccount" tp:name-for-bindings="addAccount"> - <tp:docstring> - Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> - <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - The new account settings - </tp:docstring> - </arg> - <arg type="s" name="createdAccountId" direction="out"> - <tp:docstring> - A new account ID - </tp:docstring> - </arg> - </method> - - <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> - <tp:docstring> - Update the accounts order. - <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="order" direction="in"> - <tp:docstring> - An ordered list of account IDs, delimited by '/' - </tp:docstring> - </arg> - </method> - - <method name="removeAccount" tp:name-for-bindings="removeAccount"> - <tp:docstring> - Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - </tp:docstring> - <arg type="s" name="accoundID" direction="in"> - <tp:docstring> - The account to remove, identified by its ID - </tp:docstring> - </arg> - </method> - - <method name="getAccountList" tp:name-for-bindings="getAccountList"> - <tp:docstring> - Get a list of all created accounts, as stored by the core. - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of account IDs - </tp:docstring> - </arg> - </method> - - <method name="sendRegister" tp:name-for-bindings="sendRegister"> - <tp:docstring> - Send account registration (REGISTER) to the registrar. - </tp:docstring> - the account if expire=1, unregister if expire=0. - - @param[in] input accountID - --> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="i" name="expire" direction="in"> - <tp:docstring> - <p>To register, expire must be 1.</p> - <p>To un-register, expire must be 0.</p> - </tp:docstring> - </arg> - </method> - - <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="enabled" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- /////////////////////// --> - - <!-- Codecs-related methods --> - - <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="payload" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="list" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Audio devices methods --> - - <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="audioPlugin" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - - <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="name" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="plugin" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <method name="getCredentials" tp:name-for-bindings="getCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="addAccount" tp:name-for-bindings="addAccount"> + <tp:docstring> + Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> + <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + The new account settings + </tp:docstring> + </arg> + <arg type="s" name="createdAccountId" direction="out"> + <tp:docstring> + A new account ID + </tp:docstring> + </arg> + </method> + + <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> + <tp:docstring> + Update the accounts order. + <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="order" direction="in"> + <tp:docstring> + An ordered list of account IDs, delimited by '/' + </tp:docstring> + </arg> + </method> + + <method name="removeAccount" tp:name-for-bindings="removeAccount"> + <tp:docstring> + Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + </tp:docstring> + <arg type="s" name="accoundID" direction="in"> + <tp:docstring> + The account to remove, identified by its ID + </tp:docstring> + </arg> + </method> + + <method name="getAccountList" tp:name-for-bindings="getAccountList"> + <tp:docstring> + Get a list of all created accounts, as stored by the core. + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of account IDs + </tp:docstring> + </arg> + </method> + + <method name="sendRegister" tp:name-for-bindings="sendRegister"> + <tp:docstring> + Send account registration (REGISTER) to the registrar. + </tp:docstring> + the account if expire=1, unregister if expire=0. + + @param[in] input accountID + --> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="i" name="expire" direction="in"> + <tp:docstring> + <p>To register, expire must be 1.</p> + <p>To un-register, expire must be 0.</p> + </tp:docstring> + </arg> + </method> + + <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="enabled" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- /////////////////////// --> + + <!-- Codecs-related methods --> + + <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="payload" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="list" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Audio devices methods --> + + <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="audioPlugin" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + + <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="name" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="plugin" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - </arg> - </method> - - <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - </arg> - </method> - - - <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <!-- General Settings Panel --> - - <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="level" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook configuration --> - <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook list --> - <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Hook configuration --> - <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + </arg> + </method> + + <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + </arg> + </method> + + + <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <!-- General Settings Panel --> + + <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> + <tp:docstring> + </tp:docstring> + </method> + + <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="level" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook configuration --> + <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook list --> + <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Hook configuration --> + <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getHistory" tp:name-for-bindings="getHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> <!-- Return a List of type Dict<string, string> >...a List of Dicts --> <arg type="aa{ss}" name="entries" direction="out"/> - </method> - - <method name="setHistory" tp:name-for-bindings="setHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="entries" direction="in"> - </arg> - </method> - - <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> - </signal> - - <signal name="errorAlert" tp:name-for-bindings="errorAlert"> - <arg type="i" name="code"> - <tp:docstring> - </tp:docstring> - </arg> - </signal> - - <!-- TLS Methods --> - <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> + </method> + + <method name="clearHistory" tp:name-for-bindings="clearHistory"> + </method> + + <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> + </signal> + + <signal name="errorAlert" tp:name-for-bindings="errorAlert"> + <arg type="i" name="code"> + <tp:docstring> + </tp:docstring> + </arg> + </signal> + + <!-- TLS Methods --> + <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="interface" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="address" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="interface" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="address" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> </interface> - </node> +</node> diff --git a/gnome/src/dbus/dbus.c b/gnome/src/dbus/dbus.c index e4cc43bc50..cbf8537ddf 100644 --- a/gnome/src/dbus/dbus.c +++ b/gnome/src/dbus/dbus.c @@ -73,13 +73,13 @@ incoming_call_cb(DBusGProxy *proxy UNUSED, const gchar* accountID, const gchar* callID, const gchar* from, void * foo UNUSED) { // We receive the from field under a formatted way. We want to extract the number and the name of the caller - gchar *peer_name = call_get_peer_name(from); + gchar *display_name = call_get_display_name(from); gchar *peer_number = call_get_peer_number(from); - callable_obj_t *c = create_new_call(CALL, CALL_STATE_INCOMING, callID, accountID, peer_name, peer_number); + callable_obj_t *c = create_new_call(CALL, CALL_STATE_INCOMING, callID, accountID, display_name, peer_number); g_free(peer_number); - g_free(peer_name); + g_free(display_name); status_tray_icon_blink(TRUE); popup_main_window(); @@ -355,8 +355,9 @@ record_playback_stopped_cb(DBusGProxy *proxy UNUSED, const gchar *filepath) ERROR("DBUS: ERROR: Could not find %dth call", i); break; } else if (element->type == HIST_CALL && - g_strcmp0(element->elem.call->_recordfile, filepath) == 0) + g_strcmp0(element->elem.call->_recordfile, filepath) == 0) { element->elem.call->_record_is_playing = FALSE; + } } update_actions(); @@ -1715,6 +1716,17 @@ dbus_get_history_limit(void) return (guint) days; } +void +dbus_clear_history(void) +{ + GError* error = NULL; + org_sflphone_SFLphone_ConfigurationManager_clear_history( + configurationManagerProxy, &error); + + if (error) + g_error_free(error); +} + void dbus_set_audio_manager(const gchar *api) { @@ -1957,20 +1969,6 @@ dbus_get_history(void) return entries; } -void -dbus_set_history(const GPtrArray *entries) -{ - GError *error = NULL; - - org_sflphone_SFLphone_ConfigurationManager_set_history( - configurationManagerProxy, entries, &error); - - if (error) { - ERROR("Error calling org_sflphone_SFLphone_ConfigurationlManager_set_history"); - g_error_free(error); - } -} - void dbus_confirm_sas(const callable_obj_t * c) { diff --git a/gnome/src/dbus/dbus.h b/gnome/src/dbus/dbus.h index 8ff9027cb9..7a2574a120 100644 --- a/gnome/src/dbus/dbus.h +++ b/gnome/src/dbus/dbus.h @@ -477,12 +477,7 @@ void dbus_set_accounts_order (const gchar* order); */ GPtrArray *dbus_get_history(void); -/** - * Set the history entries into the daemon. The daemon then writes the content - * of this list into the history file - * @param A list of serialized history entries - */ -void dbus_set_history (const GPtrArray *history); +void dbus_clear_history(void); void sflphone_display_transfer_status (const gchar* message); diff --git a/gnome/src/imwindow.c b/gnome/src/imwindow.c index 9b170a22c7..d7841631fa 100644 --- a/gnome/src/imwindow.c +++ b/gnome/src/imwindow.c @@ -206,7 +206,7 @@ im_window_add_tab(IMWidget *im) im->tab = tab_container; if (im_widget_call) - tab_label = gtk_label_new(*im_widget_call->_peer_name ? im_widget_call->_peer_name : im_widget_call->_peer_number); + tab_label = gtk_label_new(*im_widget_call->_display_name ? im_widget_call->_display_name : im_widget_call->_peer_number); else if (im_widget_conf) tab_label = gtk_label_new("Conferencing"); else diff --git a/gnome/src/sflphone_const.h b/gnome/src/sflphone_const.h index d15b2645de..fd7cec91d2 100644 --- a/gnome/src/sflphone_const.h +++ b/gnome/src/sflphone_const.h @@ -140,7 +140,7 @@ /** Behaviour of the main window on incoming calls */ #define __POPUP_WINDOW (eel_gconf_get_integer (POPUP_ON_CALL)) /** Show/Hide the volume controls */ -#define SHOW_VOLUME (eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && (ALSA_LAYER_SELECTED == get_selected_audio_api())) +#define SHOW_VOLUME (eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && must_show_alsa_conf()) /** DTMF type */ #define OVERRTP "overrtp" diff --git a/gnome/src/uimanager.c b/gnome/src/uimanager.c index 07a84dd381..3145a55ca6 100644 --- a/gnome/src/uimanager.c +++ b/gnome/src/uimanager.c @@ -104,7 +104,7 @@ remove_from_toolbar(GtkWidget *widget) } static bool -is_non_empty_string(const char *str) +is_non_empty(const char *str) { return str && strlen(str) > 0; } @@ -120,8 +120,6 @@ static void add_to_toolbar(GtkWidget *toolbar, GtkWidget *item, int pos) void update_actions() { - DEBUG("UIManager: Update action"); - gtk_action_set_sensitive(newCallAction_, TRUE); gtk_action_set_sensitive(pickUpAction_, FALSE); gtk_action_set_sensitive(hangUpAction_, FALSE); @@ -268,7 +266,7 @@ update_actions() if (active_calltree_tab == current_calls_tab) add_to_toolbar(toolbar_, hangUpWidget_, pos++); else if (active_calltree_tab == history_tab) { - if (is_non_empty_string(selectedCall->_recordfile)) { + if (is_non_empty(selectedCall->_recordfile)) { if (selectedCall->_record_is_playing) add_to_toolbar(toolbar_, stopRecordWidget_, pos); else @@ -386,7 +384,7 @@ update_actions() add_to_toolbar(toolbar_, imToolbar_, pos); } } else if (active_calltree_tab == history_tab) { - if (is_non_empty_string(selectedConf->_recordfile)) { + if (is_non_empty(selectedConf->_recordfile)) { int pos = 2; if (selectedConf->_record_is_playing) add_to_toolbar(toolbar_, stopRecordWidget_, pos); @@ -802,7 +800,7 @@ call_back(void * foo UNUSED) } callable_obj_t *new_call = create_new_call(CALL, CALL_STATE_DIALING, "", - "", selected_call->_peer_name, + "", selected_call->_display_name, selected_call->_peer_number); calllist_add_call(current_calls_tab, new_call); @@ -897,7 +895,7 @@ edit_paste(void * foo UNUSED) gchar * temp = g_strconcat(selectedCall->_peer_number, oneNo, NULL); g_free(selectedCall->_peer_info); - selectedCall->_peer_info = get_peer_info(temp, selectedCall->_peer_name); + selectedCall->_peer_info = get_peer_info(temp, selectedCall->_display_name); g_free(temp); g_free(oneNo); calltree_update_call(current_calls_tab, selectedCall); @@ -926,6 +924,7 @@ static void clear_history(void) { calllist_clean_history(); + dbus_clear_history(); } /** @@ -1485,7 +1484,7 @@ ok_cb(GtkWidget *widget UNUSED, gpointer userdata) // Create the new call callable_obj_t *modified_call = create_new_call(CALL, CALL_STATE_DIALING, "", original->_accountID, - original->_peer_name, new_number); + original->_display_name, new_number); // Update the internal data structure and the GUI calllist_add_call(current_calls_tab, modified_call); @@ -1576,10 +1575,9 @@ create_menus(GtkUIManager *ui_manager) volumeToggle_ = gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/VolumeControls"); // Set the toggle buttons - SelectedAudioLayer selected = get_selected_audio_api(); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/Dialpad")), eel_gconf_get_boolean(CONF_SHOW_DIALPAD)); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(volumeToggle_),(gboolean) SHOW_VOLUME); - gtk_action_set_sensitive(volumeToggle_, (ALSA_LAYER_SELECTED == selected) ? TRUE : FALSE); + gtk_action_set_sensitive(volumeToggle_, must_show_alsa_conf()); gtk_action_set_sensitive(gtk_ui_manager_get_action(ui_manager, "/MenuBar/ViewMenu/Toolbar"), FALSE); /* Add the loading icon at the right of the toolbar. It is used for addressbook searches. */ diff --git a/gnome/src/widget/imwidget.c b/gnome/src/widget/imwidget.c index fcfee2d551..ec7a686168 100644 --- a/gnome/src/widget/imwidget.c +++ b/gnome/src/widget/imwidget.c @@ -345,7 +345,7 @@ im_widget_infobar(IMWidget *im) gchar *msg1; if (im_widget_call) - msg1 = g_strdup_printf("Calling %s %s", im_widget_call->_peer_number, im_widget_call->_peer_name); + msg1 = g_strdup_printf("Calling %s %s", im_widget_call->_peer_number, im_widget_call->_display_name); else if (im_widget_conf) msg1 = g_strdup_printf("Conferencing"); else diff --git a/kde/src/dbus/callmanager-introspec.xml b/kde/src/dbus/callmanager-introspec.xml index 46cec40068..5c38193ffd 100755 --- a/kde/src/dbus/callmanager-introspec.xml +++ b/kde/src/dbus/callmanager-introspec.xml @@ -1,825 +1,781 @@ <?xml version="1.0" encoding="UTF-8" ?> <node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.CallManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>The CallManager interface is used to manage - any call and conference related actions.</p> - <p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p> - </tp:docstring> - <method name="placeCall" tp:name-for-bindings="placeCall"> - <tp:docstring> - <p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface. - </tp:docstring> - </arg> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> - <tp:added version="0.9.8"/> - <tp:docstring> - Place a call with the fist registered account, regarding to the account list order. - <tp:rationale> - Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) - </tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. - </tp:docstring> - </arg> - </method> - - <method name="refuse" tp:name-for-bindings="refuse"> - <tp:docstring> - Refuse an incoming call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - - </method> - - <method name="accept" tp:name-for-bindings="accept"> - <tp:docstring> - Answer an incoming call. Automatically put the current call on state HOLD. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUp" tp:name-for-bindings="hangUp"> - <tp:docstring> - Hangup a call in state "CURRENT" or "HOLD". - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hangup a conference, and every call participating to the conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The unique conference ID. - </tp:docstring> - </arg> - </method> - - <method name="hold" tp:name-for-bindings="hold"> - <tp:docstring> - Place a call on hold. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="unhold" tp:name-for-bindings="unhold"> - <tp:docstring> - Hold off a call, and place this call on state CURRENT. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - </method> - - <method name="transfer" tp:name-for-bindings="transfer"> - <tp:docstring> - Transfer a call to given phone number. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The callID. - </tp:docstring> - </arg> - <arg type="s" name="to" direction="in"> - <tp:docstring> - The phone number to transfer the call to. - </tp:docstring> - </arg> - </method> - - <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> - <tp:docstring> - Perform an attended transfer on two calls - </tp:docstring> - <arg type="s" name="transferID" direction="in"> - <tp:docstring> - The callID of the call to be transfered. - </tp:docstring> - </arg> - <arg type="s" name="targetID" direction="in"> - <tp:docstring> - The callID of the target call. - </tp:docstring> - </arg> - </method> - - <method name="playDTMF" tp:name-for-bindings="playDTMF"> - <tp:docstring> - Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server. - </tp:docstring> - <arg type="s" name="key" direction="in"> - <tp:docstring> - Unicode charter for pressed key - </tp:docstring> - </arg> - </method> - - <method name="startTone" tp:name-for-bindings="startTone"> - <tp:docstring> - Start audio stream and play tone.. - </tp:docstring> - <arg type="i" name="start" direction="in"/> - <arg type="i" name="type" direction="in"/> - </method> - - <method name="setVolume" tp:name-for-bindings="setVolume"> - <tp:docstring> - <p>Sets the volume using a linear scale [0,100].</p> - <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="in"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="getVolume" tp:name-for-bindings="getVolume"> - <tp:docstring> - <p>Return the volume value of the given device on a linear scale [0,100].</p> - <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> - </tp:docstring> - <arg type="s" name="device" direction="in"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value" direction="out"> - <tp:docstring> - The volume value (between 0 and 100) - </tp:docstring> - </arg> - </method> - - <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join two participants together to create a 3-way conference including the current client.</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="sel_callID" direction="in"/> - <arg type="s" name="drag_callID" direction="in"/> - </method> + <interface name="org.sflphone.SFLphone.CallManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>The CallManager interface is used to manage call and conference related actions.</p> + <p>Since SFLphone-daemon supports multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. + SFLphone-clients is responsible for generating the callID on outgoing calls. Conversely, SFLphone-daemon will generate a unique callID for incoming calls.</p> + </tp:docstring> + <method name="placeCall" tp:name-for-bindings="placeCall"> + <tp:docstring> + <p>This is the main method in order to place a new call. The call is registered with the daemon using this method.</p> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The ID of the account with which you want to make a call. If the call is to be placed without any account by means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details on accounts see the configuration manager interface. + </tp:docstring> + </arg> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount"> + <tp:added version="0.9.8"/> + <tp:docstring> + Place a call with the first registered account in the account list. + <tp:rationale> + Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension) + </tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID is a unique identifier that must be randomly generated on the client's side. Any subsequent actions refering to this call must use this callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified. + </tp:docstring> + </arg> + </method> + + <method name="refuse" tp:name-for-bindings="refuse"> + <tp:docstring> + Refuse an incoming call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + + </method> + + <method name="accept" tp:name-for-bindings="accept"> + <tp:docstring> + Answer an incoming call. Automatically puts the current call on HOLD. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUp" tp:name-for-bindings="hangUp"> + <tp:docstring> + Hangup a call in state "CURRENT" or "HOLD". + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="hangUpConference" tp:name-for-bindings="hangUpConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hangup a conference, and every call participating to the conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The unique conference ID. + </tp:docstring> + </arg> + </method> + + <method name="hold" tp:name-for-bindings="hold"> + <tp:docstring> + Place a call on hold. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="unhold" tp:name-for-bindings="unhold"> + <tp:docstring> + Take a call off hold, and place this call in state CURRENT. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + </method> + + <method name="transfer" tp:name-for-bindings="transfer"> + <tp:docstring> + Transfer a call to the given phone number. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The callID. + </tp:docstring> + </arg> + <arg type="s" name="to" direction="in"> + <tp:docstring> + The phone number to which the call will be transferred. + </tp:docstring> + </arg> + </method> + + <method name="attendedTransfer" tp:name-for-bindings="attendedTransfer"> + <tp:docstring> + Perform an attended transfer on two calls. + </tp:docstring> + <arg type="s" name="transferID" direction="in"> + <tp:docstring> + The callID of the call to be transfered. + </tp:docstring> + </arg> + <arg type="s" name="targetID" direction="in"> + <tp:docstring> + The callID of the target call. + </tp:docstring> + </arg> + </method> + + <method name="playDTMF" tp:name-for-bindings="playDTMF"> + <tp:docstring> + Dual-Tone multi-frequency. Tell the core to play dialtones. A SIP INFO message is sent to notify the server. + </tp:docstring> + <arg type="s" name="key" direction="in"> + <tp:docstring> + Unicode character for pressed key. + </tp:docstring> + </arg> + </method> + + <method name="startTone" tp:name-for-bindings="startTone"> + <tp:docstring> + Start audio stream and play tone. + </tp:docstring> + <arg type="i" name="start" direction="in"/> + <arg type="i" name="type" direction="in"/> + </method> + + <method name="setVolume" tp:name-for-bindings="setVolume"> + <tp:docstring> + <p>Sets the volume using a linear scale [0,100].</p> + <tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="in"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="getVolume" tp:name-for-bindings="getVolume"> + <tp:docstring> + <p>Return the volume value of the given device on a linear scale [0,100].</p> + <tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale> + </tp:docstring> + <arg type="s" name="device" direction="in"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value" direction="out"> + <tp:docstring> + The volume value (between 0 and 100) + </tp:docstring> + </arg> + </method> + + <method name="joinParticipant" tp:name-for-bindings="joinParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join two participants together to create a 3-way conference including the current client.</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="sel_callID" direction="in"/> + <arg type="s" name="drag_callID" direction="in"/> + </method> <method name="createConfFromParticipantList" tp:name-for-bindings="createConfFromParticipantList"> - <tp:added version="0.9.14"/> - <tp:docstring> - <p>Create a conference from a list of participant</p> - <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="as" name="participants" direction="in"/> - </method> - - <method name="addParticipant" tp:name-for-bindings="addParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Join a new particiant to an existing conference.</p> - <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to add to the conference - </tp:docstring> - </arg> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p> - <p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p> - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - An existing conference ID - </tp:docstring> - </arg> - </method> - - <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> - <tp:added version="0.9.7"/> - <tp:docstring> - Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID - </tp:docstring> - </arg> - </method> - - <method name="joinConference" tp:name-for-bindings="joinConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Join two conferences together. - </tp:docstring> - <arg type="s" name="sel_confID" direction="in"/> - <arg type="s" name="drag_confID" direction="in"/> - </method> - - <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a hashtable containing conference details. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The conference ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out"> - <tp:docstring> - A map containing the ID of the conferences - and their states: - <ul> - <li>ACTIVE_ATTACHED</li> - <li>ACTIVE_DETACHED</li> - <li>HOLD</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Returns a list containing all active - conferences. - <tp:rationale>To update client status, one should - use <tp:member-ref>getParticipantList</tp:member-ref> - with provided conference IDs.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of conferences. - </tp:docstring> - </arg> - </method> - - <method name="setRecording" tp:name-for-bindings="setRecording"> - <tp:docstring> - Start recording a call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The ID of the call to record. - </tp:docstring> - </arg> - </method> - - <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> - <tp:docstring> - Tells whether or not a call is being recorded. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="b" name="isRecording" direction="out"> - <tp:docstring> - Returns true is the call is being recorded. False otherwise. - </tp:docstring> - </arg> - </method> - - <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> - <tp:docstring> - Once after starting recording for the first time, this signal is emited to - provide the recorded file path to client application. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="filepath"/> - </signal> - - <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> - <tp:docstring/> - <arg type="s" name="filepath" /> - </signal> - - - <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> - <tp:docstring> - Get all the details about a specific call. - </tp:docstring> - <arg type="s" name="callID" direction="in"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - <p>A map containing the call details: </p> - <ul> - <li>ACCOUNTID</li> - <li>PEER_NUMBER</li> - <li>PEER_NAME</li> - <li>DISPLAY_NAME</li> - <li>CALL_STATE</li> - <li>CALL_TYPE</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="getCallList" tp:name-for-bindings="getCallList"> - <tp:docstring> - Get the list of active calls. - <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> - </tp:docstring> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of call IDs. - </tp:docstring> - </arg> - </method> - - <method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> - <tp:docstring> - Unused - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="codecName" direction="out"/> - </method> - - <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> - <tp:docstring> - Send a text message to the specified call - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="s" name="message" direction="in"/> - </method> - - <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> - <tp:docstring> - <p>Notify that a cell have been created.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when call have been created by the daemon itself.</p> - <tp:rationale> The client must subscribe to this signal to handle calls created by other clients </tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the calle. Clients must notify teh right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="to"> - <tp:docstring> - The sip uri this call is trying to reach - </tp:docstring> - </arg> - </signal> - - <signal name="incomingCall" tp:name-for-bindings="incomingCall"> - <tp:docstring> - <p>Notify an incoming call.</p> - <p>The callID generated by the daemon must be stored by the clients in order to address other action for - this call. This signal is emitted when we receive a call from a remote peer</p> - <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID of the callee. Clients must notify the right account when receiving this signal. - </tp:docstring> - </arg> - <arg type="s" name="callID"> - <tp:docstring> - A new call ID. - </tp:docstring> - </arg> - <arg type="s" name="from"> - <tp:docstring> - The caller phone number. - </tp:docstring> - </arg> - </signal> - - <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> - <tp:docstring> - Notify clients that a new text message has been received. - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="from" /> - <arg type="s" name="message" /> - </signal> - - <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> - <tp:docstring> - <p>Notify of a change in a call state.</p> - <p>The client must subscribe to this signal.</p> - </tp:docstring> - <arg type="s" name="callID"> - <tp:docstring> - The call ID. - </tp:docstring> - </arg> - <arg type="s" name="state" > - <tp:docstring> - The acceptable states are: - <ul> - <li>INCOMING: Initial state of incoming calls</li> - <li>RINGING: Initial state of received outgoing call</li> - <li>CURRENT: The normal active state of an answered call</li> - <li>HUNGUP: Notify that the call has been hungup by peer</li> - <li>BUSY</li> - <li>FAILURE: Error when processing a call</li> - <li>HOLD</li> - <li>UNHOLD_CURRENT</li> - <li>UNHOLD_RECORD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> - <tp:added version="0.9.7"/> - <tp:docstring> - Notify of a change in the conferences state - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - The acceptable states are: - <ul> - <li>ACTIVE_ATTACHED: SFLphone user is - participating to this conference</li> - <li>ACTIVE_DETACHED: This situation can - occur if a call is received while - SFLphone user is participating to a - conference. In this case, one can leave - the conference by answering the - call. Other participants may continue - conferencing normally.</li> - <li>HOLD: Each call in this conference - is on state HOLD</li> - </ul> - </tp:docstring> - </arg> - </signal> - - <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> - <tp:added version="0.9.7"/> - <tp:docstring> - Get the call IDs of every participant to a given conference. The client should keep and update the list of participant. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - <arg type="as" name="list" direction="out"> - <tp:docstring> - The list of the call IDs. - </tp:docstring> - </arg> - </method> - - <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - A new conference ID. - </tp:docstring> - </arg> - </signal> - - <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> - <tp:added version="0.9.7"/> - <tp:docstring> - Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. - </tp:docstring> - <arg type="s" name="confID"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </signal> - - <method name="holdConference" tp:name-for-bindings="holdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold on every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="unholdConference" tp:name-for-bindings="unholdConference"> - <tp:added version="0.9.7"/> - <tp:docstring> - Hold off every calls participating to this conference. - </tp:docstring> - <arg type="s" name="confID" direction="in"> - <tp:docstring> - The conference ID. - </tp:docstring> - </arg> - </method> - - <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="filepath" direction="in"/> - <arg type="b" name="result" direction="out"/> - </method> - - <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> - <tp:added version="0.9.14"/> - <tp:docstring/> - <arg type="s" name="filepath" direction="in"/> - </method> - - <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> - <tp:docstring> - <p>Call state changed, SFLphone received a notification - from registrar concerning this call.</p> - </tp:docstring> - <arg type="s" name="callID" /> - <tp:docstring> - The call ID - </tp:docstring> - <arg type="s" name="state" /> - <tp:docstring> - Description string - </tp:docstring> - <arg type="i" name="code" /> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </signal> - - <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> - <tp:docstring> - <p>Account state changed, SFLphone received a notification - from registrar.</p> - </tp:docstring> - <arg type="s" name="accountID" > - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="s" name="state"> - <tp:docstring> - Description string - </tp:docstring> - </arg> - <arg type="i" name="code"> - <tp:docstring> - The SIP or IAX2 message code - </tp:docstring> - </arg> - </signal> - - <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> - <tp:docstring> - Notify the clients of the voicemail number for a specific account, if applicable. - </tp:docstring> - <arg type="s" name="accountID"> - <tp:docstring> - The account ID. - </tp:docstring> - </arg> - <arg type="i" name="count"> - <tp:docstring> - The number of waiting messages. - </tp:docstring> - </arg> - </signal> - - <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> - <tp:docstring> - <p>Notify clients of a volume level - change.</p> - <p>This signal occurs only if ALSA is - enabled since Pulseaudio streams are - managed externally. </p> - </tp:docstring> - <arg type="s" name="device"> - <tp:docstring> - The device: mic or speaker - </tp:docstring> - </arg> - <arg type="d" name="value"> - <tp:docstring> - The new volume value - </tp:docstring> - </arg> - </signal> - - <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> - <tp:docstring> - <p>Transfer has been successfully - processed. Client should remove transfered - call from call list as it is no longer - accessible in SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="transferFailed" tp:name-for-bindings="transferFailed"> - <tp:docstring> - <p>Transfer operation failed. Corespondin - call is no longer accessible in - SFLphone-daemon.</p> - </tp:docstring> - </signal> - - <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Signal sent on SDES session success. Media transmission is encripted - for this call only. It does not apply for a - conference.</p> - <p>A conference can be considered to be secured if and only if each - participant is secured.</p> - </tp:docstring> - <arg type="s" name="callID"/> - </signal> - - <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - <p>Sinal sent to notify that SDES session - failed.</p> - <p>Media transmission is not encrypted.</p> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <!-- ZRTP Methods and Signals --> - <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="cipher" /> - </signal> - - <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="reason" /> - <arg type="s" name="severity" /> - </signal> - - <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - </signal> - - <signal name="showSAS" tp:name-for-bindings="showSAS"> - <tp:added version="0.9.7"/> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" /> - <arg type="s" name="sas" /> - <arg type="b" name="verified"/> - </signal> - - <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - </method> - - <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="accepted" direction="in"/> - </method> - - <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> - <tp:added version="0.9.7"/> - <tp:docstring> - </tp:docstring> - <arg type="s" name="callID" direction="in"/> - <arg type="b" name="yesNo" direction="in"/> - </method> - - </interface> + <tp:added version="0.9.14"/> + <tp:docstring> + <p>Create a conference from a list of participants</p> + <tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="as" name="participants" direction="in"/> + </method> + + <method name="addParticipant" tp:name-for-bindings="addParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Join a new particiant to an existing conference.</p> + <tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to add to the conference + </tp:docstring> + </arg> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="addMainParticipant" tp:name-for-bindings="addMainParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>As the core can handle multiple calls and conferences, it may happen that the client's user leaves a conference to answer an incoming call or to start new calls. This method is used to reintroduce SFLphone-client's user into the conference.</p> + <p>Its put the current call on HOLD or detaches SFLphone-client's user from the another conference.</p> + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + An existing conference ID + </tp:docstring> + </arg> + </method> + + <method name="detachParticipant" tp:name-for-bindings="detachParticipant"> + <tp:added version="0.9.7"/> + <tp:docstring> + Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID + </tp:docstring> + </arg> + </method> + + <method name="joinConference" tp:name-for-bindings="joinConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Join two conferences together. + </tp:docstring> + <arg type="s" name="sel_confID" direction="in"/> + <arg type="s" name="drag_confID" direction="in"/> + </method> + + <method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a hashtable containing conference details. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The conference ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out"> + <tp:docstring> + A map containing the ID of the conferences + and their states: + <ul> + <li>ACTIVE_ATTACHED</li> + <li>ACTIVE_DETACHED</li> + <li>HOLD</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getConferenceList" tp:name-for-bindings="getConferenceList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Returns a list containing all active + conferences. + <tp:rationale>To update client status, one should + use <tp:member-ref>getParticipantList</tp:member-ref> + with provided conference IDs.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of conferences. + </tp:docstring> + </arg> + </method> + + <method name="setRecording" tp:name-for-bindings="setRecording"> + <tp:docstring> + Start recording a call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The ID of the call to record. + </tp:docstring> + </arg> + </method> + + <method name="getIsRecording" tp:name-for-bindings="getIsRecording"> + <tp:docstring> + Tells whether or not a call is being recorded. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="b" name="isRecording" direction="out"> + <tp:docstring> + Returns true is the call is being recorded. False otherwise. + </tp:docstring> + </arg> + </method> + + <signal name="recordPlaybackFilepath" tp:name-for-bindings="recordPlaybackFilepath"> + <tp:docstring> + Once after starting recording for the first time, this signal is emited to + provide the recorded file path to client application. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="filepath"/> + </signal> + + <signal name="recordPlaybackStopped" tp:name-for-bindings="recordPlaybackStopped"> + <tp:docstring/> + <arg type="s" name="filepath" /> + </signal> + + + <method name="getCallDetails" tp:name-for-bindings="getCallDetails"> + <tp:docstring> + Get all the details about a specific call. + </tp:docstring> + <arg type="s" name="callID" direction="in"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map"> + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + <p>A map containing the call details: </p> + <ul> + <li>ACCOUNTID</li> + <li>PEER_NUMBER</li> + <li>PEER_NAME</li> + <li>DISPLAY_NAME</li> + <li>CALL_STATE</li> + <li>CALL_TYPE</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="getCallList" tp:name-for-bindings="getCallList"> + <tp:docstring> + Get the list of active calls. + <tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> + </tp:docstring> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of call IDs. + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioCodecName" tp:name-for-bindings="getCurrentAudioCodecName"> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="codecName" direction="out"/> + </method> + + <method name="sendTextMessage" tp:name-for-bindings="sendTextMessage"> + <tp:docstring> + Send a text message to the specified call + </tp:docstring> + <arg type="s" name="callID" direction="in"/> + <arg type="s" name="message" direction="in"/> + </method> + + <signal name="newCallCreated" tp:name-for-bindings="newCallCreated"> + <tp:docstring> + <p>Notify that a call has been created.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other actions for + this call. This signal is emitted when call haves been created by the daemon itself.</p> + <tp:rationale>The client must subscribe to this signal to handle calls created by other clients</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the call. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="to"> + <tp:docstring> + The SIP URI this call is trying to reach. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingCall" tp:name-for-bindings="incomingCall"> + <tp:docstring> + <p>Notify an incoming call.</p> + <p>The callID generated by the daemon must be stored by the clients in order to address other action for + this call. This signal is emitted when we receive a call from a remote peer</p> + <tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale> + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID of the callee. Clients must notify the right account when receiving this signal. + </tp:docstring> + </arg> + <arg type="s" name="callID"> + <tp:docstring> + A new call ID. + </tp:docstring> + </arg> + <arg type="s" name="from"> + <tp:docstring> + The caller phone number. + </tp:docstring> + </arg> + </signal> + + <signal name="incomingMessage" tp:name-for-bindings="incomingMessage"> + <tp:docstring> + Notify clients that a new text message has been received. + </tp:docstring> + <arg type="s" name="callID" /> + <arg type="s" name="from" /> + <arg type="s" name="message" /> + </signal> + + <signal name="callStateChanged" tp:name-for-bindings="callStateChanged"> + <tp:docstring> + <p>Notify of a change in a call state.</p> + <p>The client must subscribe to this signal.</p> + </tp:docstring> + <arg type="s" name="callID"> + <tp:docstring> + The call ID. + </tp:docstring> + </arg> + <arg type="s" name="state" > + <tp:docstring> + The acceptable states are: + <ul> + <li>INCOMING: Initial state of incoming calls</li> + <li>RINGING: Initial state of received outgoing call</li> + <li>CURRENT: The normal active state of an answered call</li> + <li>HUNGUP: Notify that the call has been hungup by peer</li> + <li>BUSY</li> + <li>FAILURE: Error when processing a call</li> + <li>HOLD</li> + <li>UNHOLD_CURRENT</li> + <li>UNHOLD_RECORD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged"> + <tp:added version="0.9.7"/> + <tp:docstring> + Notify of a change in the conferences state + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + The acceptable states are: + <ul> + <li>ACTIVE_ATTACHED: SFLphone user is + participating to this conference</li> + <li>ACTIVE_DETACHED: This situation can + occur if a call is received while + SFLphone user is participating to a + conference. In this case, one can leave + the conference by answering the + call. Other participants may continue + conferencing normally.</li> + <li>HOLD: Each call in this conference + is on state HOLD</li> + </ul> + </tp:docstring> + </arg> + </signal> + + <method name="getParticipantList" tp:name-for-bindings="getParticipantList"> + <tp:added version="0.9.7"/> + <tp:docstring> + Get the call IDs of every participant to a given conference. The client should keep and update the list of participants. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + <arg type="as" name="list" direction="out"> + <tp:docstring> + The list of the call IDs. + </tp:docstring> + </arg> + </method> + + <signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is created. SFLphone-client is reponsible for storing the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + A new conference ID. + </tp:docstring> + </arg> + </signal> + + <signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved"> + <tp:added version="0.9.7"/> + <tp:docstring> + Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification. + </tp:docstring> + <arg type="s" name="confID"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </signal> + + <method name="holdConference" tp:name-for-bindings="holdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold every call which is participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="unholdConference" tp:name-for-bindings="unholdConference"> + <tp:added version="0.9.7"/> + <tp:docstring> + Hold off every call participating in this conference. + </tp:docstring> + <arg type="s" name="confID" direction="in"> + <tp:docstring> + The conference ID. + </tp:docstring> + </arg> + </method> + + <method name="startRecordedFilePlayback" tp:name-for-bindings="startRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <arg type="s" name="filepath" direction="in"/> + <arg type="b" name="result" direction="out"/> + </method> + + <method name="stopRecordedFilePlayback" tp:name-for-bindings="stopRecordedFilePlayback"> + <tp:added version="0.9.14"/> + <tp:docstring/> + <arg type="s" name="filepath" direction="in"/> + </method> + + <signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged"> + <tp:docstring> + <p>Call state changed, SFLphone received a notification + from registrar concerning this call.</p> + </tp:docstring> + <arg type="s" name="callID" /> + <tp:docstring> + The call ID + </tp:docstring> + <arg type="s" name="state" /> + <tp:docstring> + Description string + </tp:docstring> + <arg type="i" name="code" /> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </signal> + + <signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged"> + <tp:docstring> + <p>Account state changed, SFLphone received a notification + from registrar.</p> + </tp:docstring> + <arg type="s" name="accountID" > + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="s" name="state"> + <tp:docstring> + Description string + </tp:docstring> + </arg> + <arg type="i" name="code"> + <tp:docstring> + The SIP or IAX2 message code + </tp:docstring> + </arg> + </signal> + + <signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify"> + <tp:docstring> + Notify the clients of the voicemail number for a specific account, if applicable. + </tp:docstring> + <arg type="s" name="accountID"> + <tp:docstring> + The account ID. + </tp:docstring> + </arg> + <arg type="i" name="count"> + <tp:docstring> + The number of waiting messages. + </tp:docstring> + </arg> + </signal> + + <signal name="volumeChanged" tp:name-for-bindings="volumeChanged"> + <tp:docstring> + <p>Notify clients of a volume level change.</p> + <p>This signal occurs only if ALSA is enabled since Pulseaudio streams are managed externally. </p> + </tp:docstring> + <arg type="s" name="device"> + <tp:docstring> + The device: mic or speaker + </tp:docstring> + </arg> + <arg type="d" name="value"> + <tp:docstring> + The new volume value + </tp:docstring> + </arg> + </signal> + + <signal name="transferSucceded" tp:name-for-bindings="transferSucceded"> + <tp:docstring> + <p>Transfer has been successfully + processed. Client should remove transfered + call from call list as it is no longer + accessible in SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="transferFailed" tp:name-for-bindings="transferFailed"> + <tp:docstring> + <p>Transfer operation failed. Corespondin + call is no longer accessible in + SFLphone-daemon.</p> + </tp:docstring> + </signal> + + <signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Signal sent on SDES session success. Media transmission is encripted + for this call only. It does not apply for a conference.</p> + <p>A conference can be considered to be secured if and only if each + participant is secured.</p> + </tp:docstring> + <arg type="s" name="callID"/> + </signal> + + <signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff"> + <tp:added version="0.9.7"/> + <tp:docstring> + <p>Sinal sent to notify that SDES session failed.</p> + <p>Media transmission is not encrypted.</p> + </tp:docstring> + <arg type="s" name="callID" /> + </signal> + + <!-- ZRTP Methods and Signals --> + <signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="cipher" /> + </signal> + + <signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="reason" /> + <arg type="s" name="severity" /> + </signal> + + <signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + </signal> + + <signal name="showSAS" tp:name-for-bindings="showSAS"> + <tp:added version="0.9.7"/> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" /> + <arg type="s" name="sas" /> + <arg type="b" name="verified"/> + </signal> + + <method name="setSASVerified" tp:name-for-bindings="setSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="resetSASVerified" tp:name-for-bindings="resetSASVerified"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="requestGoClear" tp:name-for-bindings="requestGoClear"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + </method> + + <method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="accepted" direction="in"/> + </method> + + <method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment"> + <tp:added version="0.9.7"/> + <arg type="s" name="callID" direction="in"/> + <arg type="b" name="yesNo" direction="in"/> + </method> + + </interface> </node> diff --git a/kde/src/dbus/configurationmanager-introspec.xml b/kde/src/dbus/configurationmanager-introspec.xml index 6271c12c9d..5f30f25268 100755 --- a/kde/src/dbus/configurationmanager-introspec.xml +++ b/kde/src/dbus/configurationmanager-introspec.xml @@ -1,107 +1,107 @@ <?xml version="1.0" ?> <node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"> - <interface name="org.sflphone.SFLphone.ConfigurationManager"> - - <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> - Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... - </tp:docstring> - - <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> - <tp:docstring> - Get all parameters of the specified account. - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> - <tp:docstring> - The available keys / parameters are: - <ul> - <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> - <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> - <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> - <li>HOSTNAME: The IP adress or hostname of the registrar</li> - <li>USERNAME: The username (or extension) of the account</li> - <li>PASSWORD: The password associated to the account</li> - <li>REALM</li> - <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> - <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> - <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> - <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> - <li>PUBLISHED_ADDRESS: The SIP published address</li> - <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> - <li>PUBLISHED_PORT: The SIP published port</li> - <li>DISPLAY_NAMEL: The display name</li> - <li>STUN_ENABLE: True or False (Default: False)</li> - <li>STUN_SERVER: The STUN server address</li> - <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> - <li>REGISTRATION_STATE_CODE</li> - <li>REGISTRATION_STATE_DESCRIPTION</li> - <li>SRTP_KEY_EXCHANGE</li> - <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> - <li>SRTP_RTP_FALLBACK</li> - <li>ZRTP_DISPLAY_SAS</li> - <li>ZRTP_DISPLAY_SAS_ONCE</li> - <li>ZRTP_HELLO_HASH</li> - <li>ZRTP_NOT_SUPP_WARNING</li> - <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> - <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> - <li>TLS_CA_LIST_FILE</li> - <li>TLS_CERTIFICATE_FILE</li> - <li>TLS_PRIVATE_KEY_FILE</li> - <li>TLS_METHOD</li> - <li>TLS_CIPHERS</li> - <li>TLS_SERVER_NAME</li> - <li>TLS_VERIFY_SERVER</li> - <li>TLS_VERIFY_CLIENT</li> - <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> - <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> - <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> - </ul> - </tp:docstring> - </arg> - </method> - - <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> - <tp:docstring> - Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. - <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> - <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setCredentials" tp:name-for-bindings="setCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> + <interface name="org.sflphone.SFLphone.ConfigurationManager"> + + <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> + Used to handle the configuration stuff: accounts settings, account registration, user preferences, ... + </tp:docstring> + + <method name="getAccountDetails" tp:name-for-bindings="getAccountDetails"> + <tp:docstring> + Get all parameters of the specified account. + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> + <tp:docstring> + The available keys / parameters are: + <ul> + <li>CONFIG_ACCOUNT_ENABLE: True or False (Default: True)</li> + <li>CONFIG_ACCOUNT_RESOLVE_ONCE</li> + <li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li> + <li>HOSTNAME: The IP adress or hostname of the registrar</li> + <li>USERNAME: The username (or extension) of the account</li> + <li>PASSWORD: The password associated to the account</li> + <li>REALM</li> + <li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li> + <li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li> + <li>LOCAL_INTERFACE: The network interface (Default: eth0)</li> + <li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li> + <li>PUBLISHED_ADDRESS: The SIP published address</li> + <li>LOCAL_PORT: The SIP listening port (Default: 5060)</li> + <li>PUBLISHED_PORT: The SIP published port</li> + <li>DISPLAY_NAMEL: The display name</li> + <li>STUN_ENABLE: True or False (Default: False)</li> + <li>STUN_SERVER: The STUN server address</li> + <li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li> + <li>REGISTRATION_STATE_CODE</li> + <li>REGISTRATION_STATE_DESCRIPTION</li> + <li>SRTP_KEY_EXCHANGE</li> + <li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li> + <li>SRTP_RTP_FALLBACK</li> + <li>ZRTP_DISPLAY_SAS</li> + <li>ZRTP_DISPLAY_SAS_ONCE</li> + <li>ZRTP_HELLO_HASH</li> + <li>ZRTP_NOT_SUPP_WARNING</li> + <li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li> + <li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li> + <li>TLS_CA_LIST_FILE</li> + <li>TLS_CERTIFICATE_FILE</li> + <li>TLS_PRIVATE_KEY_FILE</li> + <li>TLS_METHOD</li> + <li>TLS_CIPHERS</li> + <li>TLS_SERVER_NAME</li> + <li>TLS_VERIFY_SERVER</li> + <li>TLS_VERIFY_CLIENT</li> + <li>TLS_REQUIRE_CLIENT_CERTIFICATE</li> + <li>TLS_NEGOTIATION_TIMEOUT_SEC</li> + <li>TLS_NEGOTIATION_TIMEOUT_MSEC</li> + </ul> + </tp:docstring> + </arg> + </method> + + <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails"> + <tp:docstring> + Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified. + <tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale> + <tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setCredentials" tp:name-for-bindings="setCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails"> <tp:docstring> Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved. </tp:docstring> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> + <!--<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>--> <arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map"> <tp:docstring> Available parameters are: @@ -134,587 +134,584 @@ </arg> </method> - <method name="getCredentials" tp:name-for-bindings="getCredentials"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="credentialInformation" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="addAccount" tp:name-for-bindings="addAccount"> - <tp:docstring> - Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> - <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> - <tp:docstring> - The new account settings - </tp:docstring> - </arg> - <arg type="s" name="createdAccountId" direction="out"> - <tp:docstring> - A new account ID - </tp:docstring> - </arg> - </method> - - <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> - <tp:docstring> - Update the accounts order. - <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> - </tp:docstring> - <arg type="s" name="order" direction="in"> - <tp:docstring> - An ordered list of account IDs, delimited by '/' - </tp:docstring> - </arg> - </method> - - <method name="removeAccount" tp:name-for-bindings="removeAccount"> - <tp:docstring> - Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. - </tp:docstring> - <arg type="s" name="accoundID" direction="in"> - <tp:docstring> - The account to remove, identified by its ID - </tp:docstring> - </arg> - </method> - - <method name="getAccountList" tp:name-for-bindings="getAccountList"> - <tp:docstring> - Get a list of all created accounts, as stored by the core. - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - A list of account IDs - </tp:docstring> - </arg> - </method> - - <method name="sendRegister" tp:name-for-bindings="sendRegister"> - <tp:docstring> - Send account registration (REGISTER) to the registrar. - </tp:docstring> - the account if expire=1, unregister if expire=0. - - @param[in] input accountID - --> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - The account ID - </tp:docstring> - </arg> - <arg type="i" name="expire" direction="in"> - <tp:docstring> - <p>To register, expire must be 1.</p> - <p>To un-register, expire must be 0.</p> - </tp:docstring> - </arg> - </method> - - <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="api" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="rec" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> - <tp:docstring> - </tp:docstring> - <arg type="b" name="enabled" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- /////////////////////// --> - - <!-- Codecs-related methods --> - - <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="payload" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="ai" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="list" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="accountID" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Audio devices methods --> - - <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="audioPlugin" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - - <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="name" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="plugin" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <method name="getCredentials" tp:name-for-bindings="getCredentials"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <arg type="aa{ss}" name="credentialInformation" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="addAccount" tp:name-for-bindings="addAccount"> + <tp:docstring> + Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale> + <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + <tp:docstring> + The new account settings + </tp:docstring> + </arg> + <arg type="s" name="createdAccountId" direction="out"> + <tp:docstring> + A new account ID + </tp:docstring> + </arg> + </method> + + <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder"> + <tp:docstring> + Update the accounts order. + <tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale> + </tp:docstring> + <arg type="s" name="order" direction="in"> + <tp:docstring> + An ordered list of account IDs, delimited by '/' + </tp:docstring> + </arg> + </method> + + <method name="removeAccount" tp:name-for-bindings="removeAccount"> + <tp:docstring> + Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure. + </tp:docstring> + <arg type="s" name="accoundID" direction="in"> + <tp:docstring> + The account to remove, identified by its ID + </tp:docstring> + </arg> + </method> + + <method name="getAccountList" tp:name-for-bindings="getAccountList"> + <tp:docstring> + Get a list of all created accounts, as stored by the core. + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + A list of account IDs + </tp:docstring> + </arg> + </method> + + <method name="sendRegister" tp:name-for-bindings="sendRegister"> + <tp:docstring> + Send account registration (REGISTER) to the registrar. + </tp:docstring> + the account if expire=1, unregister if expire=0. + + @param[in] input accountID + --> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + The account ID + </tp:docstring> + </arg> + <arg type="i" name="expire" direction="in"> + <tp:docstring> + <p>To register, expire must be 1.</p> + <p>To un-register, expire must be 0.</p> + </tp:docstring> + </arg> + </method> + + <method name="getAudioManager" tp:name-for-bindings="getAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioManager" tp:name-for-bindings="setAudioManager"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="api" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getRecordPath" tp:name-for-bindings="getRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setRecordPath" tp:name-for-bindings="setRecordPath"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="rec" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getIsAlwaysRecording" tp:name-for-bindings="getIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setIsAlwaysRecording" tp:name-for-bindings="setIsAlwaysRecording"> + <tp:docstring> + </tp:docstring> + <arg type="b" name="enabled" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- /////////////////////// --> + + <!-- Codecs-related methods --> + + <method name="getAudioCodecList" tp:name-for-bindings="getAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioCodecDetails" tp:name-for-bindings="getAudioCodecDetails"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="payload" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getActiveAudioCodecList" tp:name-for-bindings="getActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorInt"/> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="ai" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setActiveAudioCodecList" tp:name-for-bindings="setActiveAudioCodecList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="list" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="accountID" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Audio devices methods --> + + <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="audioPlugin" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAudioRingtoneDevice" tp:name-for-bindings="setAudioRingtoneDevice"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + + <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="name" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="plugin" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getEchoCancelState" tp:name-for-bindings="getNoiseSuppressState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="in"> - </arg> - </method> - - <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="index" direction="out"> - </arg> - </method> - - - <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="state" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> - <arg type="s" name="state" direction="in"> - </arg> - </method> - - <!-- General Settings Panel --> - - <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="res" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> - <tp:docstring> - </tp:docstring> - </method> - - <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="level" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> - <tp:docstring> - </tp:docstring> - <arg type="i" name="days" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook configuration --> - <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> - <arg type="a{si}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Addressbook list --> - <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> - <arg type="as" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <!-- Hook configuration --> - <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="settings" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <method name="setEchoCancelTailLength" tp:name-for-bindings="setEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getEchoCancelTailLength" tp:name-for-bindings="getEchoCancelTailLength"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setEchoCancelDelay" tp:name-for-bindings="setEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="in"> + </arg> + </method> + + <method name="getEchoCancelDelay" tp:name-for-bindings="getEchoCancelDelay"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="index" direction="out"> + </arg> + </method> + + + <method name="getNoiseSuppressState" tp:name-for-bindings="getEchoCancelState"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="state" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setNoiseSuppressState" tp:name-for-bindings="setNoiseSuppressState"> + <arg type="s" name="state" direction="in"> + </arg> + </method> + + <!-- General Settings Panel --> + + <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="res" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setMailNotify" tp:name-for-bindings="setMailNotify"> + <tp:docstring> + </tp:docstring> + </method> + + <method name="getMailNotify" tp:name-for-bindings="getMailNotify"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="level" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit"> + <tp:docstring> + </tp:docstring> + <arg type="i" name="days" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook configuration --> + <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/> + <arg type="a{si}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Addressbook list --> + <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/> + <arg type="as" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <!-- Hook configuration --> + <method name="getHookSettings" tp:name-for-bindings="getHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setHookSettings" tp:name-for-bindings="setHookSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="settings" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> <method name="getHistory" tp:name-for-bindings="getHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorMapStringString"/> <!-- Return a List of type Dict<string, string> >...a List of Dicts --> <arg type="aa{ss}" name="entries" direction="out"/> - </method> - - <method name="setHistory" tp:name-for-bindings="setHistory"> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorMapStringString"/> - <arg type="aa{ss}" name="entries" direction="in"> - </arg> - </method> - - <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> - </signal> - - <signal name="errorAlert" tp:name-for-bindings="errorAlert"> - <arg type="i" name="code"> - <tp:docstring> - </tp:docstring> - </arg> - </signal> - - <!-- TLS Methods --> - <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> + </method> + + <method name="clearHistory" tp:name-for-bindings="clearHistory"> + </method> + + <signal name="accountsChanged" tp:name-for-bindings="accountsChanged"> + </signal> + + <signal name="errorAlert" tp:name-for-bindings="errorAlert"> + <arg type="i" name="code"> + <tp:docstring> + </tp:docstring> + </arg> + </signal> + + <!-- TLS Methods --> + <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <arg type="a{ss}" name="details" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> - <tp:docstring> - </tp:docstring> - <arg type="s" name="interface" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - <arg type="s" name="address" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> - <tp:docstring> - </tp:docstring> - <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> - <arg type="as" name="list" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName"> + <tp:docstring> + </tp:docstring> + <arg type="s" name="interface" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + <arg type="s" name="address" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName"> + <tp:docstring> + </tp:docstring> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="getShortcuts" tp:name-for-bindings="getShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="out"> - <tp:docstring> - </tp:docstring> - </arg> - </method> - - <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="out"> + <tp:docstring> + </tp:docstring> + </arg> + </method> + + <method name="setShortcuts" tp:name-for-bindings="setShortcuts"> <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/> - <tp:docstring> - </tp:docstring> - <arg type="a{ss}" name="shortcutsMap" direction="in"> - <tp:docstring> - </tp:docstring> - </arg> - </method> + <tp:docstring> + </tp:docstring> + <arg type="a{ss}" name="shortcutsMap" direction="in"> + <tp:docstring> + </tp:docstring> + </arg> + </method> </interface> - </node> +</node> -- GitLab