Beispiel #1
0
        ///<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;
        }
Beispiel #15
0
        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
             */
        }