///<summary> /// Method called when a user attempts to load a config /// file in through the Login page. This Update method /// is set to work with the config file formatted as /// specified in the RUE spec section 11.2 ///</summary> ///<param name="accountToUpdate">The account to update with the config file contents</param> public void UpdateVATRPAccountFromACEConfig_login(VATRPAccount accountToUpdate) { // Fields Required from config file accountToUpdate.configuration = this; accountToUpdate.ProxyHostname = this.sip_register_domain; accountToUpdate.RegistrationUser = this.phone_number; accountToUpdate.Username = this.phone_number; accountToUpdate.PhoneNumber = this.phone_number; // Set the outbound proxy if there are any loaded from the config file if (this.outbound_proxies.Any()) { accountToUpdate.OutboundProxy = this.outbound_proxies[0]; accountToUpdate.UseOutboundProxy = true; } int port = this.sip_register_port; if (port > 0) { accountToUpdate.HostPort = (UInt16)port; } if (!string.IsNullOrEmpty(this.sip_register_transport)) { accountToUpdate.Transport = sip_register_transport; } accountToUpdate.ContactsURI = this.contacts; accountToUpdate.SendLocationWithRegistration = this.sendLocationWithRegistration; // Find set of credentials that will be used accountToUpdate.RegistrationUser = ""; accountToUpdate.Username = ""; accountToUpdate.RegistrationPassword = ""; accountToUpdate.Password = ""; accountToUpdate.AuthID = ""; foreach (VATRPCredential credential in this.credentials) { if (credential.realm == sip_register_domain) { // Update just the current account, not the config file accountToUpdate.RegistrationPassword = credential.password; accountToUpdate.Password = credential.password; accountToUpdate.AuthID = credential.username; break; } } // Fields Optional from config file accountToUpdate.DisplayName = this.display_name; accountToUpdate.MWIUri = this.sip_mwi_uri; accountToUpdate.VideoMailUri = this.sip_videomail_uri; accountToUpdate.CardDavRealm = this.carddav; if (this.ice_servers.Count > 0) { accountToUpdate.ICEAddress = ice_servers[0].uri; } }
public void InitializeToAccount(VATRPAccount account) { if (account != null) { LoginBox.Text = account.Username; this.AuthIDBox.Text = account.AuthID; //this.HostnameBox.Text = account.ProxyHostname; InitializeToProvider(account.ProxyHostname); this.HostPortBox.Text = account.ProxyPort.ToString(); RememberPasswordBox.IsChecked = account.RememberPassword; AutoLoginBox.IsChecked = ServiceManager.Instance.ConfigurationService.Get(Configuration.ConfSection.GENERAL, Configuration.ConfEntry.AUTO_LOGIN, false); //AutoLoginBox.IsChecked = account.AutoLogin; string transport = App.CurrentAccount.Transport; if (string.IsNullOrWhiteSpace(transport)) { transport = "TCP"; } foreach (var item in TransportComboBox.Items) { var tb = item as TextBlock; string itemString = tb.Text; if (itemString.Equals(transport)) { TransportComboBox.SelectedItem = item; TextBlock selectedItem = TransportComboBox.SelectedItem as TextBlock; if (selectedItem != null) { string test = selectedItem.Text; } break; } } } }
public void UpdateVATRPAccountFromACEConfig(VATRPAccount accountToUpdate) { // items not handled // public int version { get; set; } // public int expiration_time { get; set; } // public string configuration_auth_password { get; set; } // public int configuration_auth_expiration { get; set; } // public int sip_registration_maximum_threshold { get; set; } // public List<string> sip_register_usernames { get; set; } // public List<string> enabled_codecs { get; set; } // public string bwLimit { get; set; } // public int upload_bandwidth { get; set; } // public int download_bandwidth { get; set; } // public string logging { get; set; } // public string sip_mwi_uri { get; set; } // public string video_resolution_maximum { get; set; } // public bool enable_rtt { get; set; } --> set in configuration service // public bool user_is_agent { get; set; } //var trimChars = new[] { '\"' }; accountToUpdate.configuration = this; // public string sip_auth_username { get; set; } string username = ""; if (!string.IsNullOrEmpty(this.sip_auth_username)) { username = this.sip_auth_username; if (!string.IsNullOrWhiteSpace(username)) { accountToUpdate.RegistrationUser = username; accountToUpdate.Username = username; } } // public string sip_auth_password { get; set; } string password = ""; if (!string.IsNullOrEmpty(this.sip_auth_password)) { password = this.sip_auth_password; if (!string.IsNullOrWhiteSpace(password)) { accountToUpdate.RegistrationPassword = password; accountToUpdate.Password = password; } } // public string sip_register_domain { get; set; } string domain = ""; if (!string.IsNullOrEmpty(this.sip_register_domain)) { domain = this.sip_register_domain; if (!string.IsNullOrWhiteSpace(domain)) { accountToUpdate.ProxyHostname = domain; } } // public int sip_register_port { get; set; } var port = this.sip_register_port; if (port > 0) { accountToUpdate.ProxyPort = (UInt16)port; } // public string sip_register_transport { get; set; } string transport = ""; if (!string.IsNullOrEmpty(transport)) { transport = this.sip_register_transport; if (!string.IsNullOrWhiteSpace(transport)) { accountToUpdate.Transport = transport; } } // public bool enable_echo_cancellation { get; set; } accountToUpdate.EchoCancel = this.enable_echo_cancellation; // public bool enable_video { get; set; } accountToUpdate.EnableVideo = this.enable_video; accountToUpdate.VideoAutomaticallyStart = this.enable_video; // public bool enable_adaptive_rate { get; set; } // TEMP - 3512, ignore accountToUpdate.EnableAdaptiveRate = this.enable_adaptive_rate; accountToUpdate.DownloadBandwidth = this.download_bandwidth; accountToUpdate.UploadBandwidth = this.upload_bandwidth; // public bool enable_stun { get; set; } accountToUpdate.EnableSTUN = this.enable_stun; // public string stun_server { get; set; } accountToUpdate.STUNAddress = this.stun_server ?? string.Empty; var stunServer = accountToUpdate.STUNAddress.Split(':'); if (stunServer.Length > 1) { accountToUpdate.STUNAddress = stunServer[0]; accountToUpdate.STUNPort = Convert.ToUInt16(stunServer[1]); } // public bool enable_ice { get; set; } accountToUpdate.EnableICE = this.enable_ice; // public string sip_videomail_uri { get; set; } accountToUpdate.VideoMailUri = (sip_videomail_uri ?? string.Empty); // on successful login, we need to update the following in config: (list in progress) // this.enable_rtt; accountToUpdate.UserNeedsAgentView = user_is_agent; // not working, commenting out to get the other items in /* // update available codecs accountToUpdate.AvailableAudioCodecsList.Clear(); accountToUpdate.AvailableVideoCodecsList.Clear(); bool pcmuAvailable = false; bool pcmaAvailable = false; foreach (VATRPCodec codec in accountToUpdate.AudioCodecsList) { if (codec.CodecName.ToLower().Equals("pcmu")) { pcmuAvailable = true; } if (codec.CodecName.ToLower().Equals("pcma")) { pcmaAvailable = true; } foreach (string enabled_codec in enabled_codecs) { string codecName = enabled_codec.Replace(".", ""); if (!string.IsNullOrEmpty(codecName)) { if (codecName.ToLower().Equals(codec.CodecName.ToLower())) { accountToUpdate.AvailableAudioCodecsList.Add(codec); } } } } // handle special cases if (pcmuAvailable && pcmaAvailable) { // add the g711 codec for display VATRPCodec newCodec = new VATRPCodec(); newCodec.CodecName = "G711"; newCodec.Description = ""; newCodec.Channels = 0; newCodec.IPBitRate = 0; newCodec.IsUsable = false; newCodec.Priority = -1; newCodec.Rate = 0; if (accountToUpdate.AvailableAudioCodecsList.Count > 0) { int index = 0; foreach (VATRPCodec codec in accountToUpdate.AvailableAudioCodecsList) { index++; if (codec.CodecName.ToLower().Equals("g722")) { accountToUpdate.AvailableAudioCodecsList.Insert(index, newCodec); } } } else { accountToUpdate.AvailableAudioCodecsList.Add(newCodec); } } foreach (VATRPCodec codec in accountToUpdate.VideoCodecsList) { foreach (string enabled_codec in enabled_codecs) { string codecName = enabled_codec.Replace(".", ""); if (codecName.ToLower().Equals(codec.CodecName.ToLower())) { accountToUpdate.AvailableVideoCodecsList.Add(codec); } } } */ //implimment codec selection support /* newAccount.MuteMicrophone //missing * public bool enable_ice { get; set; } missing * public bool enable_rtt { get; set; } //missing * * public int version { get; set; }// missing * public string logging { get; set; } missing * public bool AutoLogin { get; set; //missing * sip_register_usernames //missing */ }
public bool UpdateAdvancedParameters(VATRPAccount account) { if (account.Logging == "Verbose") { LinphoneAPI.linphone_core_set_log_level_mask(OrtpLogLevel.ORTP_MESSAGE); _enableLogging = true; LOG.Info("Setting Linphone logging level to DEBUG"); } else { LinphoneAPI.linphone_core_set_log_level_mask(OrtpLogLevel.ORTP_FATAL); _enableLogging = false; LOG.Info("Setting Linphone logging level to OFF"); } return true; }
public bool UpdateNetworkingParameters(VATRPAccount account) { if (linphoneCore == IntPtr.Zero) throw new Exception("Linphone not initialized"); if (account == null) { LOG.Error("UpdateNetworkingParameters: Account is NULL"); return false; } var ip6Enabled = LinphoneAPI.linphone_core_ipv6_enabled(linphoneCore) == 1; if (ip6Enabled != account.EnableIPv6) { LinphoneAPI.linphone_core_enable_ipv6(linphoneCore, account.EnableIPv6); } LOG.Info(string.Format("UpdateNetworkingParameters: IPv6 is {0}", account.EnableIPv6 ? "enabled" : "disabled")); var address = string.Format(account.STUNAddress); LinphoneAPI.linphone_core_set_stun_server(linphoneCore, address); if (account.EnableSTUN || account.EnableICE) { if (account.EnableSTUN) { LinphoneAPI.linphone_core_set_firewall_policy(linphoneCore, LinphoneFirewallPolicy.LinphonePolicyUseStun); LOG.Info("UpdateNetworkingParameters: Enable STUN. " + address); } else { LinphoneAPI.linphone_core_set_firewall_policy(linphoneCore, LinphoneFirewallPolicy.LinphonePolicyUseIce); LOG.Info("UpdateNetworkingParameters: Enable ICE. " + address); } } else { LinphoneAPI.linphone_core_set_firewall_policy(linphoneCore, LinphoneFirewallPolicy.LinphonePolicyNoFirewall); LOG.Info("UpdateNetworkingParameters: No Firewall. Stun server is " + address); } // TODO, Disable adaptive rate algorithm, since it caused bad video account.AdaptiveRateAlgorithm = "Simple"; //LinphoneAPI.linphone_core_set_adaptive_rate_algorithm(linphoneCore, account.AdaptiveRateAlgorithm); LinphoneAPI.linphone_core_enable_adaptive_rate_control(linphoneCore, account.EnableAdaptiveRate); LinphoneAPI.linphone_core_set_upload_bandwidth(linphoneCore, account.UploadBandwidth); LinphoneAPI.linphone_core_set_download_bandwidth(linphoneCore, account.DownloadBandwidth); // quality of service LinphoneAPI.linphone_core_set_sip_dscp(linphoneCore, account.EnableQualityOfService ? account.SipDscpValue : 0); LinphoneAPI.linphone_core_set_audio_dscp(linphoneCore, account.EnableQualityOfService ? account.AudioDscpValue : 0); LinphoneAPI.linphone_core_set_video_dscp(linphoneCore, account.EnableQualityOfService ? account.VideoDscpValue : 0); return false; }
public void FillCodecsList(VATRPAccount account, CodecType codecType) { if (account == null) throw new ArgumentNullException("Account is not defined"); var cfgCodecs = codecType == CodecType.Video ? account.VideoCodecsList : account.AudioCodecsList; var linphoneCodecs = codecType == CodecType.Video ? _videoCodecs : _audioCodecs; cfgCodecs.Clear(); cfgCodecs.AddRange(linphoneCodecs); }
public bool UpdateCodecsAccessibility(VATRPAccount account, CodecType codecType) { var retValue = true; if (linphoneCore == IntPtr.Zero) throw new Exception("Linphone not initialized"); if (account == null) throw new ArgumentNullException("Account is not defined"); var cfgCodecs = codecType == CodecType.Video ? account.VideoCodecsList : account.AudioCodecsList; var linphoneCodecs = codecType == CodecType.Video ? _videoCodecs : _audioCodecs; foreach (var cfgCodec in cfgCodecs) { var payloadPtr = LinphoneAPI.linphone_core_find_payload_type(linphoneCore, cfgCodec.CodecName, cfgCodec.IPBitRate, cfgCodec.Channels); if (payloadPtr == IntPtr.Zero) continue; if (cfgCodec.Status == ( LinphoneAPI.linphone_core_payload_type_enabled(linphoneCore, payloadPtr) == 1)) continue; LinphoneAPI.linphone_core_enable_payload_type(linphoneCore, payloadPtr, cfgCodec.Status); } return retValue; }
public bool UpdateNativeCodecs(VATRPAccount account, CodecType codecType) { var retValue = true; if (linphoneCore == IntPtr.Zero) throw new Exception("Linphone not initialized"); if (account == null) throw new ArgumentNullException("Account is not defined"); var cfgCodecs = codecType == CodecType.Video ? account.VideoCodecsList : account.AudioCodecsList; var linphoneCodecs = codecType == CodecType.Video ? _videoCodecs : _audioCodecs; var tmpCodecs = new List<VATRPCodec>(); foreach (var cfgCodec in cfgCodecs) { // find cfgCodec in linphone codec list var pt = LinphoneAPI.linphone_core_find_payload_type(linphoneCore, cfgCodec.CodecName, LinphoneAPI.LINPHONE_FIND_PAYLOAD_IGNORE_RATE, cfgCodec.Channels); if (pt == IntPtr.Zero) { LOG.Warn(string.Format("Codec not found: {0} , Channels: {1} ", cfgCodec.CodecName, cfgCodec.Channels)); tmpCodecs.Add(cfgCodec); } } foreach (var codec in linphoneCodecs) { if (!cfgCodecs.Contains(codec)) { LOG.Info(string.Format("Adding codec into configuration: {0} , Channels: {1} ", codec.CodecName, codec.Channels)); cfgCodecs.Add(codec); } } foreach (var codec in tmpCodecs) { LOG.Info(string.Format("Removing Codec from configuration: {0} , Channels: {1} ", codec.CodecName, codec.Channels)); cfgCodecs.Remove(codec); } foreach (var codec in linphoneCodecs) { for (int i = 0; i < cfgCodecs.Count; i++) { if (cfgCodecs[i].CodecName == codec.CodecName && cfgCodecs[i].Rate == codec.Rate && cfgCodecs[i].Channels == codec.Channels) { cfgCodecs[i].Priority = codec.Priority; cfgCodecs[i].Status = codec.Status; } } } return retValue; }
public void UpdateMediaSettings(VATRPAccount account) { if (linphoneCore == IntPtr.Zero) return; if (account == null) { LOG.Error("Account is null"); return; } MuteCall(account.MuteMicrophone); MuteSpeaker(account.MuteSpeaker); EnableEchoCancellation(account.EchoCancel); EnableSelfView(account.ShowSelfView); // Liz E. - note: get_video_preset is not available in liphoneAPI. Null is an accepted value // for Linphone API as default. LOG.Info("Set preferred video size by name: " + account.VideoPreset); LinphoneAPI.linphone_core_set_video_preset(linphoneCore, account.VideoPreset); LinphoneAPI.linphone_core_set_preferred_framerate(linphoneCore, account.PreferredFPS); IntPtr namePtr = LinphoneAPI.linphone_core_get_preferred_video_size_name(linphoneCore); MSVideoSize preferredVideoSize = LinphoneAPI.linphone_core_get_preferred_video_size(linphoneCore); if (namePtr != IntPtr.Zero) { string name = Marshal.PtrToStringAnsi(namePtr); if (!string.IsNullOrWhiteSpace(account.PreferredVideoId) && account.PreferredVideoId != name) { LOG.Info("Set preferred video size by name: " + account.PreferredVideoId); LinphoneAPI.linphone_core_set_preferred_video_size_by_name(linphoneCore, account.PreferredVideoId); MSVideoSize preferredVideoSizeAfterChange = LinphoneAPI.linphone_core_get_preferred_video_size(linphoneCore); int bandwidth = 512; switch (account.PreferredVideoId) { case "720p": bandwidth = 2000; break; case "svga": bandwidth = 2000; break; case "vga": bandwidth = 1500; break; case "cif": bandwidth = 660; break; case "qvga": bandwidth = 410; break; case "qcif": bandwidth = 256; break; } if (account.DownloadBandwidth < bandwidth) { account.DownloadBandwidth = bandwidth; LinphoneAPI.linphone_core_set_download_bandwidth(linphoneCore, bandwidth); } if (account.UploadBandwidth < bandwidth) { account.UploadBandwidth = bandwidth; LinphoneAPI.linphone_core_set_upload_bandwidth(linphoneCore, bandwidth); } } } UpdateMediaEncryption(); }
private void onIPCTSSelect(object sender, RoutedEventArgs e) { var wizardPage = new ProviderLoginScreen(this); var newAccount = new VATRPAccount { AccountType = VATRPAccountType.IP_CTS }; App.CurrentAccount = newAccount; ChangeWizardPage(wizardPage); }
private void OnVideoRelaySelect(object sender, RoutedEventArgs e) { var wizardPage = new ProviderLoginScreen(this); var newAccount = new VATRPAccount {AccountType = VATRPAccountType.VideoRelayService}; App.CurrentAccount = newAccount; ChangeWizardPage(wizardPage); }
public bool AddAccount(VATRPAccount account) { if (account.AccountType == VATRPAccountType.Unknown) return false; if (this.accountsList != null) { var query = from record in this.accountsList where record.AccountID == account.AccountID && record.AccountType == account.AccountType select record; if (query.Any()) { return true; } } else { accountsList = new List<VATRPAccount>(); } this.accountsList.Insert(0, account); this.DeferredSave(); return true; }
public bool DeleteAccount(VATRPAccount account) { if (string.IsNullOrEmpty(account.AccountID)) return false; var query = from record in this.accountsList where record.AccountID == account.AccountID select record; if (!query.Any()) { return false; } this.accountsList.Remove(account); this.DeferredSave(); return true; }
public bool ContainsAccount(VATRPAccount account) { var query = from record in this.accountsList where record.Username == account.Username && record.AccountType == account.AccountType select record; if (query.Any()) { return true; } IEnumerable<VATRPAccount> allItems = (from c in this.accountsList where c.Username == account.Username && c.AccountType == account.AccountType select c).ToList(); foreach (var c in allItems) { accountsList.Remove(c); } this.DeferredSave(); return false; }
public void UpdateVATRPAccountFromACEConfig(VATRPAccount accountToUpdate) { // items not handled // public int version { get; set; } // public int expiration_time { get; set; } // public string configuration_auth_password { get; set; } // public int configuration_auth_expiration { get; set; } // public int sip_registration_maximum_threshold { get; set; } // public List<string> sip_register_usernames { get; set; } // public List<string> enabled_codecs { get; set; } // public string bwLimit { get; set; } // public int upload_bandwidth { get; set; } // public int download_bandwidth { get; set; } // public string logging { get; set; } // public string sip_mwi_uri { get; set; } // public string video_resolution_maximum { get; set; } // public bool enable_rtt { get; set; } --> set in configuration service // public bool user_is_agent { get; set; } //var trimChars = new[] { '\"' }; accountToUpdate.configuration = this; accountToUpdate.configStatus = this.configStatus; // public string sip_auth_username { get; set; } string phone_number = ""; if (!string.IsNullOrEmpty(this.phone_number)) { phone_number = this.phone_number; if (!string.IsNullOrWhiteSpace(phone_number)) { accountToUpdate.RegistrationUser = phone_number; accountToUpdate.Username = phone_number; accountToUpdate.PhoneNumber = phone_number; } } // public string sip_auth_password { get; set; } string password = ""; if (!string.IsNullOrEmpty(this.sip_auth_password)) { password = this.sip_auth_password; if (!string.IsNullOrWhiteSpace(password)) { accountToUpdate.RegistrationPassword = password; accountToUpdate.Password = password; } } // public string sip_register_domain { get; set; } string domain = ""; if (!string.IsNullOrEmpty(this.sip_register_domain)) { domain = this.sip_register_domain; if (!string.IsNullOrWhiteSpace(domain)) { accountToUpdate.ProxyHostname = domain; } } // public int sip_register_port { get; set; } var port = this.sip_register_port; if (port > 0) { accountToUpdate.HostPort = (UInt16)port; } // public string sip_register_transport { get; set; } string transport = ""; if (!string.IsNullOrEmpty(this.sip_register_transport)) { transport = this.sip_register_transport; if (!string.IsNullOrWhiteSpace(transport)) { accountToUpdate.Transport = transport; } } // public bool enable_echo_cancellation { get; set; } accountToUpdate.EchoCancel = this.enable_echo_cancellation; // public bool enable_video { get; set; } accountToUpdate.EnableVideo = this.enable_video; accountToUpdate.VideoAutomaticallyStart = this.enable_video; // public bool enable_adaptive_rate { get; set; } // TEMP - 3512, ignore accountToUpdate.EnableAdaptiveRate = this.enable_adaptive_rate; accountToUpdate.EnableAdaptiveRate = this.enable_adaptive_rate; accountToUpdate.DownloadBandwidth = this.download_bandwidth; accountToUpdate.UploadBandwidth = this.upload_bandwidth; // public bool enable_stun { get; set; } accountToUpdate.EnableSTUN = this.enable_stun; accountToUpdate.EnableTURN = this.enable_turn; // public string stun_server { get; set; } accountToUpdate.STUNAddress = this.stun_server ?? string.Empty; var stunServer = accountToUpdate.STUNAddress.Split(':'); if (stunServer.Length > 1) { accountToUpdate.STUNAddress = stunServer[0]; accountToUpdate.STUNPort = Convert.ToUInt16(stunServer[1]); } // public bool enable_ice { get; set; } accountToUpdate.EnableICE = this.enable_ice; accountToUpdate.DisableUserPhoneTag = this.disable_user_phone_tag; // public string sip_videomail_uri { get; set; } accountToUpdate.VideoMailUri = (sip_videomail_uri ?? string.Empty); // on successful login, we need to update the following in config: (list in progress) // this.enable_rtt; accountToUpdate.EnableProviderPingLog = this.ping_provider; accountToUpdate.EnableTechCallLog = this.log_call; accountToUpdate.UserNeedsAgentView = user_is_agent; // not working, commenting out to get the other items in /* * // update available codecs * accountToUpdate.AvailableAudioCodecsList.Clear(); * accountToUpdate.AvailableVideoCodecsList.Clear(); * bool pcmuAvailable = false; * bool pcmaAvailable = false; * foreach (VATRPCodec codec in accountToUpdate.AudioCodecsList) * { * if (codec.CodecName.ToLower().Equals("pcmu")) * { * pcmuAvailable = true; * } * if (codec.CodecName.ToLower().Equals("pcma")) * { * pcmaAvailable = true; * } * * foreach (string enabled_codec in enabled_codecs) * { * string codecName = enabled_codec.Replace(".", ""); * if (!string.IsNullOrEmpty(codecName)) * { * if (codecName.ToLower().Equals(codec.CodecName.ToLower())) * { * accountToUpdate.AvailableAudioCodecsList.Add(codec); * } * } * } * } * // handle special cases * if (pcmuAvailable && pcmaAvailable) * { * // add the g711 codec for display * VATRPCodec newCodec = new VATRPCodec(); * newCodec.CodecName = "G711"; * newCodec.Description = ""; * newCodec.Channels = 0; * newCodec.IPBitRate = 0; * newCodec.IsUsable = false; * newCodec.Priority = -1; * newCodec.Rate = 0; * if (accountToUpdate.AvailableAudioCodecsList.Count > 0) * { * int index = 0; * foreach (VATRPCodec codec in accountToUpdate.AvailableAudioCodecsList) * { * index++; * if (codec.CodecName.ToLower().Equals("g722")) * { * accountToUpdate.AvailableAudioCodecsList.Insert(index, newCodec); * } * } * } * else * { * accountToUpdate.AvailableAudioCodecsList.Add(newCodec); * } * } * * foreach (VATRPCodec codec in accountToUpdate.VideoCodecsList) * { * foreach (string enabled_codec in enabled_codecs) * { * string codecName = enabled_codec.Replace(".", ""); * if (codecName.ToLower().Equals(codec.CodecName.ToLower())) * { * accountToUpdate.AvailableVideoCodecsList.Add(codec); * } * } * } * */ //implimment codec selection support /* * newAccount.MuteMicrophone //missing * public bool enable_ice { get; set; } missing * public bool enable_rtt { get; set; } //missing * * public int version { get; set; }// missing * public string logging { get; set; } missing * public bool AutoLogin { get; set; //missing * sip_register_usernames //missing */ }