/* * * @APPLE_LICENSE_HEADER_START@ * * Copyright (c) 1999-2008 Apple Inc. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ * */ /* File: GenerateXMLPrefs.h Contains: Routine that updates a QTSS 1.x 2.x PrefsSource to the new XMLPrefsSource. */ #include "GenerateXMLPrefs.h" #include "QTSSDataConverter.h" #include "QTSS.h" struct PrefConversionInfo { char* fPrefName; char* fModuleName; QTSS_AttrDataType fPrefType; }; static const PrefConversionInfo kPrefs[] = { { "rtsp_timeout", NULL, qtssAttrDataTypeUInt32 }, { "real_rtsp_timeout", NULL, qtssAttrDataTypeUInt32 }, { "rtp_timeout", NULL, qtssAttrDataTypeUInt32 }, { "maximum_connections", NULL, qtssAttrDataTypeSInt32 }, { "maximum_bandwidth", NULL, qtssAttrDataTypeSInt32 }, { "movie_folder", NULL, qtssAttrDataTypeCharArray }, { "bind_ip_addr", NULL, qtssAttrDataTypeCharArray }, { "break_on_assert", NULL, qtssAttrDataTypeBool16 }, { "auto_restart", NULL, qtssAttrDataTypeBool16 }, { "total_bytes_update", NULL, qtssAttrDataTypeUInt32 }, { "average_bandwidth_update", NULL, qtssAttrDataTypeUInt32 }, { "safe_play_duration", NULL, qtssAttrDataTypeUInt32 }, { "module_folder", NULL, qtssAttrDataTypeCharArray }, { "error_logfile_name", NULL, qtssAttrDataTypeCharArray }, { "error_logfile_dir", NULL, qtssAttrDataTypeCharArray }, { "error_logfile_interval", NULL, qtssAttrDataTypeUInt32 }, { "error_logfile_size", NULL, qtssAttrDataTypeUInt32 }, { "error_logfile_verbosity", NULL, qtssAttrDataTypeUInt32 }, { "screen_logging", NULL, qtssAttrDataTypeBool16 }, { "error_logging", NULL, qtssAttrDataTypeBool16 }, { "drop_all_video_delay", NULL, qtssAttrDataTypeSInt32 }, { "start_thinning_delay", NULL, qtssAttrDataTypeSInt32 }, { "large_window_size", NULL, qtssAttrDataTypeSInt32 }, { "window_size_threshold", NULL, qtssAttrDataTypeSInt32 }, { "min_tcp_buffer_size", NULL, qtssAttrDataTypeUInt32 }, { "max_tcp_buffer_size", NULL, qtssAttrDataTypeUInt32 }, { "tcp_seconds_to_buffer", NULL, qtssAttrDataTypeFloat32 }, { "do_report_http_connection_ip_address", NULL, qtssAttrDataTypeBool16 }, { "default_authorization_realm", NULL, qtssAttrDataTypeCharArray }, { "run_user_name", NULL, qtssAttrDataTypeCharArray }, { "run_group_name", NULL, qtssAttrDataTypeCharArray }, { "append_source_addr_in_transport", NULL, qtssAttrDataTypeBool16 }, { "rtsp_port", NULL, qtssAttrDataTypeUInt16 }, { "request_logging", "QTSSAccessLogModule", qtssAttrDataTypeBool16 }, { "request_logfile_name", "QTSSAccessLogModule", qtssAttrDataTypeCharArray }, { "request_logfile_dir", "QTSSAccessLogModule", qtssAttrDataTypeCharArray }, { "request_logfile_size", "QTSSAccessLogModule", qtssAttrDataTypeUInt32 }, { "request_logfile_interval", "QTSSAccessLogModule", qtssAttrDataTypeUInt32 }, { "history_update_interval", "QTSSSvrControlModule", qtssAttrDataTypeUInt32 }, { "buffer_seconds", "QTSSFileModule", qtssAttrDataTypeUInt32 }, { "sdp_url", "QTSSFileModule", qtssAttrDataTypeCharArray }, { "admin_email", "QTSSFileModule", qtssAttrDataTypeCharArray }, { "max_advance_send_time", "QTSSFileModule", qtssAttrDataTypeUInt32 }, { "reflector_delay", "QTSSReflectorModule", qtssAttrDataTypeUInt32 }, { "reflector_bucket_size", "QTSSReflectorModule", qtssAttrDataTypeUInt32 }, { "web_stats_url", "QTSSWebStatsModule", qtssAttrDataTypeCharArray }, { "loss_thin_tolerance", "QTSSFlowControlModule", qtssAttrDataTypeUInt32 }, { "num_losses_to_thin", "QTSSFlowControlModule", qtssAttrDataTypeUInt32 }, { "loss_thick_tolerance", "QTSSFlowControlModule", qtssAttrDataTypeUInt32 }, { "num_losses_to_thick", "QTSSFlowControlModule", qtssAttrDataTypeUInt32 }, { "num_worses_to_thin", "QTSSFlowControlModule", qtssAttrDataTypeUInt32 }, { "relay_stats_url", "QTSSRelayModule", qtssAttrDataTypeCharArray }, { "relay_prefs_file", "QTSSRelayModule", qtssAttrDataTypeCharArray }, { "num_conns_per_ip_addr", "QTSSSpamDefenseModule", qtssAttrDataTypeUInt32 }, { "modAccess_usersfilepath", "QTSSAccessModule", qtssAttrDataTypeCharArray }, { "modAccess_groupsfilepath", "QTSSAccessModule", qtssAttrDataTypeCharArray }, { "modAccess_qtaccessfilename", "QTSSAccessModule", qtssAttrDataTypeCharArray }, // // This element will be used if the pref is something we don't know about. // Just have unknown prefs default to be server prefs with a type of char { NULL, NULL, qtssAttrDataTypeCharArray } }; int GenerateAllXMLPrefs(FilePrefsSource* inPrefsSource, XMLPrefsParser* inXMLPrefs) { for (UInt32 x = 0; x < inPrefsSource->GetNumKeys(); x++) { // // Get the name of this pref char* thePrefName = inPrefsSource->GetKeyAtIndex(x); // // Find the information corresponding to this pref in the above array UInt32 y = 0; for ( ; kPrefs[y].fPrefName != NULL; y++) if (::strcmp(thePrefName, kPrefs[y].fPrefName) == 0) break; char* theTypeString = (char*)QTSSDataConverter::TypeToTypeString(kPrefs[y].fPrefType); ContainerRef module = inXMLPrefs->GetRefForModule(kPrefs[y].fModuleName); ContainerRef pref = inXMLPrefs->AddPref(module, thePrefName, theTypeString); char* theValue = inPrefsSource->GetValueAtIndex(x); static char* kTrue = "true"; static char* kFalse = "false"; // // If the pref is a Bool16, the new pref format uses "true" & "false", // the old one uses "enabled" and "disabled", so we have to explicitly convert. if (kPrefs[y].fPrefType == qtssAttrDataTypeBool16) { if (::strcmp(theValue, "enabled") == 0) theValue = kTrue; else theValue = kFalse; } inXMLPrefs->AddPrefValue(pref, theValue); } return inXMLPrefs->WritePrefsFile(); } int GenerateStandardXMLPrefs(PrefsSource* inPrefsSource, XMLPrefsParser* inXMLPrefs) { char thePrefBuf[1024]; for (UInt32 x = 0; kPrefs[x].fPrefName != NULL; x++) { char* theTypeString = (char*)QTSSDataConverter::TypeToTypeString(kPrefs[x].fPrefType); ContainerRef module = inXMLPrefs->GetRefForModule(kPrefs[x].fModuleName); ContainerRef pref = inXMLPrefs->AddPref(module, kPrefs[x].fPrefName, theTypeString); for (UInt32 y = 0; true; y++) { if (inPrefsSource->GetValueByIndex(kPrefs[x].fPrefName, y, thePrefBuf) == 0) break; // // If the pref is a Bool16, the new pref format uses "true" & "false", // the old one uses "enabled" and "disabled", so we have to explicitly convert. if (kPrefs[x].fPrefType == qtssAttrDataTypeBool16) { if (::strcmp(thePrefBuf, "enabled") == 0) ::strcpy(thePrefBuf, "true"); else ::strcpy(thePrefBuf, "false"); } inXMLPrefs->AddPrefValue(pref, thePrefBuf); } } return inXMLPrefs->WritePrefsFile(); }