android: bump dring API

Update SWIG interface and retated code to build with lasted daemon APIs

Refs #74605

Change-Id: Id6e0a2ddecbb7329eacce0788329985e1287cf1e
diff --git a/ring-android/jni/callmanager.i b/ring-android/jni/callmanager.i
index 0ea1ab5..9d29d4c 100644
--- a/ring-android/jni/callmanager.i
+++ b/ring-android/jni/callmanager.i
@@ -31,33 +31,38 @@
 %header %{
 
 #include "dring/dring.h"
+#include "dring/callmanager_interface.h"
 
 class Callback {
 public:
     virtual ~Callback() {}
-    virtual void callOnStateChange(const std::string& call_id, const std::string& state){}
-    virtual void callOnTransferFail(void){}
-    virtual void callOnTransferSuccess(void){}
-    virtual void callOnRecordPlaybackStopped(const std::string& path){}
-    virtual void callOnVoiceMailNotify(const std::string& call_id, int nd_msg){}
-    virtual void callOnIncomingMessage(const std::string& id, const std::string& from, const std::string& msg){}
-    virtual void callOnIncomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
-    virtual void callOnRecordPlaybackFilepath(const std::string& id, const std::string& filename){}
-    virtual void callOnConferenceCreated(const std::string& conf_id){}
-    virtual void callOnConferenceChanged(const std::string& conf_id, const std::string& state){}
-    virtual void callOnUpdatePlaybackScale(const std::string& filepath, int position, int scale){}
-    virtual void callOnConferenceRemove(const std::string& conf_id){}
-    virtual void callOnNewCall(const std::string& account_id, const std::string& call_id, const std::string& to){}
-    virtual void callOnSipCallStateChange(const std::string& call_id, const std::string& state, int code){}
-    virtual void callOnRecordStateChange(const std::string& call_id, int state){}
-    virtual void callOnSecureSdesOn(const std::string& call_id){}
-    virtual void callOnSecureSdesOff(const std::string& call_id){}
-    virtual void callOnSecureZrtpOn(const std::string& call_id, const std::string& cipher){}
-    virtual void callOnSecureZrtpOff(const std::string& call_id){}
-    virtual void callOnShowSas(const std::string& call_id, const std::string& sas, int verified){}
-    virtual void callOnZrtpNotSuppOther(const std::string& call_id){}
-    virtual void callOnZrtpNegotiationFail(const std::string& call_id, const std::string& reason, const std::string& severity){}
-    virtual void callOnRtcpReceiveReport(const std::string& call_id, const std::map<std::string, int>& stats){}
+    virtual void callStateChanged(const std::string& call_id, const std::string& state, int detail_code){}
+    virtual void transferFailed(void){}
+    virtual void transferSucceeded(void){}
+    virtual void recordPlaybackStopped(const std::string& path){}
+    virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
+    virtual void incomingMessage(const std::string& id, const std::string& from, const std::string& msg){}
+    virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
+    virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
+    virtual void conferenceCreated(const std::string& conf_id){}
+    virtual void conferenceChanged(const std::string& conf_id, const std::string& state){}
+    virtual void conferenceRemoved(const std::string& conf_id){}
+    virtual void newCallCreated(const std::string& call_id, const std::string&, const std::string&){}
+    virtual void updatePlaybackScale(const std::string& filepath, int position, int scale){}
+    virtual void conferenceRemove(const std::string& conf_id){}
+    virtual void newCall(const std::string& account_id, const std::string& call_id, const std::string& to){}
+    virtual void sipCallStateChange(const std::string& call_id, const std::string& state, int code){}
+    virtual void recordingStateChanged(const std::string& call_id, int code){}
+    virtual void recordStateChange(const std::string& call_id, int state){}
+    virtual void secureSdesOn(const std::string& call_id){}
+    virtual void secureSdesOff(const std::string& call_id){}
+    virtual void secureZrtpOn(const std::string& call_id, const std::string& cipher){}
+    virtual void secureZrtpOff(const std::string& call_id){}
+    virtual void showSAS(const std::string& call_id, const std::string& sas, int verified){}
+    virtual void zrtpNotSuppOther(const std::string& call_id){}
+    virtual void zrtpNegotiationFailed(const std::string& call_id, const std::string& reason, const std::string& severity){}
+    virtual void onRtcpReportReceived(const std::string& call_id, const std::map<std::string, int>& stats){}
+    virtual void peerHold(const std::string& call_id, bool holding){}
 };
 
 
@@ -65,72 +70,98 @@
 
 %feature("director") Callback;
 
-bool sflph_call_place(const std::string& account_id, const std::string& call_id, const std::string& to);
-bool sflph_call_refuse(const std::string& call_id);
-bool sflph_call_accept(const std::string& call_id);
-bool sflph_call_hang_up(const std::string& call_id);
-bool sflph_call_hold(const std::string& call_id);
-bool sflph_call_unhold(const std::string& call_id);
-bool sflph_call_transfer(const std::string& call_id, const std::string& to);
-bool sflph_call_attended_transfer(const std::string& transfer_id, const std::string& target_id);
-std::map<std::string, std::string> sflph_call_get_call_details(const std::string& call_id);
-std::vector<std::string> sflph_call_get_call_list(void);
-void sflph_call_remove_conference(const std::string& conf_id);
-bool sflph_call_join_participant(const std::string& sel_call_id, const std::string& drag_call_id);
-void sflph_call_create_conf_from_participant_list(const std::vector<std::string>& participants);
-bool sflph_call_is_conference_participant(const std::string& call_id);
-bool sflph_call_add_participant(const std::string& call_id, const std::string& conf_id);
-bool sflph_call_add_main_participant(const std::string& conf_id);
-bool sflph_call_detach_participant(const std::string& call_id);
-bool sflph_call_join_conference(const std::string& sel_conf_id, const std::string& drag_conf_id);
-bool sflph_call_hang_up_conference(const std::string& conf_id);
-bool sflph_call_hold_conference(const std::string& conf_id);
-bool sflph_call_unhold_conference(const std::string& conf_id);
-std::vector<std::string> sflph_call_get_conference_list(void);
-std::vector<std::string> sflph_call_get_participant_list(const std::string& conf_id);
-std::vector<std::string> sflph_call_get_display_names(const std::string& conf_id);
-std::string sflph_call_get_conference_id(const std::string& call_id);
-std::map<std::string, std::string> sflph_call_get_conference_details(const std::string& call_id);
-bool sflph_call_play_recorded_file(const std::string& path);
-void sflph_call_stop_recorded_file(const std::string& path);
-bool sflph_call_toggle_recording(const std::string& call_id);
-void sflph_call_set_recording(const std::string& call_id);
-void sflph_call_record_playback_seek(double pos);
-bool sflph_call_is_recording(const std::string& call_id);
-std::string sflph_call_get_current_audio_codec_name(const std::string& call_id);
-void sflph_call_play_dtmf(const std::string& key);
-void sflph_call_start_tone(int start, int type);
-void sflph_call_set_sas_verified(const std::string& call_id);
-void sflph_call_reset_sas_verified(const std::string& call_id);
-void sflph_call_set_confirm_go_clear(const std::string& call_id);
-void sflph_call_request_go_clear(const std::string& call_id);
-void sflph_call_accept_enrollment(const std::string& call_id, bool accepted);
-void sflph_call_send_text_message(const std::string& call_id, const std::string& message);
+namespace DRing {
+
+/* Call related methods */
+std::string placeCall(const std::string& accountID, const std::string& to);
+
+bool refuse(const std::string& callID);
+bool accept(const std::string& callID);
+bool hangUp(const std::string& callID);
+bool hold(const std::string& callID);
+bool unhold(const std::string& callID);
+bool muteLocalMedia(const std::string& callid, const std::string& mediaType, bool mute);
+bool transfer(const std::string& callID, const std::string& to);
+bool 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();
+
+/* Conference related methods */
+void removeConference(const std::string& conference_id);
+bool joinParticipant(const std::string& sel_callID, const std::string& drag_callID);
+void createConfFromParticipantList(const std::vector<std::string>& participants);
+bool isConferenceParticipant(const std::string& call_id);
+bool addParticipant(const std::string& callID, const std::string& confID);
+bool addMainParticipant(const std::string& confID);
+bool detachParticipant(const std::string& callID);
+bool joinConference(const std::string& sel_confID, const std::string& drag_confID);
+bool hangUpConference(const std::string& confID);
+bool holdConference(const std::string& confID);
+bool unholdConference(const std::string& confID);
+std::vector<std::string> getConferenceList();
+std::vector<std::string> getParticipantList(const std::string& confID);
+std::vector<std::string> getDisplayNames(const std::string& confID);
+std::string getConferenceId(const std::string& callID);
+std::map<std::string, std::string> getConferenceDetails(const std::string& callID);
+
+/* File Playback methods */
+bool startRecordedFilePlayback(const std::string& filepath);
+void stopRecordedFilePlayback(const std::string& filepath);
+
+/* General audio methods */
+bool toggleRecording(const std::string& callID);
+/* DEPRECATED */
+void setRecording(const std::string& callID);
+
+void recordPlaybackSeek(double value);
+bool getIsRecording(const std::string& callID);
+std::string getCurrentAudioCodecName(const std::string& callID);
+void playDTMF(const std::string& key);
+void startTone(int32_t start, int32_t type);
+
+bool switchInput(const std::string& callID, const std::string& resource);
+
+/* Security related methods */
+void setSASVerified(const std::string& callID);
+void resetSASVerified(const std::string& callID);
+void setConfirmGoClear(const std::string& callID);
+void requestGoClear(const std::string& callID);
+void acceptEnrollment(const std::string& callID, bool accepted);
+
+/* Instant messaging */
+void sendTextMessage(const std::string& callID, const std::string& message);
+void sendTextMessage(const std::string& callID, const std::string& message, const std::string& from);
+
+}
 
 class Callback {
 public:
-    virtual ~Callback();
-    virtual void callOnStateChange(const std::string& call_id, const std::string& state);
-    virtual void callOnTransferFail(void);
-    virtual void callOnTransferSuccess(void);
-    virtual void callOnRecordPlaybackStopped(const std::string& path);
-    virtual void callOnVoiceMailNotify(const std::string& call_id, int nd_msg);
-    virtual void callOnIncomingMessage(const std::string& id, const std::string& from, const std::string& msg);
-    virtual void callOnIncomingCall(const std::string& account_id, const std::string& call_id, const std::string& from);
-    virtual void callOnRecordPlaybackFilepath(const std::string& id, const std::string& filename);
-    virtual void callOnConferenceCreated(const std::string& conf_id);
-    virtual void callOnConferenceChanged(const std::string& conf_id, const std::string& state);
-    virtual void callOnUpdatePlaybackScale(const std::string& filepath, int position, int scale);
-    virtual void callOnConferenceRemove(const std::string& conf_id);
-    virtual void callOnNewCall(const std::string& account_id, const std::string& call_id, const std::string& to);
-    virtual void callOnSipCallStateChange(const std::string& call_id, const std::string& state, int code);
-    virtual void callOnRecordStateChange(const std::string& call_id, int state);
-    virtual void callOnSecureSdesOn(const std::string& call_id);
-    virtual void callOnSecureSdesOff(const std::string& call_id);
-    virtual void callOnSecureZrtpOn(const std::string& call_id, const std::string& cipher);
-    virtual void callOnSecureZrtpOff(const std::string& call_id);
-    virtual void callOnShowSas(const std::string& call_id, const std::string& sas, int verified);
-    virtual void callOnZrtpNotSuppOther(const std::string& call_id);
-    virtual void callOnZrtpNegotiationFail(const std::string& call_id, const std::string& reason, const std::string& severity);
-    virtual void callOnRtcpReceiveReport(const std::string& call_id, const std::map<std::string, int>& stats);
+    virtual ~Callback() {}
+    virtual void callStateChanged(const std::string& call_id, const std::string& state, int detail_code){}
+    virtual void transferFailed(void){}
+    virtual void transferSucceeded(void){}
+    virtual void recordPlaybackStopped(const std::string& path){}
+    virtual void voiceMailNotify(const std::string& call_id, int nd_msg){}
+    virtual void incomingMessage(const std::string& id, const std::string& from, const std::string& msg){}
+    virtual void incomingCall(const std::string& account_id, const std::string& call_id, const std::string& from){}
+    virtual void recordPlaybackFilepath(const std::string& id, const std::string& filename){}
+    virtual void conferenceCreated(const std::string& conf_id){}
+    virtual void conferenceChanged(const std::string& conf_id, const std::string& state){}
+    virtual void conferenceRemoved(const std::string& conf_id){}
+    virtual void newCallCreated(const std::string& call_id, const std::string&, const std::string&){}
+    virtual void updatePlaybackScale(const std::string& filepath, int position, int scale){}
+    virtual void conferenceRemove(const std::string& conf_id){}
+    virtual void newCall(const std::string& account_id, const std::string& call_id, const std::string& to){}
+    virtual void sipCallStateChange(const std::string& call_id, const std::string& state, int code){}
+    virtual void recordingStateChanged(const std::string& call_id, int code){}
+    virtual void recordStateChange(const std::string& call_id, int state){}
+    virtual void secureSdesOn(const std::string& call_id){}
+    virtual void secureSdesOff(const std::string& call_id){}
+    virtual void secureZrtpOn(const std::string& call_id, const std::string& cipher){}
+    virtual void secureZrtpOff(const std::string& call_id){}
+    virtual void showSAS(const std::string& call_id, const std::string& sas, int verified){}
+    virtual void zrtpNotSuppOther(const std::string& call_id){}
+    virtual void zrtpNegotiationFailed(const std::string& call_id, const std::string& reason, const std::string& severity){}
+    virtual void onRtcpReportReceived(const std::string& call_id, const std::map<std::string, int>& stats){}
+    virtual void peerHold(const std::string& call_id, bool holding){}
 };
diff --git a/ring-android/jni/configurationmanager.i b/ring-android/jni/configurationmanager.i
index 2be3627..6374257 100644
--- a/ring-android/jni/configurationmanager.i
+++ b/ring-android/jni/configurationmanager.i
@@ -29,102 +29,162 @@
 
 %header %{
 #include "dring/dring.h"
+#include "dring/configurationmanager_interface.h"
 
 class ConfigurationCallback {
 public:
     virtual ~ConfigurationCallback(){}
-    virtual void configOnVolumeChange(const std::string& device, int value){}
-    virtual void configOnAccountsChange(void){}
-    virtual void configOnHistoryChange(void){}
-    virtual void configOnStunStatusFail(const std::string& account_id){}
-    virtual void configOnRegistrationStateChange(const std::string& account_id, int state){}
-    virtual void configOnSipRegistrationStateChange(const std::string& account_id, const std::string& state, int code){}
-    virtual void configOnVolatileAccountsChange(const std::string& account_id, const std::map<std::string, std::string>& details){}
-    virtual void configOnError(int alert){}
+    virtual void volumeChanged(const std::string& device, int value){}
+    virtual void accountsChanged(void){}
+    virtual void historyChanged(void){}
+    virtual void stunStatusFailure(const std::string& account_id){}
+    virtual void registrationStateChanged(const std::string& account_id, const std::string& state, int code, const std::string& detail_str){}
+    virtual void volatileAccountDetailsChanged(const std::string& account_id, const std::map<std::string, std::string>& details){}
+    virtual void incomingAccountMessage(const std::string& /*account_id*/, const std::string& /*from*/, const std::string& /*message*/){}
+    virtual void incomingTrustRequest(const std::string& /*account_id*/, const std::string& /*from*/, time_t received){}
+
+    virtual void certificatePinned(const std::string& /*certId*/){}
+    virtual void certificatePathPinned(const std::string& /*path*/, const std::vector<std::string>& /*certId*/){}
+    virtual void certificateExpired(const std::string& /*certId*/){}
+    virtual void certificateStateChanged(const std::string& /*account_id*/, const std::string& /*certId*/, const std::string& /*state*/){}
+
+    virtual void errorAlert(int alert){}
     virtual std::vector<int32_t> configGetHardwareAudioFormat(void){}
 };
 %}
 
 %feature("director") ConfigurationCallback;
 
-std::map<std::string, std::string> sflph_config_get_account_details(const std::string& account_id);
-void sflph_config_set_account_details(const std::string& account_id, const std::map<std::string, std::string>& details);
-std::map<std::string, std::string> sflph_config_get_account_template(void);
-std::string sflph_config_add_account(const std::map<std::string, std::string>& details);
-void sflph_config_remove_account(const std::string& account_id);
-std::vector<std::string> sflph_config_get_account_list(void);
-void sflph_config_send_register(const std::string& account_id, bool enable);
-void sflph_config_register_all_accounts(void);
-std::map<std::string, std::string> sflph_config_get_tls_default_settings(void);
-std::vector<int> sflph_config_get_audio_codec_list(void);
-std::vector<std::string> sflph_config_get_supported_tls_method(void);
-std::vector<std::string> sflph_config_get_audio_codec_details(int payload);
-std::vector<int> sflph_config_get_active_audio_codec_list(const std::string& account_id);
-void sflph_config_set_active_audio_codec_list(const std::vector<std::string>& list, const std::string& account_id);
-std::vector<std::string> sflph_config_get_audio_plugin_list(void);
-void sflph_config_set_audio_plugin(const std::string& audio_plugin);
-std::vector<std::string> sflph_config_get_audio_output_device_list();
-void sflph_config_set_audio_output_device(int index);
-void sflph_config_set_audio_input_device(int index);
-void sflph_config_set_audio_ringtone_device(int index);
-std::vector<std::string> sflph_config_get_audio_input_device_list(void);
-std::vector<std::string> sflph_config_get_current_audio_devices_index(void);
-int sflph_config_get_audio_input_device_index(const std::string& name);
-int sflph_config_get_audio_output_device_index(const std::string& name);
-std::string sflph_config_get_current_audio_output_plugin(void);
-bool sflph_config_get_noise_suppress_state(void);
-void sflph_config_set_noise_suppress_state(bool state);
-bool sflph_config_is_agc_enabled(void);
-void sflph_config_enable_agc(bool enabled);
-void sflph_config_mute_dtmf(bool mute);
-bool sflph_config_is_dtmf_muted(void);
-bool sflph_config_is_capture_muted(void);
-void sflph_config_mute_capture(bool mute);
-bool sflph_config_is_playback_muted(void);
-void sflph_config_mute_playback(int mute);
-std::map<std::string, std::string> sflph_config_get_ringtone_list(void);
-std::string sflph_config_get_audio_manager(void);
-bool sflph_config_set_audio_manager(const std::string& api);
-std::vector<std::string> sflph_config_get_supported_audio_managers(void);
-int sflph_config_is_iax2_enabled(void);
-std::string sflph_config_get_record_path(void);
-void sflph_config_set_record_path(const std::string& path);
-bool sflph_config_is_always_recording(void);
-void sflph_config_set_always_recording(bool rec);
-void sflph_config_set_history_limit(int days);
-int sflph_config_get_history_limit(void);
-void sflph_config_clear_history(void);
-void sflph_config_set_accounts_order(const std::string& order);
-std::map<std::string, std::string> sflph_config_get_hook_settings(void);
-void sflph_config_set_hook_settings(const std::map<std::string, std::string>& settings);
-std::vector<std::map<std::string, std::string> > sflph_config_get_history(void);
-std::map<std::string, std::string> sflph_config_get_tls_settings();
-void sflph_config_set_tls_settings(const std::map< std::string, std::string >& settings);
-std::map<std::string, std::string> sflph_config_get_ip2ip_details(void);
-std::vector<std::map<std::string, std::string> > sflph_config_get_credentials(const std::string& account_id);
-void sflph_config_set_credentials(const std::string& account_id, const std::vector<std::map<std::string, std::string> >& details);
-std::string sflph_config_get_addr_from_interface_name(const std::string& interface);
-std::vector<std::string> sflph_config_get_all_ip_interface(void);
-std::vector<std::string> sflph_config_get_all_ip_interface_by_name(void);
-std::map<std::string, std::string> sflph_config_get_shortcuts();
-void sflph_config_set_shortcuts(const std::map<std::string, std::string>& shortcuts);
-void sflph_config_set_volume(const std::string& device, double value);
-double sflph_config_get_volume(const std::string& device);
-bool sflph_config_check_for_private_key(const std::string& pem_path);
-bool sflph_config_check_certificate_validity(const std::string& ca_path, const std::string& pem_path);
-bool sflph_config_check_hostname_certificate(const std::string& host, const std::string& port);
+namespace DRing {
 
+std::map<std::string, std::string> getAccountDetails(const std::string& accountID);
+std::map<std::string, std::string> getVolatileAccountDetails(const std::string& accountID);
+void setAccountDetails(const std::string& accountID, const std::map<std::string, std::string>& details);
+std::map<std::string, std::string> getAccountTemplate(const std::string& accountType);
+std::string addAccount(const std::map<std::string, std::string>& details);
+void removeAccount(const std::string& accountID);
+std::vector<std::string> getAccountList();
+void sendRegister(const std::string& accountID, bool enable);
+void registerAllAccounts(void);
+void sendAccountTextMessage(const std::string& accountID, const std::string& to, const std::string& message);
+
+std::map<std::string, std::string> getTlsDefaultSettings();
+
+std::vector<unsigned> getCodecList();
+std::vector<std::string> getSupportedTlsMethod();
+std::vector<std::string> getSupportedCiphers(const std::string& accountID);
+std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId);
+bool setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details);
+std::vector<unsigned> getActiveCodecList(const std::string& accountID);
+
+void setActiveCodecList(const std::string& accountID, const std::vector<unsigned>& list);
+
+std::vector<std::string> getAudioPluginList();
+void setAudioPlugin(const std::string& audioPlugin);
+std::vector<std::string> getAudioOutputDeviceList();
+void setAudioOutputDevice(int32_t index);
+void setAudioInputDevice(int32_t index);
+void setAudioRingtoneDevice(int32_t index);
+std::vector<std::string> getAudioInputDeviceList();
+std::vector<std::string> getCurrentAudioDevicesIndex();
+int32_t getAudioInputDeviceIndex(const std::string& name);
+int32_t getAudioOutputDeviceIndex(const std::string& name);
+std::string getCurrentAudioOutputPlugin();
+bool getNoiseSuppressState();
+void setNoiseSuppressState(bool state);
+
+bool isAgcEnabled();
+void setAgcState(bool enabled);
+
+void muteDtmf(bool mute);
+bool isDtmfMuted();
+
+bool isCaptureMuted();
+void muteCapture(bool mute);
+bool isPlaybackMuted();
+void mutePlayback(bool mute);
+
+std::string getAudioManager();
+bool setAudioManager(const std::string& api);
+
+int32_t isIax2Enabled();
+std::string getRecordPath();
+void setRecordPath(const std::string& recPath);
+bool getIsAlwaysRecording();
+void setIsAlwaysRecording(bool rec);
+
+void setHistoryLimit(int32_t days);
+int32_t getHistoryLimit();
+
+void setAccountsOrder(const std::string& order);
+
+std::map<std::string, std::string> getHookSettings();
+void setHookSettings(const std::map<std::string, std::string>& settings);
+
+std::map<std::string, std::string> getIp2IpDetails();
+
+std::vector<std::map<std::string, std::string> > getCredentials(const std::string& accountID);
+void setCredentials(const std::string& accountID, const std::vector<std::map<std::string, std::string> >& details);
+
+std::string getAddrFromInterfaceName(const std::string& interface);
+
+std::vector<std::string> getAllIpInterface();
+std::vector<std::string> getAllIpInterfaceByName();
+
+std::map<std::string, std::string> getShortcuts();
+void setShortcuts(const std::map<std::string, std::string> &shortcutsMap);
+
+void setVolume(const std::string& device, double value);
+double getVolume(const std::string& device);
+
+/*
+ * Security
+ */
+std::map<std::string, std::string> validateCertificate(const std::string& accountId,
+    const std::string& certificate, const std::string& privateKey);
+std::map<std::string, std::string> validateCertificateRaw(const std::string& accountId,
+    const std::vector<uint8_t>& certificate);
+std::map<std::string, std::string> getCertificateDetails(const std::string& certificate);
+std::map<std::string, std::string> getCertificateDetailsRaw(const std::vector<uint8_t>& certificate);
+
+std::vector<std::string> getPinnedCertificates();
+
+std::string pinCertificate(const std::vector<uint8_t>& certificate, bool local);
+bool unpinCertificate(const std::string& certId);
+
+void pinCertificatePath(const std::string& path);
+unsigned unpinCertificatePath(const std::string& path);
+
+bool pinRemoteCertificate(const std::string& accountId, const std::string& certId);
+bool setCertificateStatus(const std::string& account, const std::string& certId, const std::string& status);
+std::vector<std::string> getCertificatesByStatus(const std::string& account, const std::string& status);
+
+/* contact requests */
+std::map<std::string, std::string> getTrustRequests(const std::string& accountId);
+bool acceptTrustRequest(const std::string& accountId, const std::string& from);
+bool discardTrustRequest(const std::string& accountId, const std::string& from);
+
+void sendTrustRequest(const std::string& accountId, const std::string& to);
+
+}
 
 class ConfigurationCallback {
 public:
-    virtual ~ConfigurationCallback();
-    virtual void configOnVolumeChange(const std::string& device, int value);
-    virtual void configOnAccountsChange(void);
-    virtual void configOnHistoryChange(void);
-    virtual void configOnStunStatusFail(const std::string& account_id);
-    virtual void configOnRegistrationStateChange(const std::string& account_id, int state);
-    virtual void configOnSipRegistrationStateChange(const std::string& account_id, const std::string& state, int code);
-    virtual void configOnError(int alert);
-    virtual std::vector<int32_t> configGetHardwareAudioFormat(void);
-};
+    virtual ~ConfigurationCallback(){}
+    virtual void volumeChanged(const std::string& device, int value){}
+    virtual void accountsChanged(void){}
+    virtual void historyChanged(void){}
+    virtual void stunStatusFailure(const std::string& account_id){}
+    virtual void registrationStateChanged(const std::string& account_id, const std::string& state, int code, const std::string& detail_str){}
+    virtual void volatileAccountDetailsChanged(const std::string& account_id, const std::map<std::string, std::string>& details){}
+    virtual void incomingAccountMessage(const std::string& /*account_id*/, const std::string& /*from*/, const std::string& /*message*/){}
+    virtual void incomingTrustRequest(const std::string& /*account_id*/, const std::string& /*from*/, time_t received){}
 
+    virtual void certificatePinned(const std::string& /*certId*/){}
+    virtual void certificatePathPinned(const std::string& /*path*/, const std::vector<std::string>& /*certId*/){}
+    virtual void certificateExpired(const std::string& /*certId*/){}
+    virtual void certificateStateChanged(const std::string& /*account_id*/, const std::string& /*certId*/, const std::string& /*state*/){}
+
+    virtual void errorAlert(int alert){}
+    virtual std::vector<int32_t> configGetHardwareAudioFormat(void){}
+};
\ No newline at end of file
diff --git a/ring-android/jni/jni_interface.i b/ring-android/jni/jni_interface.i
index 2933ae4..153200b 100644
--- a/ring-android/jni/jni_interface.i
+++ b/ring-android/jni/jni_interface.i
@@ -39,6 +39,11 @@
 %include "std_map.i";
 %include "std_vector.i";
 %include "stdint.i";
+%header %{
+
+#include <android/log.h>
+
+%}
 
 /* void* shall be handled as byte arrays */
 %typemap(jni) void * "void *"
@@ -57,11 +62,63 @@
 }
 
 namespace std {
+
+    %typemap(javacode) map<string, string> %{
+      public $javaclassname(java.util.Map<String,String> in) {
+        for (java.util.Map.Entry<String, String> entry : in.entrySet()) {
+          this.set(entry.getKey(), entry.getValue());
+        }
+      }
+      public java.util.Map<String,String> toNative() {
+        java.util.Map<String,String> out = new java.util.HashMap<String,String>();
+        StringVect keys = keys();
+        for (String s : keys)
+          out.put(s, get(s));
+        return out;
+      }
+    %}
+    %extend map<string, string> {
+        std::vector<std::string> keys() const {
+            std::vector<std::string> k;
+            k.reserve($self->size());
+            for (const auto& i : *$self)
+                k.push_back(i.first);
+            return k;
+        }
+    }
     %template(StringMap) map<string, string>;
+
+    %typemap(javabase) vector<string> "java.util.AbstractList<String>"
+    %typemap(javainterface) vector<string> "java.util.RandomAccess"
+    %extend vector<string> {
+      value_type set(int i, const value_type& in) throw (std::out_of_range) {
+        const std::string old = $self->at(i);
+        $self->at(i) = in;
+        return old;
+      }
+      bool add(const value_type& in) {
+          $self->push_back(in);
+          return true;
+      }
+      int32_t size() const {
+        return $self->size();
+      }
+    }
     %template(StringVect) vector<string>;
+
+    %typemap(javacode) vector< map<string,string> > %{
+      public java.util.ArrayList<java.util.Map<String, String>> toNative() {
+        java.util.ArrayList<java.util.Map<String, String>> out = new java.util.ArrayList<>();
+        for (int i = 0; i < size(); ++i)
+          out.add(get(i).toNative());
+        return out;
+      }
+    %}
     %template(VectMap) vector< map<string,string> >;
     %template(IntegerMap) map<string,int>;
     %template(IntVect) vector<int32_t>;
+    %template(UintVect) vector<uint32_t>;
+    %template(Blob) vector<uint8_t>;
 }
 
 /* not parsed by SWIG but needed by generated C files */
@@ -79,62 +136,99 @@
 %include "callmanager.i"
 %include "configurationmanager.i"
 
+#include "dring/callmanager_interface.h"
+
 %inline %{
 /* some functions that need to be declared in *_wrap.cpp
  * that are not declared elsewhere in the c++ code
  */
-void init(ConfigurationCallback* conf_cb, Callback* call_cb) {
 
+void init(ConfigurationCallback* confM, Callback* callM) {
     using namespace std::placeholders;
-    using std::bind;
 
+    using std::bind;
+    using DRing::exportable_callback;
+    using DRing::CallSignal;
+    using DRing::ConfigurationSignal;
+
+    using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
 
     // Call event handlers
-    sflph_call_ev_handlers callEvHandlers = {
-        bind(&Callback::callOnStateChange, call_cb, _1, _2),
-        bind(&Callback::callOnTransferFail, call_cb),
-        bind(&Callback::callOnTransferSuccess, call_cb),
-        bind(&Callback::callOnRecordPlaybackStopped, call_cb, _1),
-        bind(&Callback::callOnVoiceMailNotify, call_cb, _1, _2),
-        bind(&Callback::callOnIncomingMessage, call_cb, _1, _2, _3),
-        bind(&Callback::callOnIncomingCall, call_cb, _1, _2, _3),
-        bind(&Callback::callOnRecordPlaybackFilepath, call_cb, _1, _2),
-        bind(&Callback::callOnConferenceCreated, call_cb, _1),
-        bind(&Callback::callOnConferenceChanged, call_cb, _1, _2),
-        bind(&Callback::callOnUpdatePlaybackScale, call_cb, _1, _2, _3),
-        bind(&Callback::callOnConferenceRemove, call_cb, _1),
-        bind(&Callback::callOnNewCall, call_cb, _1, _2, _3),
-        bind(&Callback::callOnSipCallStateChange, call_cb, _1, _2, _3),
-        bind(&Callback::callOnRecordStateChange, call_cb, _1, _2),
-        bind(&Callback::callOnSecureSdesOn, call_cb, _1),
-        bind(&Callback::callOnSecureSdesOff, call_cb, _1),
-        bind(&Callback::callOnSecureZrtpOn, call_cb, _1, _2),
-        bind(&Callback::callOnSecureZrtpOff, call_cb, _1),
-        bind(&Callback::callOnShowSas, call_cb, _1, _2, _3),
-        bind(&Callback::callOnZrtpNotSuppOther, call_cb, _1),
-        bind(&Callback::callOnZrtpNegotiationFail, call_cb, _1, _2, _3),
-        bind(&Callback::callOnRtcpReceiveReport, call_cb, _1, _2)
+    const std::map<std::string, SharedCallback> callEvHandlers = {
+        exportable_callback<CallSignal::StateChange>(bind(&Callback::callStateChanged, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::TransferFailed>(bind(&Callback::transferFailed, callM)),
+        exportable_callback<CallSignal::TransferSucceeded>(bind(&Callback::transferSucceeded, callM)),
+        exportable_callback<CallSignal::RecordPlaybackStopped>(bind(&Callback::recordPlaybackStopped, callM, _1)),
+        exportable_callback<CallSignal::VoiceMailNotify>(bind(&Callback::voiceMailNotify, callM, _1, _2)),
+        exportable_callback<CallSignal::IncomingMessage>(bind(&Callback::incomingMessage, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::IncomingCall>(bind(&Callback::incomingCall, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::RecordPlaybackFilepath>(bind(&Callback::recordPlaybackFilepath, callM, _1, _2)),
+        exportable_callback<CallSignal::ConferenceCreated>(bind(&Callback::conferenceCreated, callM, _1)),
+        exportable_callback<CallSignal::ConferenceChanged>(bind(&Callback::conferenceChanged, callM, _1, _2)),
+        exportable_callback<CallSignal::UpdatePlaybackScale>(bind(&Callback::updatePlaybackScale, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::ConferenceRemoved>(bind(&Callback::conferenceRemoved, callM, _1)),
+        exportable_callback<CallSignal::NewCallCreated>(bind(&Callback::newCallCreated, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::RecordingStateChanged>(bind(&Callback::recordingStateChanged, callM, _1, _2)),
+        exportable_callback<CallSignal::SecureSdesOn>(bind(&Callback::secureSdesOn, callM, _1)),
+        exportable_callback<CallSignal::SecureSdesOff>(bind(&Callback::secureSdesOff, callM, _1)),
+        exportable_callback<CallSignal::SecureZrtpOn>(bind(&Callback::secureZrtpOn, callM, _1, _2)),
+        exportable_callback<CallSignal::SecureZrtpOff>(bind(&Callback::secureZrtpOff, callM, _1)),
+        exportable_callback<CallSignal::ShowSAS>(bind(&Callback::showSAS, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::ZrtpNotSuppOther>(bind(&Callback::zrtpNotSuppOther, callM, _1)),
+        exportable_callback<CallSignal::ZrtpNegotiationFailed>(bind(&Callback::zrtpNegotiationFailed, callM, _1, _2, _3)),
+        exportable_callback<CallSignal::RtcpReportReceived>(bind(&Callback::onRtcpReportReceived, callM, _1, _2)),
+        exportable_callback<CallSignal::PeerHold>(bind(&Callback::peerHold, callM, _1, _2))
     };
 
     // Configuration event handlers
-    sflph_config_ev_handlers configEvHandlers = {
-        bind(&ConfigurationCallback::configOnVolumeChange, conf_cb, _1, _2),
-        bind(&ConfigurationCallback::configOnAccountsChange, conf_cb),
-        bind(&ConfigurationCallback::configOnHistoryChange, conf_cb),
-        bind(&ConfigurationCallback::configOnStunStatusFail, conf_cb, _1),
-        bind(&ConfigurationCallback::configOnRegistrationStateChange, conf_cb, _1, _2),
-        bind(&ConfigurationCallback::configOnSipRegistrationStateChange, conf_cb, _1, _2, _3),
-        bind(&ConfigurationCallback::configOnVolatileAccountsChange, conf_cb, _1, _2),
-        bind(&ConfigurationCallback::configOnError, conf_cb, _1)
+    const std::map<std::string, SharedCallback> configEvHandlers = {
+        exportable_callback<ConfigurationSignal::VolumeChanged>(bind(&ConfigurationCallback::volumeChanged, confM, _1, _2)),
+        exportable_callback<ConfigurationSignal::AccountsChanged>(bind(&ConfigurationCallback::accountsChanged, confM)),
+        exportable_callback<ConfigurationSignal::StunStatusFailed>(bind(&ConfigurationCallback::stunStatusFailure, confM, _1)),
+        exportable_callback<ConfigurationSignal::RegistrationStateChanged>(bind(&ConfigurationCallback::registrationStateChanged, confM, _1, _2, _3, _4)),
+        exportable_callback<ConfigurationSignal::VolatileDetailsChanged>(bind(&ConfigurationCallback::volatileAccountDetailsChanged, confM, _1, _2)),
+        exportable_callback<ConfigurationSignal::Error>(bind(&ConfigurationCallback::errorAlert, confM, _1)),
+        exportable_callback<ConfigurationSignal::IncomingAccountMessage>(bind(&ConfigurationCallback::incomingAccountMessage, confM, _1, _2, _3 )),
+        exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&ConfigurationCallback::incomingTrustRequest, confM, _1, _2, _3 )),
+        exportable_callback<ConfigurationSignal::CertificatePinned>(bind(&ConfigurationCallback::certificatePinned, confM, _1 )),
+        exportable_callback<ConfigurationSignal::CertificatePathPinned>(bind(&ConfigurationCallback::certificatePathPinned, confM, _1, _2 )),
+        exportable_callback<ConfigurationSignal::CertificateExpired>(bind(&ConfigurationCallback::certificateExpired, confM, _1 )),
+        exportable_callback<ConfigurationSignal::CertificateStateChanged>(bind(&ConfigurationCallback::certificateStateChanged, confM, _1, _2, _3 )),
     };
 
-    // All event handlers
-    sflph_ev_handlers evHandlers = {};
-    evHandlers.call_ev_handlers = callEvHandlers;
-    evHandlers.config_ev_handlers = configEvHandlers;
-    sflph_init(&evHandlers, 0);
+/*
+    // Presence event handlers
+    const std::map<std::string, SharedCallback> presEvHandlers = {
+        exportable_callback<PresenceSignal::NewServerSubscriptionRequest>(bind(&DBusPresenceManager::newServerSubscriptionRequest, presM, _1)),
+        exportable_callback<PresenceSignal::ServerError>(bind(&DBusPresenceManager::serverError, presM, _1, _2, _3)),
+        exportable_callback<PresenceSignal::NewBuddyNotification>(bind(&DBusPresenceManager::newBuddyNotification, presM, _1, _2, _3, _4)),
+        exportable_callback<PresenceSignal::SubscriptionStateChanged>(bind(&DBusPresenceManager::subscriptionStateChanged, presM, _1, _2, _3)),
+    };
+
+#ifdef RING_VIDEO
+    // Video event handlers
+    const std::map<std::string, SharedCallback> videoEvHandlers = {
+        exportable_callback<VideoSignal::DeviceEvent>(bind(&DBusVideoManager::deviceEvent, videoM)),
+        exportable_callback<VideoSignal::DecodingStarted>(bind(&DBusVideoManager::startedDecoding, videoM, _1, _2, _3, _4, _5)),
+        exportable_callback<VideoSignal::DecodingStopped>(bind(&DBusVideoManager::stoppedDecoding, videoM, _1, _2, _3)),
+    };
+#endif
+*/
+
+    if (!DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_DEBUG)))
+        return -1;
+
+    registerCallHandlers(callEvHandlers);
+    registerConfHandlers(configEvHandlers);
+/*    registerPresHandlers(presEvHandlers);
+#ifdef RING_VIDEO
+    registerVideoHandlers(videoEvHandlers);
+#endif
+*/
+    DRing::start();
 }
 
+
 %}
 #ifndef SWIG
 /* some bad declarations */
diff --git a/ring-android/jni/managerimpl.i b/ring-android/jni/managerimpl.i
index 59b89c8..3e6409e 100644
--- a/ring-android/jni/managerimpl.i
+++ b/ring-android/jni/managerimpl.i
@@ -33,13 +33,16 @@
 #include "dring/dring.h"
 %}
 
+namespace DRing {
 
 /**
  * Finalizes libsflphone, freeing any resource allocated by the library.
  */
-void sflph_fini(void);
+void fini(void);
 
 /**
  * Poll for SIP/IAX events
  */
-void sflph_poll_events(void);
+void pollEvents(void);
+
+}
diff --git a/ring-android/src/cx/ring/client/CallActivity.java b/ring-android/src/cx/ring/client/CallActivity.java
index 8f664cd..9f2071c 100644
--- a/ring-android/src/cx/ring/client/CallActivity.java
+++ b/ring-android/src/cx/ring/client/CallActivity.java
@@ -220,8 +220,8 @@
             CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
             try {
                 String accountID = (String) mService.getAccountList().get(1); // We use the first account to place outgoing calls
-                HashMap<String, String> details = (HashMap<String, String>) mService.getAccountDetails(accountID);
-                ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) mService.getCredentials(accountID);
+                Map<String, String> details = (Map<String, String>) mService.getAccountDetails(accountID);
+                ArrayList<Map<String, String>> credentials = (ArrayList<Map<String, String>>) mService.getCredentials(accountID);
                 Account acc = new Account(accountID, details, credentials);
 
                 Bundle args = new Bundle();
diff --git a/ring-android/src/cx/ring/fragments/AccountCreationFragment.java b/ring-android/src/cx/ring/fragments/AccountCreationFragment.java
index c6c272a..331527b 100644
--- a/ring-android/src/cx/ring/fragments/AccountCreationFragment.java
+++ b/ring-android/src/cx/ring/fragments/AccountCreationFragment.java
@@ -179,7 +179,7 @@
     private void initCreation() {
 
         try {
-            HashMap<String, String> accountDetails = (HashMap<String, String>) mCallbacks.getService().getAccountTemplate();
+            HashMap<String, String> accountDetails = (HashMap<String, String>) mCallbacks.getService().getAccountTemplate("SIP");
             accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS, mAlias);
             accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, mHostname);
             accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, mUsername);
diff --git a/ring-android/src/cx/ring/fragments/AudioManagementFragment.java b/ring-android/src/cx/ring/fragments/AudioManagementFragment.java
index 71789e4..ec688e0 100644
--- a/ring-android/src/cx/ring/fragments/AudioManagementFragment.java
+++ b/ring-android/src/cx/ring/fragments/AudioManagementFragment.java
@@ -105,7 +105,7 @@
         mCallbacks = (Callbacks) activity;
         try {
             codecs = (ArrayList<Codec>) mCallbacks.getService().getAudioCodecList(mCallbacks.getAccount().getAccountID());
-            mCallbacks.getService().getRingtoneList();
+            //mCallbacks.getService().getRingtoneList();
         } catch (RemoteException e) {
             e.printStackTrace();
         }
@@ -135,11 +135,11 @@
 
     private ListView mPrefsList;
 
-    public ArrayList<String> getActiveCodecList() {
-        ArrayList<String> results = new ArrayList<String>();
+    public ArrayList<Long> getActiveCodecList() {
+        ArrayList<Long> results = new ArrayList<>();
         for (int i = 0; i < listAdapter.getCount(); ++i) {
             if (listAdapter.getItem(i).isEnabled()) {
-                results.add(listAdapter.getItem(i).getPayload().toString());
+                results.add(listAdapter.getItem(i).getPayload());
             }
         }
         return results;
diff --git a/ring-android/src/cx/ring/fragments/DetailsHistoryEntryFragment.java b/ring-android/src/cx/ring/fragments/DetailsHistoryEntryFragment.java
index 0ca2b98..797717b 100644
--- a/ring-android/src/cx/ring/fragments/DetailsHistoryEntryFragment.java
+++ b/ring-android/src/cx/ring/fragments/DetailsHistoryEntryFragment.java
@@ -52,6 +52,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.NavigableMap;
 import java.util.Random;
 
@@ -135,8 +136,8 @@
             @Override
             public void onClick(View v) {
                 try {
-                    HashMap<String, String> details = (HashMap<String, String>) mCallbacks.getService().getAccountDetails(toDisplay.getAccountID());
-                    ArrayList<HashMap<String, String>> creds = (ArrayList<HashMap<String, String>>) mCallbacks.getService().getCredentials(toDisplay.getAccountID());
+                    Map<String, String> details = (Map<String, String>) mCallbacks.getService().getAccountDetails(toDisplay.getAccountID());
+                    ArrayList<Map<String, String>> creds = (ArrayList<Map<String, String>>) mCallbacks.getService().getCredentials(toDisplay.getAccountID());
                     Bundle args = new Bundle();
                     args.putString(SipCall.ID, Integer.toString(Math.abs(new Random().nextInt())));
                     args.putParcelable(SipCall.ACCOUNT, new Account(toDisplay.getAccountID(), details, creds));
diff --git a/ring-android/src/cx/ring/fragments/NestedSettingsFragment.java b/ring-android/src/cx/ring/fragments/NestedSettingsFragment.java
index 81a66ea..87e3581 100644
--- a/ring-android/src/cx/ring/fragments/NestedSettingsFragment.java
+++ b/ring-android/src/cx/ring/fragments/NestedSettingsFragment.java
@@ -88,20 +88,20 @@
     }
 
     public boolean checkCertificate(String crt) {
-        try {
-             return mCallbacks.getService().checkCertificateValidity(crt);
+        /*try {
+             return mCallbacks.getService().validateCertificate(crt);
         } catch (RemoteException e) {
             e.printStackTrace();
-        }
+        }*/
         return false;
     }
 
     public boolean findRSAKey(String pemPath) {
-        try {
+        /*try {
             return mCallbacks.getService().checkForPrivateKey(pemPath);
         } catch (RemoteException e) {
             e.printStackTrace();
-        }
+        }*/
         return false;
     }
 
diff --git a/ring-android/src/cx/ring/loaders/AccountsLoader.java b/ring-android/src/cx/ring/loaders/AccountsLoader.java
index 8e038ff..0f9eb39 100644
--- a/ring-android/src/cx/ring/loaders/AccountsLoader.java
+++ b/ring-android/src/cx/ring/loaders/AccountsLoader.java
@@ -33,6 +33,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 import android.support.v4.content.AsyncTaskLoader;
 import cx.ring.model.account.Account;
@@ -70,17 +71,17 @@
 
         try {
             ArrayList<String> accountIDs = (ArrayList<String>) service.getAccountList();
-            HashMap<String, String> details;
-            ArrayList<HashMap<String, String>> credentials;
+            Map<String, String> details;
+            ArrayList<Map<String, String>> credentials;
             for (String id : accountIDs) {
 
                 if (id.contentEquals(ACCOUNT_IP2IP)) {
                     details = (HashMap<String, String>) service.getAccountDetails(id);
-                    IP2IP = new Account(ACCOUNT_IP2IP, details, new ArrayList<HashMap<String, String>>()); // Empty credentials
+                    IP2IP = new Account(ACCOUNT_IP2IP, details, new ArrayList<Map<String, String>>()); // Empty credentials
                     continue;
                 }
-                details = (HashMap<String, String>) service.getAccountDetails(id);
-                credentials = (ArrayList<HashMap<String, String>>) service.getCredentials(id);
+                details = (Map<String, String>) service.getAccountDetails(id);
+                credentials = (ArrayList<Map<String, String>>) service.getCredentials(id);
                 Account tmp = new Account(id, details, credentials);
 
                 accounts.add(tmp);
diff --git a/ring-android/src/cx/ring/model/Codec.java b/ring-android/src/cx/ring/model/Codec.java
index 0bef48f..72cc8a6 100644
--- a/ring-android/src/cx/ring/model/Codec.java
+++ b/ring-android/src/cx/ring/model/Codec.java
@@ -31,25 +31,38 @@
 
 package cx.ring.model;
 
+import cx.ring.service.StringMap;
 import cx.ring.service.StringVect;
 
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.Log;
+
+import java.util.Map;
 
 public class Codec implements Parcelable {
-    int payload;
+    long payload;
     String name;
+    String type;
     String sampleRate;
     String bitRate;
     String channels;
     boolean enabled;
 
-    public Codec(int i, StringVect audioCodecDetails, boolean b) {
+    public Codec(long i, StringMap audioCodecDetails, boolean b) {
+        Log.d("CodecDetail", Long.toString(i));
+        for (String s : audioCodecDetails.keys()) {
+            Log.d("CodecDetail", s + " -> " + audioCodecDetails.get(s));
+        }
         payload = i;
-        name = audioCodecDetails.get(0);
-        sampleRate = audioCodecDetails.get(1);
-        bitRate = audioCodecDetails.get(2);
-        channels = audioCodecDetails.get(3);
+        name = audioCodecDetails.get("CodecInfo.name");
+        type = audioCodecDetails.get("CodecInfo.type");
+        if (audioCodecDetails.has_key("CodecInfo.sampleRate"))
+            sampleRate = audioCodecDetails.get("CodecInfo.sampleRate");
+        if (audioCodecDetails.has_key("CodecInfo.bitrate"))
+            bitRate = audioCodecDetails.get("CodecInfo.bitrate");
+        if (audioCodecDetails.has_key("CodecInfo.channelNumber"))
+            channels = audioCodecDetails.get("CodecInfo.channelNumber");
         enabled = b;
     }
 
@@ -60,7 +73,7 @@
 
     @Override
     public void writeToParcel(Parcel out, int flags) {
-        out.writeInt(payload);
+        out.writeLong(payload);
         out.writeString(name);
         out.writeString(sampleRate);
         out.writeString(bitRate);
@@ -103,7 +116,7 @@
     }
 
     public CharSequence getPayload() {
-        return Integer.toString(payload);
+        return Long.toString(payload);
     }
 
     public CharSequence getName() {
diff --git a/ring-android/src/cx/ring/model/account/Account.java b/ring-android/src/cx/ring/model/account/Account.java
index c129dde..b6eaee3 100644
--- a/ring-android/src/cx/ring/model/account/Account.java
+++ b/ring-android/src/cx/ring/model/account/Account.java
@@ -34,6 +34,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -47,13 +48,13 @@
     private AccountDetailTls tlsDetails = null;
     private ArrayList<AccountCredentials> credentialsDetails;
 
-    public Account(String bAccountID, HashMap<String, String> details, ArrayList<HashMap<String, String>> credentials) {
+    public Account(String bAccountID, final Map<String, String> details, ArrayList<Map<String, String>> credentials) {
         accountID = bAccountID;
         basicDetails = new AccountDetailBasic(details);
         advancedDetails = new AccountDetailAdvanced(details);
         srtpDetails = new AccountDetailSrtp(details);
         tlsDetails = new AccountDetailTls(details);
-        credentialsDetails = new ArrayList<AccountCredentials>();
+        credentialsDetails = new ArrayList<>();
         for (int i = 0; i < credentials.size(); ++i) {
             credentialsDetails.add(new AccountCredentials(credentials.get(i)));
         }
diff --git a/ring-android/src/cx/ring/model/account/AccountCredentials.java b/ring-android/src/cx/ring/model/account/AccountCredentials.java
index bd0eebb..6a747fe 100644
--- a/ring-android/src/cx/ring/model/account/AccountCredentials.java
+++ b/ring-android/src/cx/ring/model/account/AccountCredentials.java
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 public class AccountCredentials implements AccountDetail {
 
@@ -45,7 +46,7 @@
         return preference;
     }
 
-    public AccountCredentials(HashMap<String, String> pref) {
+    public AccountCredentials(Map<String, String> pref) {
         privateArray = getPreferenceEntries();
 
         for (AccountDetail.PreferenceEntry p : privateArray) {
diff --git a/ring-android/src/cx/ring/model/account/AccountDetailAdvanced.java b/ring-android/src/cx/ring/model/account/AccountDetailAdvanced.java
index 2d09ba5..41358c8 100644
--- a/ring-android/src/cx/ring/model/account/AccountDetailAdvanced.java
+++ b/ring-android/src/cx/ring/model/account/AccountDetailAdvanced.java
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 import android.util.Log;
 
@@ -55,7 +56,7 @@
 
     private ArrayList<AccountDetail.PreferenceEntry> privateArray;
 
-    public AccountDetailAdvanced(HashMap<String, String> pref) {
+    public AccountDetailAdvanced(Map<String, String> pref) {
         privateArray = new ArrayList<AccountDetail.PreferenceEntry>();
 
         for (String key : pref.keySet()) {
diff --git a/ring-android/src/cx/ring/model/account/AccountDetailBasic.java b/ring-android/src/cx/ring/model/account/AccountDetailBasic.java
index bec769e..6e95f12 100644
--- a/ring-android/src/cx/ring/model/account/AccountDetailBasic.java
+++ b/ring-android/src/cx/ring/model/account/AccountDetailBasic.java
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 import android.util.Log;
 
@@ -46,7 +47,7 @@
 
     private ArrayList<AccountDetail.PreferenceEntry> privateArray;
 
-    public AccountDetailBasic(HashMap<String, String> pref) {
+    public AccountDetailBasic(Map<String, String> pref) {
         privateArray = new ArrayList<AccountDetail.PreferenceEntry>();
 
         for (String key : pref.keySet()) {
diff --git a/ring-android/src/cx/ring/model/account/AccountDetailSrtp.java b/ring-android/src/cx/ring/model/account/AccountDetailSrtp.java
index 29b3ef5..0064aa4 100644
--- a/ring-android/src/cx/ring/model/account/AccountDetailSrtp.java
+++ b/ring-android/src/cx/ring/model/account/AccountDetailSrtp.java
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 public class AccountDetailSrtp implements AccountDetail {
 
@@ -54,7 +55,7 @@
         return preference;
     }
 
-    public AccountDetailSrtp(HashMap<String, String> pref) {
+    public AccountDetailSrtp(Map<String, String> pref) {
         privateArray = getPreferenceEntries();
         for (AccountDetail.PreferenceEntry p : privateArray) {
             p.mValue = pref.get(p.mKey);
diff --git a/ring-android/src/cx/ring/model/account/AccountDetailTls.java b/ring-android/src/cx/ring/model/account/AccountDetailTls.java
index 37054b6..595f9d8 100644
--- a/ring-android/src/cx/ring/model/account/AccountDetailTls.java
+++ b/ring-android/src/cx/ring/model/account/AccountDetailTls.java
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 public class AccountDetailTls implements AccountDetail {
 
@@ -64,7 +65,7 @@
         return preference;
     }
 
-    public AccountDetailTls(HashMap<String, String> pref) {
+    public AccountDetailTls(Map<String, String> pref) {
         privateArray = getPreferenceEntries();
 
         for (AccountDetail.PreferenceEntry p : privateArray) {
diff --git a/ring-android/src/cx/ring/service/CallManagerCallBack.java b/ring-android/src/cx/ring/service/CallManagerCallBack.java
index 622f58f..791fb79 100644
--- a/ring-android/src/cx/ring/service/CallManagerCallBack.java
+++ b/ring-android/src/cx/ring/service/CallManagerCallBack.java
@@ -8,6 +8,7 @@
 import cx.ring.utils.SwigNativeConverter;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Map;
 
 import cx.ring.model.CallContact;
@@ -44,7 +45,7 @@
     }
 
     @Override
-    public void callOnStateChange(String callID, String newState) {
+    public void callStateChanged(String callID, String newState, int detail_code) {
         Log.d(TAG, "on_call_state_changed : (" + callID + ", " + newState + ")");
 
         Conference toUpdate = mService.findConference(callID);
@@ -56,6 +57,7 @@
         Intent intent = new Intent(CALL_STATE_CHANGED);
         intent.putExtra("CallID", callID);
         intent.putExtra("State", newState);
+        intent.putExtra("DetailCode", detail_code);
 
         if (newState.equals("RINGING")) {
             toUpdate.setCallState(callID, SipCall.state.CALL_STATE_RINGING);
@@ -84,7 +86,7 @@
         } else if (newState.equals("FAILURE")) {
             toUpdate.setCallState(callID, SipCall.state.CALL_STATE_FAILURE);
             mService.getConferences().remove(toUpdate.getId());
-            Ringservice.sflph_call_hang_up(callID);
+            Ringservice.hangUp(callID);
         } else if (newState.equals("HOLD")) {
             toUpdate.setCallState(callID, SipCall.state.CALL_STATE_HOLD);
         } else if (newState.equals("UNHOLD")) {
@@ -96,13 +98,13 @@
 
 
     @Override
-    public void callOnIncomingCall(String accountID, String callID, String from) {
+    public void incomingCall(String accountID, String callID, String from) {
         Log.d(TAG, "on_incoming_call(" + accountID + ", " + callID + ", " + from + ")");
 
         try {
-            StringMap details = Ringservice.sflph_config_get_account_details(accountID);
-            VectMap credentials = Ringservice.sflph_config_get_credentials(accountID);
-            Account acc = new Account(accountID, SwigNativeConverter.convertAccountToNative(details), SwigNativeConverter.convertCredentialsToNative(credentials));
+            StringMap details = Ringservice.getAccountDetails(accountID);
+            VectMap credentials = Ringservice.getCredentials(accountID);
+            Account acc = new Account(accountID, details.toNative(), credentials.toNative());
 
             Bundle args = new Bundle();
             args.putString(SipCall.ID, callID);
@@ -142,12 +144,12 @@
     }
 
     @Override
-    public void callOnConferenceCreated(final String confID) {
+    public void conferenceCreated(final String confID) {
         Log.w(TAG, "CONFERENCE CREATED:" + confID);
         Intent intent = new Intent(CONF_CREATED);
         Conference created = new Conference(confID);
 
-        StringVect all_participants = Ringservice.sflph_call_get_participant_list(confID);
+        StringVect all_participants = Ringservice.getParticipantList(confID);
         Log.w(TAG, "all_participants:" + all_participants.size());
         for (int i = 0; i < all_participants.size(); ++i) {
             if (mService.getConferences().get(all_participants.get(i)) != null) {
@@ -172,7 +174,7 @@
     }
 
     @Override
-    public void callOnIncomingMessage(String ID, String from, String msg) {
+    public void incomingMessage(String ID, String from, String msg) {
         Log.w(TAG, "on_incoming_message:" + msg);
         Intent intent = new Intent(INCOMING_TEXT);
         intent.putExtra("CallID", ID);
@@ -198,7 +200,7 @@
     }
 
     @Override
-    public void callOnConferenceRemove(String confID) {
+    public void conferenceRemoved(String confID) {
         Log.i(TAG, "on_conference_removed:");
         Intent intent = new Intent(CONF_REMOVED);
         intent.putExtra("confID", confID);
@@ -214,7 +216,7 @@
     }
 
     @Override
-    public void callOnConferenceChanged(String confID, String state) {
+    public void conferenceChanged(String confID, String state) {
         Log.i(TAG, "on_conference_state_changed:");
         Intent intent = new Intent(CONF_CHANGED);
         intent.putExtra("confID", confID);
@@ -227,7 +229,7 @@
         Conference toModify = mService.getConferences().get(confID);
         toModify.setCallState(confID, state);
 
-        ArrayList<String> newParticipants = SwigNativeConverter.convertSwigToNative(Ringservice.sflph_call_get_participant_list(intent.getStringExtra("confID")));
+        ArrayList<String> newParticipants = SwigNativeConverter.convertSwigToNative(Ringservice.getParticipantList(intent.getStringExtra("confID")));
 
         if (toModify.getParticipants().size() < newParticipants.size()) {
             // We need to add the new participant to the conf
@@ -250,7 +252,7 @@
     }
 
     @Override
-    public void callOnRecordPlaybackFilepath(String id, String filename) {
+    public void recordPlaybackFilepath(String id, String filename) {
         Intent intent = new Intent();
         intent.putExtra("callID", id);
         intent.putExtra("file", filename);
@@ -258,7 +260,7 @@
     }
 
     @Override
-    public void callOnSecureSdesOn(String callID) {
+    public void secureSdesOn(String callID) {
         Log.i(TAG, "on_secure_sdes_on");
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
         call.setInitialized();
@@ -266,7 +268,7 @@
     }
 
     @Override
-    public void callOnSecureSdesOff(String callID) {
+    public void secureSdesOff(String callID) {
         Log.i(TAG, "on_secure_sdes_off");
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
         call.setInitialized();
@@ -274,7 +276,7 @@
     }
 
     @Override
-    public void callOnSecureZrtpOn(String callID, String cipher) {
+    public void secureZrtpOn(String callID, String cipher) {
         Log.i(TAG, "on_secure_zrtp_on");
         Intent intent = new Intent(ZRTP_ON);
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
@@ -286,7 +288,7 @@
     }
 
     @Override
-    public void callOnSecureZrtpOff(String callID) {
+    public void secureZrtpOff(String callID) {
         Log.i(TAG, "on_secure_zrtp_off");
         Intent intent = new Intent(ZRTP_OFF);
         intent.putExtra("callID", callID);
@@ -302,7 +304,7 @@
     }
 
     @Override
-    public void callOnShowSas(String callID, String sas, int verified) {
+    public void showSAS(String callID, String sas, int verified) {
         Log.i(TAG, "on_show_sas:" + sas);
         Intent intent = new Intent(DISPLAY_SAS);
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
@@ -317,7 +319,7 @@
     }
 
     @Override
-    public void callOnZrtpNotSuppOther(String callID) {
+    public void zrtpNotSuppOther(String callID) {
         Log.i(TAG, "on_zrtp_not_supported");
         Intent intent = new Intent(ZRTP_NOT_SUPPORTED);
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
@@ -329,7 +331,7 @@
     }
 
     @Override
-    public void callOnZrtpNegotiationFail(String callID, String reason, String severity) {
+    public void zrtpNegotiationFailed(String callID, String reason, String severity) {
         Log.i(TAG, "on_zrtp_negociation_failed");
         Intent intent = new Intent(ZRTP_NEGOTIATION_FAILED);
         SecureSipCall call = (SecureSipCall) mService.getCallById(callID);
@@ -341,7 +343,7 @@
     }
 
     @Override
-    public void callOnRtcpReceiveReport(String callID, IntegerMap stats) {
+    public void onRtcpReportReceived(String callID, IntegerMap stats) {
         Log.i(TAG, "on_rtcp_report_received");
         Intent intent = new Intent(RTCP_REPORT_RECEIVED);
         mService.sendBroadcast(intent);
diff --git a/ring-android/src/cx/ring/service/ConfigurationManagerCallback.java b/ring-android/src/cx/ring/service/ConfigurationManagerCallback.java
index 953a655..cf691ab 100644
--- a/ring-android/src/cx/ring/service/ConfigurationManagerCallback.java
+++ b/ring-android/src/cx/ring/service/ConfigurationManagerCallback.java
@@ -28,7 +28,7 @@
 public class ConfigurationManagerCallback extends ConfigurationCallback {
 
     private  SipService mService;
-    private static final String TAG = "ConfigurationManagerCallback";
+    private static final String TAG = "ConfigurationManagerCb";
 
     static public final String ACCOUNTS_CHANGED = "accounts-changed";
     static public final String ACCOUNT_STATE_CHANGED = "account-state-changed";
@@ -39,69 +39,30 @@
     }
 
     @Override
-    public void configOnVolumeChange(String device, int value) {
-        super.configOnVolumeChange(device, value);
+    public void volumeChanged(String device, int value) {
+        super.volumeChanged(device, value);
     }
 
     @Override
-    public void configOnAccountsChange() {
-        super.configOnAccountsChange();
+    public void accountsChanged() {
+        super.accountsChanged();
         Intent intent = new Intent(ACCOUNTS_CHANGED);
         mService.sendBroadcast(intent);
     }
 
     @Override
-    public void configOnStunStatusFail(String account_id) {
+    public void stunStatusFailure(String account_id) {
         Log.d(TAG, "configOnStunStatusFail : (" + account_id);
     }
 
     @Override
-    public void configOnRegistrationStateChange(String accoundID, int state) {
-        String strState = "";
-        switch (state){
-        case 0:
-            strState = "UNREGISTERED";
-            break;
-        case 1:
-            strState = "TRYING";
-            break;
-        case 2:
-            strState = "REGISTERED";
-            break;
-        case 3:
-            strState = "ERROR_GENERIC";
-            break;
-        case 4:
-            strState = "ERROR_AUTH";
-            break;
-        case 5:
-            strState = "ERROR_NETWORK";
-            break;
-        case 6:
-            strState = "ERROR_HOST";
-            break;
-        case 7:
-            strState = "ERROR_EXIST_STUN";
-            break;
-        case 8:
-            strState = "ERROR_NOT_ACCEPTABLE";
-            break;
-        case 9:
-            strState = "NUMBER_OF_STATES";
-            break;
-        }
-
-        sendAccountStateChangedMessage(accoundID, strState, 0);
+    public void registrationStateChanged(String account_id, String state, int code, String detail_str) {
+        sendAccountStateChangedMessage(account_id, state, 0);
     }
 
     @Override
-    public void configOnSipRegistrationStateChange(String account_id, String state, int code) {
-
-    }
-
-    @Override
-    public void configOnError(int alert) {
-        Log.d(TAG, "configOnError : (" + alert);
+    public void errorAlert(int alert) {
+        Log.d(TAG, "errorAlert : " + alert);
     }
 
     private void sendAccountStateChangedMessage(String accoundID, String state, int code) {
diff --git a/ring-android/src/cx/ring/service/ISipService.aidl b/ring-android/src/cx/ring/service/ISipService.aidl
index d1ea05a..05880bc 100644
--- a/ring-android/src/cx/ring/service/ISipService.aidl
+++ b/ring-android/src/cx/ring/service/ISipService.aidl
@@ -19,7 +19,7 @@
     void removeAccount(in String accoundId);
     void setAccountOrder(in String order);
     Map getAccountDetails(in String accountID);
-    Map getAccountTemplate();
+    Map getAccountTemplate(in String accountType);
     void registerAllAccounts();
     void setAccountDetails(in String accountId, in Map accountDetails);
     List getCredentials(in String accountID);
@@ -28,13 +28,12 @@
     String getCurrentAudioOutputPlugin();
     List getAudioCodecList(in String accountID);
     void setActiveCodecList(in List codecs, in String accountID);
-    Map getRingtoneList();
 
-    boolean checkForPrivateKey(in String pemPath);
-    boolean checkCertificateValidity(in String pemPath);
-    boolean checkHostnameCertificate(in String certificatePath, in String host, in String port);
-    
-    
+    Map validateCertificate(in String accountID, in String certificatePath, in String privateKeyPath);
+    Map validateCertificateRaw(in String accountID, in byte[] certificateRaw);
+    Map getCertificateDetails(in String certificatePath);
+    Map getCertificateDetailsRaw(in byte[] certificateRaw);
+
     // FIXME
     void toggleSpeakerPhone(in boolean toggle);
 
diff --git a/ring-android/src/cx/ring/service/SipService.java b/ring-android/src/cx/ring/service/SipService.java
index 14d907a..575189c 100644
--- a/ring-android/src/cx/ring/service/SipService.java
+++ b/ring-android/src/cx/ring/service/SipService.java
@@ -59,7 +59,7 @@
     private Runnable pollEvents = new Runnable() {
         @Override
         public void run() {
-            Ringservice.sflph_poll_events();
+            Ringservice.pollEvents();
             handler.postDelayed(this, POLLING_TIMEOUT);
         }
     };
@@ -225,7 +225,7 @@
 
     private void stopDaemon() {
         handler.removeCallbacks(pollEvents);
-        Ringservice.sflph_fini();
+        Ringservice.fini();
         isPjSipStackStarted = false;
     }
 
@@ -234,13 +234,13 @@
             return;
 
         try {
-            System.loadLibrary("codec_ulaw");
+            /*System.loadLibrary("codec_ulaw");
             System.loadLibrary("codec_alaw");
             System.loadLibrary("codec_speex");
             System.loadLibrary("codec_g729");
             System.loadLibrary("codec_gsm");
-            System.loadLibrary("codec_opus");
-            System.loadLibrary("sflphonejni");
+            System.loadLibrary("codec_opus");*/
+            System.loadLibrary("ringjni");
             isPjSipStackStarted = true;
 
         } catch (UnsatisfiedLinkError e) {
@@ -350,7 +350,7 @@
                     }
                     mConferences.put(toAdd.getId(), toAdd);
                     mMediaManager.obtainAudioFocus(false);
-                    Ringservice.sflph_call_place(call.getAccount().getAccountID(), call.getCallId(), call.getmContact().getPhones().get(0).getNumber());
+                    Ringservice.placeCall(call.getAccount().getAccountID(), call.getmContact().getPhones().get(0).getNumber());
                 }
             });
         }
@@ -362,7 +362,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.refuse() thread running...");
-                    Ringservice.sflph_call_refuse(callID);
+                    Ringservice.refuse(callID);
                 }
             });
         }
@@ -374,7 +374,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.accept() thread running...");
-                    Ringservice.sflph_call_accept(callID);
+                    Ringservice.accept(callID);
                     mMediaManager.RouteToInternalSpeaker();
                 }
             });
@@ -388,7 +388,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.hangUp() thread running...");
-                    Ringservice.sflph_call_hang_up(callID);
+                    Ringservice.hangUp(callID);
                     removeCall(callID);
                     if(mConferences.size() == 0) {
                         Log.i(TAG, "No more calls!");
@@ -404,7 +404,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.hold() thread running...");
-                    Ringservice.sflph_call_hold(callID);
+                    Ringservice.hold(callID);
                 }
             });
         }
@@ -415,13 +415,13 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.unhold() thread running...");
-                    Ringservice.sflph_call_unhold(callID);
+                    Ringservice.unhold(callID);
                 }
             });
         }
 
         @Override
-        public HashMap<String, String> getCallDetails(String callID) throws RemoteException {
+        public Map<String, String> getCallDetails(String callID) throws RemoteException {
             class CallDetails extends SipRunnableWithReturn {
                 private String id;
 
@@ -430,9 +430,9 @@
                 }
 
                 @Override
-                protected StringMap doRun() throws SameThreadException {
+                protected Map<String, String> doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getCallDetails() thread running...");
-                    return Ringservice.sflph_call_get_call_details(id);
+                    return Ringservice.getCallDetails(id).toNative();
                 }
             }
 
@@ -441,9 +441,7 @@
 
             while (!runInstance.isDone()) {
             }
-            StringMap swigmap = (StringMap) runInstance.getVal();
-
-            return SwigNativeConverter.convertCallDetailsToNative(swigmap);
+            return (Map<String, String>)runInstance.getVal();
         }
 
         @Override
@@ -452,7 +450,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.setAudioPlugin() thread running...");
-                    Ringservice.sflph_config_set_audio_plugin(audioPlugin);
+                    Ringservice.setAudioPlugin(audioPlugin);
                 }
             });
         }
@@ -463,7 +461,7 @@
                 @Override
                 protected String doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getCurrentAudioOutputPlugin() thread running...");
-                    return Ringservice.sflph_config_get_current_audio_output_plugin();
+                    return Ringservice.getCurrentAudioOutputPlugin();
                 }
             }
 
@@ -481,7 +479,7 @@
                 @Override
                 protected StringVect doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getAccountList() thread running...");
-                    return Ringservice.sflph_config_get_account_list();
+                    return Ringservice.getAccountList();
                 }
             }
             AccountList runInstance = new AccountList();
@@ -504,13 +502,13 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.setAccountsOrder() thread running...");
-                    Ringservice.sflph_config_set_accounts_order(order);
+                    Ringservice.setAccountsOrder(order);
                 }
             });
         }
 
         @Override
-        public HashMap<String, String> getAccountDetails(final String accountID) {
+        public Map<String, String> getAccountDetails(final String accountID) {
             class AccountDetails extends SipRunnableWithReturn {
                 private String id;
 
@@ -519,9 +517,9 @@
                 }
 
                 @Override
-                protected StringMap doRun() throws SameThreadException {
+                protected Map<String, String> doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getAccountDetails() thread running...");
-                    return Ringservice.sflph_config_get_account_details(id);
+                    return Ringservice.getAccountDetails(id).toNative();
                 }
             }
 
@@ -530,24 +528,20 @@
 
             while (!runInstance.isDone()) {
             }
-            StringMap swigmap = (StringMap) runInstance.getVal();
-
-            return SwigNativeConverter.convertAccountToNative(swigmap);
+            return (Map<String, String>) runInstance.getVal();
         }
 
         @SuppressWarnings("unchecked")
         // Hashmap runtime cast
         @Override
         public void setAccountDetails(final String accountId, final Map map) {
-            HashMap<String, String> nativemap = (HashMap<String, String>) map;
-
-            final StringMap swigmap = SwigNativeConverter.convertFromNativeToSwig(nativemap);
+            final StringMap swigmap = new StringMap(map);
 
             getExecutor().execute(new SipRunnable() {
                 @Override
                 protected void doRun() throws SameThreadException {
 
-                    Ringservice.sflph_config_set_account_details(accountId, swigmap);
+                    Ringservice.setAccountDetails(accountId, swigmap);
                     Log.i(TAG, "SipService.setAccountDetails() thread running...");
                 }
 
@@ -555,13 +549,13 @@
         }
 
         @Override
-        public Map getAccountTemplate() throws RemoteException {
+        public Map<String, String> getAccountTemplate(final String accountType) throws RemoteException {
             class AccountTemplate extends SipRunnableWithReturn {
 
                 @Override
-                protected StringMap doRun() throws SameThreadException {
+                protected Map<String, String> doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getAccountTemplate() thread running...");
-                    return Ringservice.sflph_config_get_account_template();
+                    return Ringservice.getAccountTemplate(accountType).toNative();
                 }
             }
 
@@ -570,9 +564,7 @@
 
             while (!runInstance.isDone()) {
             }
-            StringMap swigmap = (StringMap) runInstance.getVal();
-
-            return SwigNativeConverter.convertAccountToNative(swigmap);
+            return (Map<String, String>) runInstance.getVal();
         }
 
         @SuppressWarnings("unchecked")
@@ -589,11 +581,11 @@
                 @Override
                 protected String doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.addAccount() thread running...");
-                    return Ringservice.sflph_config_add_account(map);
+                    return Ringservice.addAccount(map);
                 }
             }
 
-            final StringMap swigmap = SwigNativeConverter.convertFromNativeToSwig((HashMap<String, String>) map);
+            final StringMap swigmap = new StringMap(map);
 
             AddAccount runInstance = new AddAccount(swigmap);
             getExecutor().execute(runInstance);
@@ -608,7 +600,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.setAccountDetails() thread running...");
-                    Ringservice.sflph_config_remove_account(accountId);
+                    Ringservice.removeAccount(accountId);
                 }
             });
         }
@@ -623,7 +615,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.transfer() thread running...");
-                    if (Ringservice.sflph_call_transfer(callID, to)) {
+                    if (Ringservice.transfer(callID, to)) {
                         Bundle bundle = new Bundle();
                         bundle.putString("CallID", callID);
                         bundle.putString("State", "HUNGUP");
@@ -643,7 +635,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.attendedTransfer() thread running...");
-                    if (Ringservice.sflph_call_attended_transfer(transferID, targetID)) {
+                    if (Ringservice.attendedTransfer(transferID, targetID)) {
                         Log.i(TAG, "OK");
                     } else
                         Log.i(TAG, "NOT OK");
@@ -662,7 +654,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.createConference() thread running...");
-                    Ringservice.sflph_call_remove_conference(confID);
+                    Ringservice.removeConference(confID);
                 }
             });
 
@@ -674,7 +666,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.joinParticipant() thread running...");
-                    Ringservice.sflph_call_join_participant(sel_callID, drag_callID);
+                    Ringservice.joinParticipant(sel_callID, drag_callID);
                     // Generate a CONF_CREATED callback
                 }
             });
@@ -687,7 +679,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.addParticipant() thread running...");
-                    Ringservice.sflph_call_add_participant(call.getCallId(), confID);
+                    Ringservice.addParticipant(call.getCallId(), confID);
                     mConferences.get(confID).getParticipants().add(call);
                 }
             });
@@ -700,7 +692,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.addMainParticipant() thread running...");
-                    Ringservice.sflph_call_add_main_participant(confID);
+                    Ringservice.addMainParticipant(confID);
                 }
             });
 
@@ -724,7 +716,7 @@
                             Log.i(TAG, "Call found and put in current_calls");
                         }
                     }
-                    Ringservice.sflph_call_detach_participant(callID);
+                    Ringservice.detachParticipant(callID);
                 }
             });
 
@@ -736,7 +728,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.joinConference() thread running...");
-                    Ringservice.sflph_call_join_conference(sel_confID, drag_confID);
+                    Ringservice.joinConference(sel_confID, drag_confID);
                 }
             });
 
@@ -749,7 +741,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.joinConference() thread running...");
-                    Ringservice.sflph_call_hang_up_conference(confID);
+                    Ringservice.hangUpConference(confID);
                 }
             });
 
@@ -761,7 +753,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.holdConference() thread running...");
-                    Ringservice.sflph_call_hold_conference(confID);
+                    Ringservice.holdConference(confID);
                 }
             });
 
@@ -773,7 +765,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.unholdConference() thread running...");
-                    Ringservice.sflph_call_unhold_conference(confID);
+                    Ringservice.unholdConference(confID);
                 }
             });
 
@@ -786,7 +778,7 @@
                 @Override
                 protected Boolean doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.isRecording() thread running...");
-                    return Ringservice.sflph_call_is_conference_participant(callID);
+                    return Ringservice.isConferenceParticipant(callID);
                 }
             }
 
@@ -830,7 +822,7 @@
                 @Override
                 protected StringVect doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getParticipantList() thread running...");
-                    return Ringservice.sflph_call_get_participant_list(confID);
+                    return Ringservice.getParticipantList(confID);
                 }
             }
             ;
@@ -859,9 +851,9 @@
         public String getConferenceDetails(final String callID) throws RemoteException {
             class ConfDetails extends SipRunnableWithReturn {
                 @Override
-                protected StringMap doRun() throws SameThreadException {
+                protected String doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getConferenceDetails() thread running...");
-                    return Ringservice.sflph_call_get_conference_details(callID);
+                    return Ringservice.getConferenceDetails(callID).get("CONF_STATE");
                 }
             }
             ConfDetails runInstance = new ConfDetails();
@@ -869,9 +861,7 @@
             while (!runInstance.isDone()) {
                 // Log.w(TAG, "Waiting for getConferenceList");
             }
-            StringMap swigvect = (StringMap) runInstance.getVal();
-
-            return swigvect.get("CONF_STATE");
+            return (String) runInstance.getVal();
         }
 
         @Override
@@ -881,7 +871,7 @@
                 @Override
                 protected String doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getRecordPath() thread running...");
-                    return Ringservice.sflph_config_get_record_path();
+                    return Ringservice.getRecordPath();
                 }
             }
 
@@ -902,7 +892,7 @@
                 @Override
                 protected Boolean doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.toggleRecordingCall() thread running...");
-                    boolean result = Ringservice.sflph_call_toggle_recording(id);
+                    boolean result = Ringservice.toggleRecording(id);
 
                     if (getConferences().containsKey(id)) {
                         getConferences().get(id).setRecording(result);
@@ -931,7 +921,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.setRecordingCall() thread running...");
-                    Ringservice.sflph_call_play_recorded_file(filepath);
+                    Ringservice.startRecordedFilePlayback(filepath);
                 }
             });
             return false;
@@ -943,7 +933,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.stopRecordedFilePlayback() thread running...");
-                    Ringservice.sflph_call_stop_recorded_file(filepath);
+                    Ringservice.stopRecordedFilePlayback(filepath);
                 }
             });
         }
@@ -954,7 +944,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.setRecordPath() " + path + " thread running...");
-                    Ringservice.sflph_config_set_record_path(path);
+                    Ringservice.setRecordPath(path);
                 }
             });
         }
@@ -965,7 +955,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.sendTextMessage() thread running...");
-                    Ringservice.sflph_call_send_text_message(callID, message.comment);
+                    Ringservice.sendTextMessage(callID, message.comment);
                     if (getConferences().get(callID) != null)
                         getConferences().get(callID).addSipMessage(message);
                 }
@@ -982,13 +972,13 @@
                     Log.i(TAG, "SipService.getAudioCodecList() thread running...");
                     ArrayList<Codec> results = new ArrayList<Codec>();
 
-                    IntVect active_payloads = Ringservice.sflph_config_get_active_audio_codec_list(accountID);
+                    UintVect active_payloads = Ringservice.getActiveCodecList(accountID);
                     for (int i = 0; i < active_payloads.size(); ++i) {
-
-                        results.add(new Codec(active_payloads.get(i), Ringservice.sflph_config_get_audio_codec_details(active_payloads.get(i)), true));
+                        Log.i(TAG, "SipService.getCodecDetails(" + accountID +", "+ active_payloads.get(i) +")");
+                        results.add(new Codec(active_payloads.get(i), Ringservice.getCodecDetails(accountID, active_payloads.get(i)), true));
 
                     }
-                    IntVect payloads = Ringservice.sflph_config_get_audio_codec_list();
+                    UintVect payloads = Ringservice.getCodecList();
 
                     for (int i = 0; i < payloads.size(); ++i) {
                         boolean isActive = false;
@@ -999,8 +989,13 @@
                         }
                         if (isActive)
                             continue;
-                        else
-                            results.add(new Codec(payloads.get(i), Ringservice.sflph_config_get_audio_codec_details(payloads.get(i)), false));
+                        else {
+                            StringMap details = Ringservice.getCodecDetails(accountID, payloads.get(i));
+                            if (details.size() > 1)
+                                results.add(new Codec(payloads.get(i), Ringservice.getCodecDetails(accountID, payloads.get(i)), false));
+                            else
+                                Log.i(TAG, "Error loading codec " + i);
+                        }
 
                     }
 
@@ -1015,6 +1010,7 @@
             return (ArrayList<Codec>) runInstance.getVal();
         }
 
+        /*
         @Override
         public Map getRingtoneList() throws RemoteException {
             class RingtoneList extends SipRunnableWithReturn {
@@ -1022,7 +1018,7 @@
                 @Override
                 protected StringMap doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getRingtoneList() thread running...");
-                    return Ringservice.sflph_config_get_ringtone_list();
+                    return Ringservice.getR();
                 }
             }
 
@@ -1039,6 +1035,7 @@
             return null;
         }
 
+
         @Override
         public boolean checkForPrivateKey(final String pemPath) throws RemoteException {
             class hasPrivateKey extends SipRunnableWithReturn {
@@ -1095,6 +1092,83 @@
 
             return (Boolean) runInstance.getVal();
         }
+*/
+
+        @Override
+        public Map<String, String> validateCertificate(final String accountID, final String certificatePath, final String privateKeyPath) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Map<String, String> doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return Ringservice.validateCertificate(accountID, certificatePath, privateKeyPath).toNative();
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Map<String, String>) runInstance.getVal();
+        }
+
+        @Override
+        public Map<String, String> validateCertificateRaw(final String accountID, final byte[] certificateRaw) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Map<String, String> doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return Ringservice.validateCertificateRaw(accountID, SwigNativeConverter.convertFromNativeToSwig(certificateRaw)).toNative();
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Map<String, String>) runInstance.getVal();
+        }
+
+        @Override
+        public Map<String, String> getCertificateDetails(final String certificatePath) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Map<String, String> doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return Ringservice.getCertificateDetails(certificatePath).toNative();
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Map<String, String>) runInstance.getVal();
+        }
+
+        @Override
+        public Map<String, String> getCertificateDetailsRaw(final byte[] certificateRaw) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Map<String, String> doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return Ringservice.getCertificateDetailsRaw(SwigNativeConverter.convertFromNativeToSwig(certificateRaw)).toNative();
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Map<String, String>) runInstance.getVal();
+        }
 
         @Override
         public void setActiveCodecList(final List codecs, final String accountID) throws RemoteException {
@@ -1102,11 +1176,11 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.setActiveAudioCodecList() thread running...");
-                    StringVect list = new StringVect();
+                    UintVect list = new UintVect();
                     for (Object codec : codecs) {
-                        list.add((String) codec);
+                        list.add((Integer) codec);
                     }
-                    Ringservice.sflph_config_set_active_audio_codec_list(list, accountID);
+                    Ringservice.setActiveCodecList(accountID, list);
                 }
             });
         }
@@ -1133,7 +1207,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.playDtmf() thread running...");
-                    Ringservice.sflph_call_play_dtmf(key);
+                    Ringservice.playDTMF(key);
                 }
             });
         }
@@ -1154,7 +1228,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.setMuted() thread running...");
-                    Ringservice.sflph_config_mute_capture(mute);
+                    Ringservice.muteCapture(mute);
                 }
             });
         }
@@ -1166,7 +1240,7 @@
                 @Override
                 protected Boolean doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.isCaptureMuted() thread running...");
-                    return Ringservice.sflph_config_is_capture_muted();
+                    return Ringservice.isCaptureMuted();
                 }
             }
 
@@ -1186,7 +1260,7 @@
                     Log.i(TAG, "SipService.confirmSAS() thread running...");
                     SecureSipCall call = (SecureSipCall) getCallById(callID);
                     call.setSASConfirmed(true);
-                    Ringservice.sflph_call_set_sas_verified(callID);
+                    Ringservice.setSASVerified(callID);
                 }
             });
         }
@@ -1199,7 +1273,7 @@
                 @Override
                 protected List doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getCredentials() thread running...");
-                    StringVect map = Ringservice.sflph_config_get_supported_tls_method();
+                    StringVect map = Ringservice.getSupportedTlsMethod();
                     return SwigNativeConverter.convertSwigToNative(map);
                 }
             }
@@ -1218,8 +1292,7 @@
                 @Override
                 protected List doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.getCredentials() thread running...");
-                    VectMap map = Ringservice.sflph_config_get_credentials(accountID);
-                    return SwigNativeConverter.convertCredentialsToNative(map);
+                    return Ringservice.getCredentials(accountID).toNative();
                 }
             }
 
@@ -1237,7 +1310,7 @@
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.setCredentials() thread running...");
                     ArrayList<HashMap<String, String>> list = (ArrayList<HashMap<String, String>>) creds;
-                    Ringservice.sflph_config_set_credentials(accountID, SwigNativeConverter.convertFromNativeToSwig(creds));
+                    Ringservice.setCredentials(accountID, SwigNativeConverter.convertFromNativeToSwig(creds));
                 }
             });
         }
@@ -1248,7 +1321,7 @@
                 @Override
                 protected void doRun() throws SameThreadException, RemoteException {
                     Log.i(TAG, "SipService.registerAllAccounts() thread running...");
-                    Ringservice.sflph_config_register_all_accounts();
+                    Ringservice.registerAllAccounts();
                 }
             });
         }
diff --git a/ring-android/src/cx/ring/utils/SwigNativeConverter.java b/ring-android/src/cx/ring/utils/SwigNativeConverter.java
index 748391b..3793644 100644
--- a/ring-android/src/cx/ring/utils/SwigNativeConverter.java
+++ b/ring-android/src/cx/ring/utils/SwigNativeConverter.java
@@ -34,12 +34,14 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import cx.ring.model.account.AccountDetailAdvanced;
 import cx.ring.model.account.AccountDetailBasic;
 import cx.ring.model.account.AccountDetailSrtp;
 import cx.ring.model.account.AccountDetailTls;
+import cx.ring.service.Blob;
 import cx.ring.service.ServiceConstants;
 import cx.ring.service.StringMap;
 import cx.ring.service.StringVect;
@@ -47,38 +49,24 @@
 
 public class SwigNativeConverter {
 
-    /**
-     * Native to Swig
-     */
-
-    public static StringMap convertFromNativeToSwig(HashMap<String, String> nativemap) {
-        StringMap swigmap = new StringMap();
-
-        Set<String> keys = nativemap.keySet();
-        for (String key : keys) {
-            if (nativemap.get(key) == null) {
-                swigmap.set(key, "");
-            } else {
-                swigmap.set(key, nativemap.get(key));
-            }
-        }
-        return swigmap;
-    }
-
     public static VectMap convertFromNativeToSwig(List creds) {
         ArrayList<HashMap<String, String>> todecode = (ArrayList<HashMap<String, String>>) creds;
         VectMap toReturn = new VectMap();
 
         for (HashMap<String, String> aTodecode : todecode) {
-            StringMap entry = new StringMap();
-            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, aTodecode.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
-            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, aTodecode.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
-            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_REALM, aTodecode.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
-            toReturn.add(entry);
+            toReturn.add(new StringMap(aTodecode));
         }
         return toReturn;
     }
 
+    public static Blob convertFromNativeToSwig(byte[] data) {
+        Blob toReturn = new Blob();
+        toReturn.reserve(data.length);
+        for (int i=0; i<data.length; i++)
+            toReturn.add(data[i]);
+        return toReturn;
+    }
+
     private static String tryToGet(StringMap smap, String key) {
         if (smap.has_key(key)) {
             return smap.get(key);
@@ -87,102 +75,6 @@
         }
     }
 
-    public static HashMap<String, String> convertAccountToNative(StringMap swigmap) {
-        HashMap<String, String> nativemap = new HashMap<String, String>();
-
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_TYPE));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT));
-        nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX));
-        nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER));
-
-		if (swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_TYPE).equals("SIP"))
-		{
-
-            nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET));
-			nativemap
-				.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE));
-			nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE, swigmap.get(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE));
-			nativemap.put(AccountDetailAdvanced.CONFIG_STUN_SERVER, swigmap.get(AccountDetailAdvanced.CONFIG_STUN_SERVER));
-			nativemap
-				.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS));
-			nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_CODE,
-				swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_CODE));
-			nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_DESC,
-				swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_DESC));
-			nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_DTMF_TYPE, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_DTMF_TYPE));
-			nativemap.put(AccountDetailAdvanced.CONFIG_KEEP_ALIVE_ENABLED, swigmap.get(AccountDetailAdvanced.CONFIG_KEEP_ALIVE_ENABLED));
-			nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_PORT, swigmap.get(AccountDetailAdvanced.CONFIG_LOCAL_PORT));
-			nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_ADDRESS, swigmap.get(AccountDetailAdvanced.CONFIG_PUBLISHED_ADDRESS));
-			nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_PORT, swigmap.get(AccountDetailAdvanced.CONFIG_PUBLISHED_PORT));
-			nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_SAMEAS_LOCAL, swigmap.get(AccountDetailAdvanced.CONFIG_PUBLISHED_SAMEAS_LOCAL));
-			nativemap.put(AccountDetailAdvanced.CONFIG_RINGTONE_ENABLED, swigmap.get(AccountDetailAdvanced.CONFIG_RINGTONE_ENABLED));
-			nativemap.put(AccountDetailAdvanced.CONFIG_RINGTONE_PATH, swigmap.get(AccountDetailAdvanced.CONFIG_RINGTONE_PATH));
-			nativemap.put(AccountDetailAdvanced.CONFIG_STUN_ENABLE, swigmap.get(AccountDetailAdvanced.CONFIG_STUN_ENABLE));
-			nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX));
-			nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN));
-
-			nativemap.put(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE));
-			nativemap.put(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK));
-			nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS));
-			nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS_ONCE, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS_ONCE));
-			nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_HELLO_HASH, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_HELLO_HASH));
-			nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_NOT_SUPP_WARNING, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_NOT_SUPP_WARNING));
-			nativemap.put(AccountDetailSrtp.CONFIG_SRTP_ENABLE, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_ENABLE));
-
-			nativemap.put(AccountDetailTls.CONFIG_TLS_CIPHERS, swigmap.get(AccountDetailTls.CONFIG_TLS_CIPHERS));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_LISTENER_PORT, swigmap.get(AccountDetailTls.CONFIG_TLS_LISTENER_PORT));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_METHOD, swigmap.get(AccountDetailTls.CONFIG_TLS_METHOD));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_NEGOTIATION_TIMEOUT_SEC, swigmap.get(AccountDetailTls.CONFIG_TLS_NEGOTIATION_TIMEOUT_SEC));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_PASSWORD, swigmap.get(AccountDetailTls.CONFIG_TLS_PASSWORD));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE, swigmap.get(AccountDetailTls.CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_SERVER_NAME, swigmap.get(AccountDetailTls.CONFIG_TLS_SERVER_NAME));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_VERIFY_CLIENT, swigmap.get(AccountDetailTls.CONFIG_TLS_VERIFY_CLIENT));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_VERIFY_SERVER, swigmap.get(AccountDetailTls.CONFIG_TLS_VERIFY_SERVER));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE));
-			nativemap.put(AccountDetailTls.CONFIG_TLS_ENABLE, swigmap.get(AccountDetailTls.CONFIG_TLS_ENABLE));
-		}
-
-        return nativemap;
-    }
-
-    public static HashMap<String, String> convertCallDetailsToNative(StringMap swigmap) {
-
-        HashMap<String, String> entry = new HashMap<String, String>();
-
-        entry.put(ServiceConstants.call.CALL_TYPE, tryToGet(swigmap, ServiceConstants.call.CALL_TYPE));
-        entry.put(ServiceConstants.call.PEER_NUMBER, tryToGet(swigmap, ServiceConstants.call.PEER_NUMBER));
-        entry.put(ServiceConstants.call.DISPLAY_NAME, tryToGet(swigmap, ServiceConstants.call.DISPLAY_NAME));
-        entry.put(ServiceConstants.call.CALL_STATE, tryToGet(swigmap, ServiceConstants.call.CALL_STATE));
-        entry.put(ServiceConstants.call.CONF_ID, tryToGet(swigmap, ServiceConstants.call.CONF_ID));
-        entry.put(ServiceConstants.call.TIMESTAMP_START, tryToGet(swigmap, ServiceConstants.call.TIMESTAMP_START));
-        entry.put(ServiceConstants.call.ACCOUNTID, tryToGet(swigmap, ServiceConstants.call.ACCOUNTID));
-
-        return entry;
-    }
-
-    public static ArrayList<HashMap<String, String>> convertCredentialsToNative(VectMap map) {
-
-        ArrayList<HashMap<String, String>> toReturn = new ArrayList<HashMap<String, String>>();
-
-        for (int i = 0; i < map.size(); ++i) {
-            StringMap entry;
-            HashMap<String, String> nativeEntry = new HashMap<String, String>();
-            entry = map.get(i);
-            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
-            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
-            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_REALM, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
-            toReturn.add(nativeEntry);
-        }
-        return toReturn;
-    }
-
     public static ArrayList<String> convertSwigToNative(StringVect vector) {
         ArrayList<String> toReturn = new ArrayList<String>();
         for (int i = 0; i < vector.size(); ++i) {