private void startIce4j(BundleContext bundleContext, ConfigurationService cfg) {
		// TODO Packet logging for ice4j is not supported at this time.
		StunStack.setPacketLogger(null);
		// Make all ice4j properties system properties.
		if (cfg != null) {
			List<String> ice4jPropertyNames = cfg.getPropertyNamesByPrefix("org.ice4j.", false);
			if (ice4jPropertyNames != null && !ice4jPropertyNames.isEmpty()) {
				for (String propertyName : ice4jPropertyNames) {
					String propertyValue = cfg.getString(propertyName);
					// we expect the getString to return either null or a
					// non-empty String object.
					if (propertyValue != null)
						System.setProperty(propertyName, propertyValue);
				}
			}
			// These properties are moved to ice4j. This is to make sure that we
			// still support the old names.
			String oldPrefix = "org.jitsi.videobridge";
			String newPrefix = "org.ice4j.ice.harvest";
			for (String propertyName : new String[] { HarvesterConfiguration.NAT_HARVESTER_LOCAL_ADDRESS,
					HarvesterConfiguration.NAT_HARVESTER_PUBLIC_ADDRESS, HarvesterConfiguration.DISABLE_AWS_HARVESTER,
					HarvesterConfiguration.FORCE_AWS_HARVESTER,
					HarvesterConfiguration.STUN_MAPPING_HARVESTER_ADDRESSES }) {
				String propertyValue = cfg.getString(propertyName);
				if (propertyValue != null) {
					String newPropertyName = newPrefix + propertyName.substring(oldPrefix.length());
					System.setProperty(newPropertyName, propertyValue);
				}
			}
			String enableLipSync = cfg.getString(Endpoint.ENABLE_LIPSYNC_HACK_PNAME);
			if (enableLipSync != null) {
				System.setProperty(VideoChannel.ENABLE_LIPSYNC_HACK_PNAME, enableLipSync);
			}
			String disableNackTerminaton = cfg.getString(VideoChannel.DISABLE_NACK_TERMINATION_PNAME);
			if (disableNackTerminaton != null) {
				System.setProperty(RtxTransformer.DISABLE_NACK_TERMINATION_PNAME, disableNackTerminaton);
			}
		}
		// Initialize the the host candidate interface filters in the ice4j
		// stack.
		try {
			HostCandidateHarvester.initializeInterfaceFilters();
		} catch (Exception e) {
			logger.warn("There were errors during host candidate interface filters" + " initialization.", e);
		}
		// Start the initialization of the mapping candidate harvesters.
		// Asynchronous, because the AWS and STUN harvester may take a long
		// time to initialize.
		new Thread(MappingCandidateHarvesters::initialize).start();
	}
private void startIce4j(BundleContext bundleContext, ConfigurationService cfg) {
	
		StunStack.setPacketLogger(null);
	
		if (cfg != null) {
			List<String> ice4jPropertyNames = cfg.getPropertyNamesByPrefix("org.ice4j.", false);
			if (ice4jPropertyNames != null && !ice4jPropertyNames.isEmpty()) {
				for (String propertyName : ice4jPropertyNames) {
					String propertyValue = cfg.getString(propertyName);
				
				
					if (propertyValue != null)
						System.setProperty(propertyName, propertyValue);
				}
			}
		
		
			String oldPrefix = "org.jitsi.videobridge";
			String newPrefix = "org.ice4j.ice.harvest";
			for (String propertyName : new String[] { HarvesterConfiguration.NAT_HARVESTER_LOCAL_ADDRESS,
					HarvesterConfiguration.NAT_HARVESTER_PUBLIC_ADDRESS, HarvesterConfiguration.DISABLE_AWS_HARVESTER,
					HarvesterConfiguration.FORCE_AWS_HARVESTER,
					HarvesterConfiguration.STUN_MAPPING_HARVESTER_ADDRESSES }) {
				String propertyValue = cfg.getString(propertyName);
				if (propertyValue != null) {
					String newPropertyName = newPrefix + propertyName.substring(oldPrefix.length());
					System.setProperty(newPropertyName, propertyValue);
				}
			}
			String enableLipSync = cfg.getString(Endpoint.ENABLE_LIPSYNC_HACK_PNAME);
			if (enableLipSync != null) {
				System.setProperty(VideoChannel.ENABLE_LIPSYNC_HACK_PNAME, enableLipSync);
			}
			String disableNackTerminaton = cfg.getString(VideoChannel.DISABLE_NACK_TERMINATION_PNAME);
			if (disableNackTerminaton != null) {
				System.setProperty(RtxTransformer.DISABLE_NACK_TERMINATION_PNAME, disableNackTerminaton);
			}
		}
	
	
		try {
			HostCandidateHarvester.initializeInterfaceFilters();
		} catch (Exception e) {
			logger.warn("There were errors during host candidate interface filters" + " initialization.", e);
		}
	
	
	
		new Thread(MappingCandidateHarvesters::initialize).start();
	}
private void startice4j(bundlecontext bundlecontext, configurationservice cfg) { stunstack.setpacketlogger(null); if (cfg != null) { list<string> ice4jpropertynames = cfg.getpropertynamesbyprefix("org.ice4j.", false); if (ice4jpropertynames != null && !ice4jpropertynames.isempty()) { for (string propertyname : ice4jpropertynames) { string propertyvalue = cfg.getstring(propertyname); if (propertyvalue != null) system.setproperty(propertyname, propertyvalue); } } string oldprefix = "org.jitsi.videobridge"; string newprefix = "org.ice4j.ice.harvest"; for (string propertyname : new string[] { harvesterconfiguration.nat_harvester_local_address, harvesterconfiguration.nat_harvester_public_address, harvesterconfiguration.disable_aws_harvester, harvesterconfiguration.force_aws_harvester, harvesterconfiguration.stun_mapping_harvester_addresses }) { string propertyvalue = cfg.getstring(propertyname); if (propertyvalue != null) { string newpropertyname = newprefix + propertyname.substring(oldprefix.length()); system.setproperty(newpropertyname, propertyvalue); } } string enablelipsync = cfg.getstring(endpoint.enable_lipsync_hack_pname); if (enablelipsync != null) { system.setproperty(videochannel.enable_lipsync_hack_pname, enablelipsync); } string disablenackterminaton = cfg.getstring(videochannel.disable_nack_termination_pname); if (disablenackterminaton != null) { system.setproperty(rtxtransformer.disable_nack_termination_pname, disablenackterminaton); } } try { hostcandidateharvester.initializeinterfacefilters(); } catch (exception e) { logger.warn("there were errors during host candidate interface filters" + " initialization.", e); } new thread(mappingcandidateharvesters::initialize).start(); }