Add even more of the source

This should be about everything needed to build so far?
This commit is contained in:
Darren VanBuren 2017-03-07 17:14:16 -08:00
parent af3619d4fa
commit 849723c9cf
547 changed files with 149239 additions and 0 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,76 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
<qtssobject type=form param="_self">
<input type=hidden name=filename value="general_settings.html">
<input type=hidden name=action value="SaveGeneralSettings">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="AccessHistHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width="100%" height=1 align=middle alt="">
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=0 width=380>
<tr>
<td align=left valign=top width="100%">
<table border=0 cellspacing=0 cellpadding=4 width="100%" height=14>
<tr>
<td align=left nowrap bgcolor="#8C94AD" class=white>
<b><qtssstring name="AccessHistFilesReqHeader"/></b>
</td>
</tr>
</table>
<table border=0 bgcolor="#FFFFFF" cellspacing=1 cellpadding=4 width="100%">
<tr>
<td align=left nowrap bgcolor="#C6C6D6" class=small>
<b class=grey><qtssstring name="AccessHistFileReq"/></b>
</td>
<td nowrap width="47%" bgcolor="#C6C6D6" align=right class=small>
<b class=grey><qtssstring name="AccessHistReqCount"/></b>
</td>
</tr>
<qtssrepeater name=accesslog/><tr>
<td align=left nowrap bgcolor="#EFEFF7" class=small>
<qtssobject name="qtssAccessURI"/>
</td>
<td nowrap width="47%" bgcolor="#EFEFF7" class=small align=right>
<qtssobject name="qtssAccessCount"/>
</td>
</tr></qtssrepeater>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject></body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,738 @@
#!/usr/bin/perl
#
# @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@
#
package broadcasterlib;
use Foundation;
# ServerExists()
# Returns 1 if the app is installed, 0 if it's not.
sub ServerExists
{
my $loc = NSString->stringWithCString_("/Applications/QuickTime Broadcaster.app");
if (NSFileManager->defaultManager->fileExistsAtPath_($loc)) {
return 1;
}
return 0;
}
# GetServerUsername()
# Returns the username under which QTBroadcaster is running,
# or an empty string if QTBroadcaster isn't active.
sub GetServerUsername
{
my $ps = `/bin/ps -auwx`;
my @splitps = split(/\n/, $ps);
my $username = '';
for ($i = 0; $i < scalar(@splitps); $i++) {
my $current = $splitps[$i];
if ($current =~ /QuickTime Broadcaster/) {
$current =~ /^([^\s]+)/;
$username = $1;
}
}
return $username;
}
# CountServers
# Returns a count of other broadcasters.
sub CountServers
{
my $ps = `/bin/ps -auwx`;
my @splitps = split(/\n/, $ps);
my $pid = (-1);
my $count = 0;
for ($i = 0; $i < scalar(@splitps); $i++) {
my $current = $splitps[$i];
my @splitcurrent = split(/\s+/, $current);
if ($current =~ /QuickTime Broadcaster/) {
$count = $count + 1;
}
}
return $count;
}
# KillServer(signal)
# Finds the pid for the broadcaster and kills it.
sub KillServer
{
my $signal = $_[0];
my $ps = `/bin/ps -auwx`;
my @splitps = split(/\n/, $ps);
my $pid = (-1);
for ($i = 0; $i < scalar(@splitps); $i++) {
my $current = $splitps[$i];
my @splitcurrent = split(/\s+/, $current);
if ($current =~ /QuickTime Broadcaster/) {
$pid = $splitcurrent[1];
kill $signal, $pid;
}
}
}
# GetPrefDictionaryLoc()
# Returns the location of the current pref dictionary.
sub GetPrefDictionaryLoc
{
$username = GetServerUsername();
$locstr = "~$username/Library/Preferences/com.apple.QuickTime Broadcaster.plist";
$loc = NSString->stringWithCString_($locstr);
$loc = $loc->stringByExpandingTildeInPath;
return $loc->cString;
}
# GetPrefDictionary()
# Returns the pref dictionary for the currently running broadcaster user
# in NSDictionary format
sub GetPrefDictionary
{
my $locstr = GetPrefDictionaryLoc();
my $loc = NSString->stringWithCString_($locstr);
return NSDictionary->dictionaryWithContentsOfFile_($loc);
}
# GetPresetDictionaryLoc(presetName, presetType)
# Returns the location of the selected preset name
sub GetPresetDictionaryLoc
{
my $presetName = $_[0];
my $presetType = $_[1];
if ($presetType == 0) {
$presetDir = "Audio";
}
elsif ($presetType == 1) {
$presetDir = "Video";
}
else {
$presetDir = "Network";
}
my $username = GetServerUsername();
my $locstr = "~$username/Library/QuickTime Broadcaster Presets/$presetDir/$presetName.xml";
my $loc = NSString->stringWithCString_($locstr);
return $loc->stringByExpandingTildeInPath->cString;
}
# GetPresetDictionary(presetName, presetType)
# Returns the root dictionary for the given preset.
sub GetPresetDictionary
{
my $presetName = $_[0];
my $presetType = $_[1];
my $loc = GetPresetDictionaryLoc($presetName, 2);
return NSDictionary->dictionaryWithContentsOfFile_(NSString->stringWithCString_($loc));
}
# GetPresetSettingsDictionary(presetName, presetType)
# Returns an NSDictionary with the settings from the given preset name and type.
sub GetPresetSettingsDictionary
{
my $presetName = $_[0];
my $presetType = $_[1];
my $dict = GetPresetDictionary($presetName, 2);
$dict = $dict->objectForKey_(NSString->stringWithCString_("settings"));
return $dict;
}
# GetSettingsFileNetworkDictionary
# Returns an NSDictionary with the network settings for the QTSS settings file.
sub GetSettingsFileNetworkDictionary
{
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
my $rootDict = NSDictionary->dictionaryWithContentsOfFile_($fileLoc);
return $rootDict->objectForKey_(NSString->stringWithCString_("network"));
}
# GetDefaultDict()
# Returns the default dictionary for the settings file.
sub GetDefaultDict
{
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
my $rootDict = NSMutableDictionary->dictionary;
my $settingsDict = NSMutableDictionary->dictionary;
$rootDict->setObject_forKey_(NSNumber->numberWithInt_(1), NSString->stringWithCString_("version"));
my $settingsDict = NSMutableDictionary->dictionary;
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("author"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_("0"), NSString->stringWithCString_("bufferDelay"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("copyright"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_("mystream"), NSString->stringWithCString_("fileName"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_("127.0.0.1"), NSString->stringWithCString_("hostName"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("info"));
$settingsDict->setObject_forKey_(NSNumber->numberWithBool_(0), NSString->stringWithCString_("overTCP"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("password"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("title"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_("unicastAnnounce"), NSString->stringWithCString_("transmissionType"));
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("userName"));
$settingsDict->setObject_forKey_(NSNumber->numberWithInt_(1), NSString->stringWithCString_("version"));
$rootDict->setObject_forKey_($settingsDict, NSString->stringWithCString_("network"));
return $rootDict;
}
# CheckForStreamingServerSettingsFile()
# Creates a streaming server settings file if necessary.
sub CheckForStreamingServerSettingsFile
{
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
if (!NSFileManager->defaultManager->fileExistsAtPath_($fileLoc)) {
if (-e '/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist') {
unlink '/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist';
}
my $rootDict = GetDefaultDict();
$rootDict->writeToFile_atomically_($fileLoc, 1);
}
# check for the broadcaster settings dir
if (!(-e '/Library/QuickTimeStreaming/Config/Broadcaster Presets')) {
mkdir '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
chmod 0775, '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
}
}
# RereadSettingsFile(connection)
# Sent after we start the server.
sub RereadSettingsFile
{
my $server = $_[0];
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
my $tmpFolder = "/tmp/qtss-qtbroadcaster-tmp";
my $tmpFolderLoc = NSString->stringWithCString_($tmpFolder);
my $otherFileLoc = NSString->stringWithCString_("/tmp/qtss-qtbroadcaster-tmp/qtss-qtbroadcaster-settings-tmp.qtbr");
my $audioEnabled = GetStreamEnabledForType($server, 0);
my $videoEnabled = GetStreamEnabledForType($server, 1);
my $recordingEnabled = IsRecording($server);
my $rootDict = GetDefaultDict();
if (!(-e $tmpFolder)) {
mkdir $tmpFolder, 0700;
}
$rootDict->writeToFile_atomically_($otherFileLoc, 1);
$server->setBroadcastSettingsFile_($otherFileLoc);
$server->setBroadcastSettingsFile_($fileLoc);
SetStreamEnabledForType($server, 0, $audioEnabled);
SetStreamEnabledForType($server, 1, $videoEnabled);
SetRecording($server, $recordingEnabled);
unlink "/tmp/qtss-qtbroadcaster-tmp/qtss-qtbroadcaster-settings-tmp.qtbr";
rmdir $tmpFolder;
}
# GetServerConnection(autostart)
# Returns a connection to the server.
sub GetServerConnection
{
my $autostart = $_[0];
my $serverName = NSString->stringWithCString_("QuickTimeBroadcasterRemoteAdmin");
my $server = NSConnection->rootProxyForConnectionWithRegisteredName_host_($serverName, 0);
if ((!$server || !$$server) && (GetServerUsername() eq '') && ($autostart == 1)) {
CheckForStreamingServerSettingsFile();
if (fork()) {
exec "/Applications/QuickTime Broadcaster.app/Contents/MacOS/QuickTime Broadcaster", "-noui" or print STDERR "couldn't exec: $!";
}
}
if (!(!$server || !$$server)) {
$server->retain();
}
return $server;
}
# CurrentState(connection, messageHash)
# Returns a string with the current server state.
sub CurrentState
{
my $server = $_[0];
my $messageHashRef = $_[1];
my %messageHash = %$messageHashRef;
my $state = $server->state;
if ($state == 0) {
return $messageHash{'QTBStateSetup'};
}
elsif ($state == 1) {
return $messageHash{'QTBStateStartingBroadcast'};
}
elsif ($state == 2) {
return $messageHash{'QTBStatePrerolling'};
}
elsif ($state == 3) {
return $messageHash{'QTBStateBroadcasting'};
}
elsif ($state == 4) {
return $messageHash{'QTBStateStoppingBroadcast'};
}
# this should never happen
return 'Unknown';
}
# StartStopButtonText(connection, messageHash)
# Returns a string for the start/stop button.
sub StartStopButtonText
{
my $server = $_[0];
my $messageHashRef = $_[1];
my %messageHash = %$messageHashRef;
if ($server->state == 0) {
return $messageHash{'QTBStartButton'};
}
return $messageHash{'QTBStopButton'};
}
# GetBroadcasterStateID(connection)
# Returns the state integer.
sub GetBroadcasterStateID
{
my $server = $_[0];
return $server->state;
}
# IsRecording(connection)
# Returns 0 or 1 to denote whether the given server is set to record.
sub IsRecording
{
my $server = $_[0];
if ($server->recording()) {
return 1;
}
else {
return 0;
}
}
# SetRecording(connection, record)
# Set to 1 to record, or 0 to not record.
sub SetRecording
{
my $server = $_[0];
my $record = $_[1];
$server->setRecording_($record);
}
# GetRecordingPath(connection)
# Gets the recording path for the given server.
sub GetRecordingPath
{
my $server = $_[0];
return $server->recordingPath->cString;
}
# SetRecordingPath(connection, path)
# Sets the recording path.
sub SetRecordingPath
{
my $server = $_[0];
my $path = $_[1];
$server->setRecordingPath_(NSString->stringWithCString_($path));
}
# GetStreamEnabledForType(connection, type)
# Returns 1 if enabled, 0 if not.
sub GetStreamEnabledForType
{
my $server = $_[0];
my $type = $_[1];
if ($type == 0) {
$typeStr = NSString->stringWithCString_("audio");
}
else {
$typeStr = NSString->stringWithCString_("video");
}
my $enabled = $server->streamEnabled_($typeStr);
return "$enabled";
}
# SetStreamEnabledForType(connection, type, enabled)
# Set to 0 to disable, 1 to enable
sub SetStreamEnabledForType
{
my $server = $_[0];
my $type = $_[1];
my $enabled = $_[2];
if ($type == 0) {
$typeStr = NSString->stringWithCString_("audio");
}
else {
$typeStr = NSString->stringWithCString_("video");
}
$server->setStreamEnabled_ofType_(($enabled == 1), $typeStr);
}
# GetPresetsForType(connection, type)
# Returns an array ref of preset names.
# Pass it 0 for audio, 1 for audio, and 2 for network.
sub GetPresetsForType
{
my $server = $_[0];
my $type = $_[1];
@presets = ('');
my $i;
my $currentPreset;
my $sharedPresetsFolder = '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
my $presetFolderLoc;
if ($type == 0) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Audio");
}
elsif ($type == 1) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Video");
}
elsif ($type == 2) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Network");
}
if (-e $presetFolderLoc->cString) {
my $folderContents = NSFileManager->defaultManager->directoryContentsAtPath_($presetFolderLoc);
if (!(!$folderContents || !$$folderContents)) {
for ($i = 0; $i < $folderContents->count; $i++) {
$currentPreset = $folderContents->objectAtIndex_($i);
push(@presets, $currentPreset->stringByDeletingPathExtension->cString);
}
}
}
my $presetsArrayObj = $server->presetNameList_($type);
for ($i = 0; $i < $presetsArrayObj->count; $i++) {
$currentPreset = $presetsArrayObj->objectAtIndex_($i);
if ((!$folderContents || !$$folderContents) || (!$folderContents->containsObject_($currentPreset))) {
push(@presets, $currentPreset->cString);
}
}
return \@presets;
}
# GetStringForType(type)
# Gets the preference dictionary name for a preset type.
sub GetStringForType
{
my $type = $_[0];
if ($type == 0) {
return "audio";
}
elsif ($type == 1) {
return "video";
}
return "network";
}
# GetCurrentPresetForType(connection, type)
# Gets the current preset name.
sub GetCurrentPresetForType
{
my $connection = $_[0];
my $type = $_[1];
my $locObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist");
my $valueAsObj;
if (NSFileManager->defaultManager->fileExistsAtPath_($locObj)) {
my $dict = NSDictionary->dictionaryWithContentsOfFile_($locObj);
if (!$dict or !$$dict) {
return '';
}
$valueAsObj = $dict->objectForKey_(NSString->stringWithString_(GetStringForType($type)));
if (!(!$valueAsObj or !$$valueAsObj)) {
return $valueAsObj->cString;
}
}
$valueAsObj = $connection->currentPresetName_($type);
if (!$valueAsObj or !$$valueAsObj) {
return '';
}
return $valueAsObj->cString;
}
# SetCurrentPresetForType(connection, type, value)
# Sets the preset to the selected one.
sub SetCurrentPresetForType
{
my $connection = $_[0];
my $type = $_[1];
my $value = $_[2];
my $valueStr = NSString->stringWithCString_($value);
my $sharedPresetsFolder = '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
if ($type == 0) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Audio");
}
elsif ($type == 1) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Video");
}
elsif ($type == 2) {
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Network");
}
my $locObj = $presetFolderLoc->stringByAppendingPathComponent_($valueStr);
my $locObj = $locObj->stringByAppendingPathExtension_(NSString->stringWithCString_("xml"));
my $saveLocObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
my $mutableDict = NSMutableDictionary->dictionaryWithContentsOfFile_($saveLocObj);
if (NSFileManager->defaultManager->fileExistsAtPath_($locObj)) {
my $dict = NSDictionary->dictionaryWithContentsOfFile_($locObj);
$dict = $dict->objectForKey_(NSString->stringWithCString_("settings"));
# turn audio preview off, if applicable
if ($type == 0) {
my $mutableAudioSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($dict);
my $sourceSettingsDict = $mutableAudioSettingsDict->objectForKey_(NSString->stringWithCString_("source"));
if (!(!$sourceSettingsDict || !$$sourceSettingsDict)) {
my $mutableSourceSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($sourceSettingsDict);
$mutableSourceSettingsDict->setObject_forKey_(NSNumber->numberWithBool_(0), NSString->stringWithCString_("preview"));
$sourceSettingsDict = NSDictionary->dictionaryWithDictionary_($mutableSourceSettingsDict);
$mutableAudioSettingsDict->setObject_forKey_($sourceSettingsDict, NSString->stringWithCString_("source"));
$dict = NSDictionary->dictionaryWithDictionary_($mutableAudioSettingsDict);
}
}
my $typestr = GetStringForType($type);
my $typeobj = NSString->stringWithCString_($typestr);
$mutableDict->setObject_forKey_($dict, $typeobj);
$connection->setCurrentPresetName_ofType_($valueStr, $type);
}
else {
$connection->setCurrentPresetName_ofType_($valueStr, $type);
$mutableDict->removeObjectForKey_(NSString->stringWithCString_(GetStringForType($type)));
}
$mutableDict->writeToFile_atomically_($saveLocObj, 1);
my $statusLocObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist");
my $statusDict = NSMutableDictionary->dictionaryWithContentsOfFile_($statusLocObj);
if (!$statusDict or !$$statusDict) {
$statusDict = NSMutableDictionary->dictionary;
}
$statusDict->setObject_forKey_(NSString->stringWithCString_($value), NSString->stringWithCString_(GetStringForType($type)));
$statusDict->writeToFile_atomically_($statusLocObj, 1);
}
# SetNetworkSetting(settingName, valueObj)
sub SetNetworkSetting
{
my $settingName = $_[0];
my $valueObj = $_[1];
my $settingNameObj = NSString->stringWithCString_($settingName);
my $locObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
my $mutableDict = NSMutableDictionary->dictionaryWithContentsOfFile_($locObj);
my $settingsDict = $mutableDict->objectForKey_(NSString->stringWithCString_("network"));
my $mutableSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($settingsDict);
$mutableSettingsDict->setObject_forKey_($valueObj, $settingNameObj);
$mutableDict->setObject_forKey_($mutableSettingsDict, NSString->stringWithCString_("network"));
$mutableDict->writeToFile_atomically_($locObj, 1);
}
# IsExternalHost()
# Returns 0 if localhost, 1 if not.
sub IsExternalHost
{
my $hostName = GetNetworkHostname();
if ($hostName eq '') {
return 0;
}
return 1;
}
# GetNetworkHostname()
# Returns the hostname from the "QuickTime Streaming Server" network preset.
sub GetNetworkHostname
{
my $dict = GetSettingsFileNetworkDictionary();
my $hostName = $dict->objectForKey_(NSString->stringWithCString_("hostName"));
if ($hostName->isEqualToString_(NSString->stringWithCString_("127.0.0.1"))) {
return '';
}
return $hostName->cString;
}
# SetNetworkHostname(hostName)
# Sets the hostname for the "QuickTime Streaming Server" network preset to the given hostname.
sub SetNetworkHostname
{
my $hostName = $_[0];
SetNetworkSetting("hostName", NSString->stringWithCString_($hostName));
}
# GetNetworkFilepath()
# Returns the SDP filepath. This differs from the other method in that it
# only searches the "QuickTime Streaming Server" preset.
sub GetNetworkFilepath
{
my $dict = GetSettingsFileNetworkDictionary();
my $fileName = $dict->objectForKey_(NSString->stringWithCString_("fileName"));
return $fileName->cString . ".sdp";
}
# SetNetworkFilepath(fileName)
# Sets the filepath for the "QuickTime Streaming Server" network preset to the given filepath.
sub SetNetworkFilepath
{
my $fileName = $_[0];
$fileName =~ s/.sdp$//;
SetNetworkSetting("fileName", NSString->stringWithCString_($fileName));
}
# GetBufferDelay()
# Returns the buffer delay.
sub GetBufferDelay
{
my $dict = GetSettingsFileNetworkDictionary();
my $bufferDelay = $dict->objectForKey_(NSString->stringWithCString_("bufferDelay"));
return $bufferDelay->cString;
}
# SetBufferDelay(delay)
# Sets the buffer delay.
sub SetBufferDelay
{
my $delay = $_[0];
SetNetworkSetting("bufferDelay", NSString->stringWithCString_($delay));
}
# GetNetworkUsername()
# Returns the username for the current broadcast.
sub GetNetworkUsername
{
my $dict = GetSettingsFileNetworkDictionary();
my $username = $dict->objectForKey_(NSString->stringWithCString_("userName"));
return $username->cString;
}
# SetNetworkUsername(username)
# Sets the username for the current broadcast.
sub SetNetworkUsername
{
$username = $_[0];
SetNetworkSetting("userName", NSString->stringWithCString_($username));
}
# GetNetworkPassword()
# Returns the Password for the current broadcast.
sub GetNetworkPassword
{
my $dict = GetSettingsFileNetworkDictionary();
my $password = $dict->objectForKey_(NSString->stringWithCString_("password"));
return $password->cString;
}
# SetNetworkPassword(password)
# Sets the password for the current broadcast.
sub SetNetworkPassword
{
$password = $_[0];
SetNetworkSetting("password", NSString->stringWithCString_($password));
}
# GetBroadcastNetworkType()
# Returns 0 for UDP and 1 for TCP.
sub GetBroadcastNetworkType
{
my $dict = GetSettingsFileNetworkDictionary();
if ($dict->objectForKey_(NSString->stringWithCString_("overTCP"))->boolValue == 0) {
return 0;
}
if (GetNetworkHostname() eq '') {
return 0;
}
return 1;
}
# SetBroadcastNetworkType(type)
# Use 0 for UDP and 1 for TCP.
sub SetBroadcastNetworkType
{
my $type = $_[0];
SetNetworkSetting("overTCP", NSNumber->numberWithBool_($type));
}
# WriteRefMovie(defaultDNSName)
# Writes out the ref movie for the broadcast.
sub WriteRefMovie
{
my $defaultDNSName = $_[0];
my $serverRoot = NSString->stringWithUTF8String_($ENV{"SERVER_ROOT"});
my $refMovieFilename = NSString->stringWithUTF8String_("view_broadcast.mov");
$refMovieFilename = $serverRoot->stringByAppendingPathComponent_($refMovieFilename);
my $networkFilepath = GetNetworkFilepath();
my $refMovieText = NSString->stringWithUTF8String_("rtsptext\rrtsp://$defaultDNSName/$networkFilepath");
$refMovieText->writeToFile_atomically_($refMovieFilename, 1);
}
# StartStopBroadcast(connection)
# Toggles the broadcast state, and returns a message.
sub StartStopBroadcast
{
my $server = $_[0];
if ($server->state != 3) {
# check to see if either audio or video stream is enabled
if ((GetStreamEnabledForType($server, 0) != 1) && (GetStreamEnabledForType($server, 1) != 1)) {
return '';
}
$server->startBroadcast;
return 'QTBConfStarted';
}
else {
$server->stopBroadcast;
return 'QTBConfStopped';
}
}
# StopBroadcast(connection)
# Stops the broadcast.
sub StopBroadcast
{
my $server = $_[0];
$server->stopBroadcast;
}
# QuitBroadcaster(connection)
# Tells the broadcaster to quit. Necessary to re-read prefs files.
sub QuitBroadcaster
{
my $server = $_[0];
$server->quit;
}
1;

View file

@ -0,0 +1,218 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<script type="text/javascript" language="Javascript">
function showConfirmMessage() {
if ("<qtssobject name=confirmMessage/>" == "<qtssstring name=QTBErrBroadcastSettings/>")
entityAlert("<qtssobject name=confirmMessage/>");
else if ("<qtssobject name=confirmMessage/>" != "") {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage("<qtssobject name=confirmMessage/>");
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage("<qtssobject name=confirmMessage/>");
}
}
}
function setPopupToStringVal(thePopup, theString) {
for (var i = 0; i < thePopup.options.length; i++) {
if (thePopup.options[i].value == theString)
thePopup.options[i].selected = true;
}
}
function setPresetVals() {
setPopupToStringVal(document.forms[0].elements['qtbCurrentAudioPreset'], document.forms[0].elements['qtbCurrentAudioPreset_shadow'].value);
setPopupToStringVal(document.forms[0].elements['qtbCurrentVideoPreset'], document.forms[0].elements['qtbCurrentVideoPreset_shadow'].value);
}
function fixSDPField() {
if ((document.forms[0].elements['qtbNetworkPresetSDPFilename'].value.indexOf('.sdp') < 0) && (document.forms[0].elements['qtbNetworkPresetSDPFilename'].value != '')) {
document.forms[0].elements['qtbNetworkPresetSDPFilename'].value = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value + '.sdp';
}
}
function fixBufferDelayField() {
if (document.forms[0].elements['qtbBufferDelay'].value.match('[^0-9]') != null) {
document.forms[0].elements['qtbBufferDelay'].value = document.forms[0].elements['qtbBufferDelay_shadow'].value
}
}
function clickedTestButton() {
var sdpFilename = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value;
window.open('/parse_xml.cgi?filename=content_ondemand.html&action=TestOnDemandContent&curmoviepath=/' + sdpFilename, 'OnDemandContent', 'width=510,height=390,scrollbars=yes,resizable=yes');
}
function clickedViewButton() {
location.href = '/view_broadcast.mov';
}
function clickedQuitButton() {
document.forms[0].elements['action'].value = 'QuitBroadcaster';
document.forms[0].elements['filename'].value = 'welcome.html';
document.forms[0].submit();
}
function clickedStartStopButton() {
fixSDPField();
document.forms[0].elements['action'].value = 'StartStopBroadcast';
document.forms[0].submit();
}
function validateFormData() {
fixSDPField();
fixBufferDelayField();
var sdpFieldValue = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value
if ((sdpFieldValue == '') || (sdpFieldValue == '.sdp')) {
entityAlert('<qtssstring name=PLErrMountPointCannotBeBlank>');
document.forms[0].elements['qtbNetworkPresetSDPFilename'].focus();
document.forms[0].elements['qtbNetworkPresetSDPFilename'].select();
return false;
}
if (document.forms[0].elements['qtbStateID'].value != '0') {
return confirm("The broadcast will need to be restarted in order to change settings. Restart the broadcast now?");
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage();setPresetVals()">
<qtssobject type=validatedform>
<qtssobject name="qtssSvrDefaultDNSName" type=hidden/>
<qtssobject name="qtbStateID" type=hidden/>
<qtssobject name="qtbHostname" type=hidden/>
<input type="hidden" name="action" value="SaveBroadcasterSettings">
<input type="hidden" name="filename" value="broadcaster_settings.html">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<p>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</p>
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="QTBTitle"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td align=left valign=top>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=right>
<b><qtssstring name="QTBCurrentStatus"/>:</b>
</td>
<td align=left>
<qtssobject name="qtbStatus"/><qtssobject name="qtbStatus" type=hidden/>
</td>
</tr>
<tr>
<td align=right>
<b><qtssstring name="QTBAudioPreset"/>:</b>
</td>
<td align=left>
<qtssobject type="select" name="qtbCurrentAudioPreset"><qtssrepeater name="audiopresets">
<option value="<qtssobject name=qtbAudioPresetNames>"><qtssobject name="qtbAudioPresetNames"/></option>
</qtssrepeater></qtssobject></select>&nbsp;<qtssobject name="qtbAudioStreamEnabled" format="checkbox" param="1"/><qtssstring name="Enabled"/>
</td>
</tr>
<tr>
<td align=right>
<b><qtssstring name="QTBVideoPreset"/>:</b>
</td>
<td align=left>
<qtssobject type="select" name="qtbCurrentVideoPreset"><qtssrepeater name="videopresets">
<option value="<qtssobject name=qtbVideoPresetNames>"><qtssobject name="qtbVideoPresetNames"/></option>
</qtssrepeater></qtssobject></select>&nbsp;<qtssobject name="qtbVideoStreamEnabled" format="checkbox" param="1"/><qtssstring name="Enabled"/>
</td>
</tr>
<tr>
<td align=right><b><qtssstring name="MountPoint"/></b></td>
<td align=left><qtssobject type="text" name="qtbNetworkPresetSDPFilename" param=" size=30 onchange=fixSDPField()"/></td>
</tr>
<tr>
<td align=right><b><qtssstring name="QTBBufferDelay"/>:</b></td>
<td align=left><qtssobject type="text" name="qtbBufferDelay" param=" size=3 onchange=fixBufferDelayField()"/></td>
</tr>
<tr>
<td colspan=2>&nbsp;</td>
</tr>
</table>
<br>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td align=left valign=top>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedStartStopButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedStartStopButton()"><qtssobject name="qtbStartStopButtonText"/></a></td>
</tr>
</table>
<qtssrepeater name="broadcasting"><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedViewButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedViewButton()"><qtssstring name="QTBViewBroadcast"/></a></td>
</tr>
</table></qtssrepeater>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedQuitButton();"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedQuitButton();"><qtssstring name="QTBQuitBroadcasterButton"/></a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left valign=top colspan=2>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left valign=top>
<br>
</td>
<td align=right valign=top>
<br>
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject></form></body>
</html>

View file

@ -0,0 +1,207 @@
# cgi-lib.pl
# Common functions for writing http headers
#----------------------------------------------------------
#
# @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@
#
#
#---------------------------------------------------------
package cgilib;
# init days and months
my $ssl = $ENV{"HTTPS"};
@weekday = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );
@month = ( "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );
%status = ( '200' => "OK",
'302' => "Temporarily Unavailable",
'401' => "Unauthorized",
'403' => "Forbidden",
'404' => "File Not Found",
);
# PrintOKTextHeader(servername, cookie)
# changed 7/25/01 by JAA to add support for cookies
sub PrintOKTextHeader {
my $datestr = HttpDate(time());
my $charsetstr = '';
if($ENV{"LANGUAGE"} eq "ja") {
$charsetstr = ';charset=Shift_JIS';
}
my $headerstr = "HTTP/1.0 200 OK\r\nServer: $_[0]\r\nContent-Type: text/html$charsetstr\r\nConnection:close\r\n";
$headerstr .= "Set-Cookie: $_[1]\r\n" if ($_[1] ne "");
# Safari cache control
$headerstr .= "Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n";
$headerstr .= "Last-Modified: $datestr\r\n";
$headerstr .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";
$headerstr .= "Cache-Control: post-check=0, pre-check=0, false\r\n";
$headerstr .= "Pragma: no-cache\r\n";
$headerstr .= "\r\n";
print $headerstr;
}
# PrintFileDownloadHeader(servername)
# added 4/25/02 by JAA to allow content downloads
sub PrintFileDownloadHeader {
my $datestr = HttpDate(time());
my $charsetstr = '';
if($ENV{"LANGUAGE"} eq "ja") {
$charsetstr = ';charset=Shift_JIS';
}
my $headerstr = "HTTP/1.0 200 OK\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: application/octet-stream\r\nConnection:close\r\n";
print $headerstr;
}
# PrintRedirectHeader(servername, redirectpath)
# changed from PrintRedirectHeader(servername, serverip, serverport, redirectpage)
sub PrintRedirectHeader {
my $datestr = HttpDate(time());
print "HTTP/1.0 302 Temporarily Unavailable\r\nDate: $datestr\r\nServer: $_[0]\r\n"
. "Location: $_[1]\r\nConnection:close\r\n\r\n";
}
# PrintChallengeHeader(servername, challengeheader)
sub PrintChallengeHeader {
my $datestr = HttpDate(time());
print "HTTP/1.0 401 Unauthorized\r\nDate: $datestr\r\nServer: $_[0]\r\n"
. "Content-Type: text/html\r\nConnection:close\r\n$_[1]\r\n\r\n";
}
# PrintChallengeResponse(servername, challengeheader, messageHash)
sub PrintChallengeResponse {
PrintChallengeHeader($_[0], $_[1]);
PrintUnauthorizedHtml($_[2]);
}
# PrintForbiddenHeader(servername)
sub PrintForbiddenHeader {
my $datestr = HttpDate(time());
print "HTTP/1.0 403 Forbidden\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: text/html\r\nConnection:close\r\n\r\n";
}
# PrintForbiddenResponse(servername, filename, messageHash)
sub PrintForbiddenResponse {
PrintForbiddenHeader($_[0]);
PrintForbiddenHtml($_[1], $_[2]);
}
# PrintForbiddenHtml(filename, messageHash)
sub PrintForbiddenHtml {
my $messHash = $_[1];
my %messages = %$messHash;
print "<HTML><HEAD><TITLE>$messages{'Http403Status'}</TITLE></HEAD>"
. "<BODY><H1>$messages{'Http403Status'}</H1><P>$messages{'Http403Body'} : $_[0]</P></BODY></HTML>";
}
# PrintNotFoundHeader(servername)
sub PrintNotFoundHeader {
my $datestr = HttpDate(time());
print "HTTP/1.0 404 File Not Found\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: text/html\r\nConnection:close\r\n\r\n";
}
# PrintNotFoundResponse(servername, filename, messageHash)
sub PrintNotFoundResponse {
PrintNotFoundHeader($_[0]);
PrintNotFoundHtml($_[1], $_[2]);
}
# PrintNotFoundHtml(filename, messageHash)
sub PrintNotFoundHtml {
my $messHash = $_[1];
my %messages = %$messHash;
print "<HTML><HEAD><TITLE>$messages{'Http404Status'}</TITLE></HEAD>"
. "<BODY><H1>$messages{'Http404Status'}</H1><P>$messages{'Http404Body'} : $_[0]</P></BODY></HTML>";
}
# PrintStatusLine(num)
sub PrintStatusLine {
print "HTTP/1.0 $_[0] $status{$_[0]}\r\n";
}
# PrintDateAndServerStr(server)
sub PrintDateAndServerStr {
my $datestr = HttpDate(time());
print "Date: $datestr\r\nServer: $_[0]\r\n";
}
# PrintTextTypeAndCloseStr()
sub PrintTextTypeAndCloseStr {
print "Content-Type: text/html\r\nConnection: close\r\n\r\n";
}
# PrintUnauthorizedHeader(servername, realm)
sub PrintUnauthorizedHeader {
my $datestr = HttpDate(time());
print "HTTP/1.0 401 Unauthorized\r\nServer:$_[0]\r\nDate: $datestr\r\n"
. "WWW-authenticate: Basic realm=\"$_[1]\"\r\n"
. "Content-Type: text/html\r\nConnection: close\r\n\r\n";
}
# PrintServerNotRunningHtml(messageHash)
sub PrintServerNotRunningHtml {
my $messHash = $_[0];
my %messages = %$messHash;
print "<HTML><HEAD><TITLE>$messages{'ServerNotRunningMessage'}</TITLE></HEAD>"
. "<BODY><BR><H3>&nbsp;&nbsp;$messages{'StartServerMessage'}</H3>"
. "</BODY></HTML>";
}
# PrintUnauthorizedHtml(messageHash)
sub PrintUnauthorizedHtml {
my $messHash = $_[0];
my %messages = %$messHash;
print "<HTML><HEAD><TITLE> $messages{'Http401Status'}</TITLE></HEAD>"
. "<BODY><H1> $messages{'Http401Status'}</H1><P> $messages{'Http401Body'}.\n"
. "</P></BODY></HTML>";
}
# PrintUnauthorizedResponse(servername, realm, messageHash)
sub PrintUnauthorizedResponse {
PrintUnauthorizedHeader($_[0], $_[1]);
PrintUnauthorizedHtml($_[2]);
}
# HttpDate(timeinsecfrom1970)
sub HttpDate {
local @tm = gmtime($_[0]);
return sprintf "%s, %d %s %d %2.2d:%2.2d:%2.2d GMT",
$weekday[$tm[6]], $tm[3], $month[$tm[4]], $tm[5]+1900,
$tm[2], $tm[1], $tm[0];
}
1; #return true

View file

@ -0,0 +1,150 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
function checkStringForHighBitChars(theString) {
var foundHighBitChar = false;
for (var i = 0; i < theString.length; i++) {
if (theString.charCodeAt(i) >= 128) {
foundHighBitChar = true;
break;
}
}
return foundHighBitChar;
}
function validateFormData() {
if ((document.forms[0].elements['new_user'].value != '') && (document.forms[0].elements['new_password1'].value == '')) {
entityAlert("<qtssstring name=ChPassMustEnterPasswdString/>");
return false;
}
if (document.forms[0].elements['new_user'].value.indexOf(':') >= 0) {
entityAlert("<qtssstring name=ChPassUsernameCannotHaveColonText/>");
return false;
}
if (document.forms[0].elements['new_user'].value.indexOf(' ') > 0) {
entityAlert("<qtssstring name=ChPassCannotContainSpacesText/>");
return false;
}
if (document.forms[0].elements['new_user'].value == document.forms[0].elements['qtssAdminUsername'].value) {
entityAlert("<qtssstring name=ChBoradcastPassCannotBeAdminUser/>");
return false;
}
if (document.forms[0].elements['new_password1'].value != document.forms[0].elements['new_password2'].value) {
entityAlert("<qtssstring name=ChPassNoMatchText>");
return false;
}
for (var i = 0; i < 7; i++) {
if ((document.forms[0].elements[i].value) && (checkStringForHighBitChars(document.forms[0].elements[i].value))) {
entityAlert("<qtssstring name=ChPassNoHighBitStr/>");
return false;
break;
}
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="document.getElementById('new_user').focus()">
<qtssobject type=validatedform>
<input type=hidden name=filename value="general_settings.html"> <input type=hidden name=action value="ChangeBroadcastPassword">
<qtssobject type=hidden name=qtssAdminUsername/>
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20><img src="images/spacer.gif" width=20 height=20 align=top alt="" hspace=0 vspace=0></td>
<td valign=top align=center>
<br>
<br>
<br>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=0 width=500>
<tr>
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt="" hspace=0 vspace=0></td>
</tr>
<tr>
<td align=left background="images/dialog_middle.gif">
<table border=0 cellspacing=0 cellpadding=4 width="98%">
<tr>
<td valign=top width=110 align=center>
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
</td>
<td align=left valign=top class=large>
<b><qtssstring name="ChBroadcastPassHeader"/></b>
<br>
<br>
<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td colspan=2>&nbsp;</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="ChPassNewUser"/></b>
</td>
<td align=left>
<input type=text name="new_user" id="new_user" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="ChPassNewPasswd"/></b>
</td>
<td align=left>
<input type=password name="new_password1" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<font face="Arial"><b><qtssstring name="ChPassReenterPasswd"/></b></font>
</td>
<td align=left>
<input type=password name="new_password2" value="" size=25>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td valign=top align=right>
<br>
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChPassChangePasswdButton/>"><span class=white>........</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left>
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,136 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
function checkStringForHighBitChars(theString) {
var foundHighBitChar = false;
for (var i = 0; i < theString.length; i++) {
if (theString.charCodeAt(i) >= 128) {
foundHighBitChar = true;
break;
}
}
return foundHighBitChar;
}
function onLoadScript() {
document.forms[0].elements['new_password1'].focus();
}
function validateFormData() {
if (document.forms[0].elements['new_password1'].value.indexOf('"') >= 0) {
entityAlert("<qtssstring name=ChMP3PassErrorNoQuotes/>");
return false;
}
if (document.forms[0].elements['new_password1'].value.indexOf('&') >= 0) {
entityAlert("<qtssstring name=ChMP3PassNoAmpersands/>");
return false;
}
if (document.forms[0].elements['new_password1'].value.indexOf(' ') >= 0) {
entityAlert("<qtssstring name=ChMP3PassErrorNoSpaces/>");
return false;
}
if ((document.forms[0].elements['new_password1'].value.indexOf('<') >= 0) || (document.forms[0].elements['new_password1'].value.indexOf('>') >= 0)) {
entityAlert("<qtssstring name=ChMP3PassNoBrackets/>");
return false;
}
if (document.forms[0].elements['new_password1'].value != document.forms[0].elements['new_password2'].value) {
entityAlert("<qtssstring name=ChMP3PassNoMatchText/>");
return false;
}
if (checkStringForHighBitChars(document.forms[0].elements['new_password1'].value)) {
entityAlert("<qtssstring name=ChMP3PassNoHighBitStr/>");
return false;
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
<qtssobject type=validatedform>
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="ChangeMP3Password">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<br>
<br>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=0 width=500>
<tr>
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt=""></td>
</tr>
<tr>
<td align=left background="images/dialog_middle.gif">
<table border=0 cellspacing=0 cellpadding=4 width="98%">
<tr>
<td valign=top width=110 align=center>
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
</td>
<td align=left valign=top class=large>
<b><qtssstring name="ChMP3PassHeader"/></b>
<br>
<br>
<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left>
<b><qtssstring name="ChMP3PassNewPasswd"/></b>
</td>
<td align=left>
<input type=password name="new_password1" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<font face="Arial"><b><qtssstring name="ChMP3PassReenterPasswd"/></b></font>
</td>
<td align=left>
<input type=password name="new_password2" value="" size=25>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td valign=top align=right>
<br>
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChMP3PassChangePasswdButton/>"><span class=white>........</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left>
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,170 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
function checkStringForHighBitChars(theString) {
var foundHighBitChar = false;
for (var i = 0; i < theString.length; i++) {
if (theString.charCodeAt(i) >= 128) {
foundHighBitChar = true;
break;
}
}
return foundHighBitChar;
}
function onLoadScript() {
document.forms[0].elements['old_username'].focus();
}
function validateFormData() {
if ((document.forms[0].elements['new_user'].value != '') && (document.forms[0].elements['new_user'].value == document.forms[0].elements['qtssBroadcastUsername'].value)) {
entityAlert("<qtssstring name=ChBoradcastPassCannotBeAdminUser/>");
return false;
}
if (document.forms[0].elements['new_user'].value.indexOf(' ') >= 0) {
entityAlert("<qtssstring name=ChPassCannotContainSpacesText/>");
return false;
}
if (document.forms[0].elements['new_user'].value.indexOf(':') >= 0) {
entityAlert("<qtssstring name=ChPassUsernameCannotHaveColonText/>");
return false;
}
for (var i = 0; i < 7; i++) {
if ((document.forms[0].elements[i].value) && (checkStringForHighBitChars(document.forms[0].elements[i].value))) {
entityAlert("<qtssstring name=ChPassNoHighBitStr/>");
return false;
break;
}
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
<qtssobject type=validatedform>
<qtssobject type=hidden name=qtssBroadcastUsername/>
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="ChangePassword">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<br>
<br>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=0 width=500>
<tr>
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt=""></td>
</tr>
<tr>
<td align=left background="images/dialog_middle.gif">
<table border=0 cellspacing=0 cellpadding=4 width="98%">
<tr>
<td valign=top width=110 align=center>
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
</td>
<td align=left valign=top class=large>
<b><qtssstring name="ChPassHeader"/></b>
<br>
<br>
<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left>
<b><qtssstring name="ChPassCurrentUser"/></b>
</td>
<td align=left>
<input type=text name="old_username" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="ChPassCurrentPasswd"/></b>
</td>
<td align=left>
<input type=password name="old_password" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="ChPassNewUser"/></b>
</td>
<td align=left>
<input type=text name="new_user" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="ChPassNewPasswd"/></b>
</td>
<td align=left>
<input type=password name="new_password1" value="" size=25>
</td>
</tr>
<tr>
<td align=left>
<font face="Arial"><b><qtssstring name="ChPassReenterPasswd"/></b></font>
</td>
<td align=left>
<input type=password name="new_password2" value="" size=25>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td valign=top align=right>
<br>
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChPassChangePasswdButton/>"><span class=white>........</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left>
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta name="generator" content="BBEdit 6.5"> </head> <body onload="document.forms[0].submit()"><qtssobject type=getform> <input type="hidden" name="filename" value="general_settings.html"> <input type="hidden" name="action" value="ConfirmPassChanged"> </qtssobject></body> </html>

View file

@ -0,0 +1,78 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
</style>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
<qtssobject type="form"><qtssobject name="nextFilename"/>
<qtssrepeater name=queryparams>
<qtssobject name=passthrough/>
</qtssrepeater>
<table border="0" cellspacing="0" cellpadding="0" width="620">
<tr>
<td align=left valign="top" nowrap width="20">
<img src="images/spacer.gif" width="20" height="20" align="top" alt="">
</td>
<td valign="top" align="center">
<br>
<br>
<br>
<br>
<br>
<table border="0" cellspacing="0" cellpadding="0" width="400">
<tr>
<td align=left>
<img src="images/dialog_top_sm.gif" width="400" height="20" align="bottom" alt="">
</td>
</tr>
<tr>
<td align=left background="images/dialog_middle_sm.gif">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td align=left width="20">
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
</td>
<td valign="top" width="64" align="center">
<img src="images/dialog_alert.gif" width=90 height=60 align=bottom alt="">
</td>
<td align=left width="20">
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
</td>
<td align=left>
<span class="large"><b><qtssobject name=dialogHeader/></b> </span>
<br>
<br>
<qtssobject name=dialogText/>
<br>
<br>
<br>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td valign="top" align="right">
<input type="submit" value="&nbsp;&nbsp;<qtssstring name=OKButtonTitle/>&nbsp;&nbsp;">
</td>
</tr>
</table>
</td>
<td align=left width="20">
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left>
<img src="images/dialog_bottom_sm.gif" width="400" height="20" align="bottom" alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,182 @@
<html>
<head>
<qtssobject name=pageRefreshTag />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.header { font-size: 18px; color:#666699 }
.white { color: #FFFFFF }
.columnheader { color: #333333; font-size: 10px; }
</style>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
<qtssobject type=getform>
<input type=hidden name="filename" value=connected.html> <input type=hidden name="action" value=setrefresh>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=600>
<tr>
<td align=left valign=top nowrap width=20>
<img src="images/spacer.gif" width="20" height="20" align="top" alt="">
</td>
<td align=left valign=top>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="ConnUserHeader" />
</td>
</tr>
<tr>
<td align=left nowrap>
<img src="images/divider.gif" width="600" height="1" align="middle" alt="">
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=4 cellpadding=2 width="100%">
<tr>
<td align=center>
<b><qtssstring name="ConnUserDisplay" /></b>&nbsp;
<qtssobject name=displayCount type=submitselect>
<qtssobject name=displayCount param=20>
20
</qtssobject>
<qtssobject name=displayCount param=50>
50
</qtssobject>
<qtssobject name=displayCount param=100>
100
</qtssobject>
<qtssobject name=displayCount param=200>
200
</qtssobject>
<qtssobject name=displayCount param=all>
<qtssstring name="ConnUserAllEntries"/>
</qtssobject>
</qtssobject>
&nbsp;<b><qtssstring name="ConnUserEntries" /></b>
</td>
<td align=center>
<b><qtssstring name="ConnUserPageRefreshInterval" />:</b>&nbsp;
<qtssobject name=pageRefreshInterval type=submitselect>
<qtssobject name=pageRefreshInterval param=5>
5
<qtssstring name="ConnUserSeconds" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=10>
10
<qtssstring name="ConnUserSeconds" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=60>
1
<qtssstring name="ConnUserMinute" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=300>
5
<qtssstring name="ConnUserMinutes" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=1800>
30
<qtssstring name="ConnUserMinutes" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=3600>
1
<qtssstring name="ConnUserHour" />
</qtssobject>
<qtssobject name=pageRefreshInterval param=never>
<qtssstring name="ConnUserNever" />
</qtssobject>
</qtssobject>
</td>
</tr>
</table><br>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td><table border=0 cellspacing=0 cellpadding=4 width="100%" height=10>
<tr>
<td align=left nowrap>
<b><qtssstring name="ConnUserHeader"/></b>
</td>
<td align=right nowrap width=210 class=small>
<qtssobject name=qtssSvrCurrentTimeMilliseconds/>
</td>
</tr>
</table></td>
</tr>
<tr>
<td><table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#EAEAEA">
<tr height=1>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
</tr>
<tr height=20>
<td width=1 height=20 bgcolor="#8C93AD"><spacer type=block width=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserConnType"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserIPAddress"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserBitRate"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserBytesSent"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserPercPacketLoss"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserTimeConnected"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserConnectedTo"/>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
</tr>
<tr>
<td colspan=15 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
</tr>
<qtssrepeater name=connectedUsers>
<tr height=20>
<td width=1 height=20 bgcolor="#8C93AD"><spacer type=block width=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserConnType" format=sortedtablecell><img src="images/<qtssobject name=qtssCliSesCurrentConnType />" width=16 height=16></qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserIPAddress" format=sortedtablecell><qtssobject name=qtssCliRTSPSessRemoteAddrStr /></qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserBitRate" format=sortedtablecell><qtssobject name=qtssCliSesCurrentBitRate format=bps /></qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserBytesSent" format=sortedtablecell><qtssobject name=qtssCliSesRTPBytesSent format=bytes /></qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserPercPacketLoss" format=sortedtablecell><qtssobject name=qtssCliSesPacketLossPercent format=float />%</qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserTimeConnected" format=sortedtablecell><qtssobject name=qtssCliSesTimeConnectedinMsec format=time /></qtssobject>
<td width=1><spacer type=block width=1 height=1 height=20></td>
<qtssobject name="connUserSort" type=customtablecell param="ConnUserConnectedTo" format=sortedtablecell><qtssobject name=qtssCliSesPresentationURL /></qtssobject>
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
</tr>
<tr>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
<td colspan=13 height=1><spacer type=block width=1 height=1></td>
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
</tr>
</qtssrepeater>
<tr>
<td colspan=15 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,80 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
.button { font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.logheader { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-weight: bold; font-size: 14px }
.header { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 18px; color:#666699 }
.green { color: #009900 }
.red { color: #CC0000 }
</style>
<qtssobject name=scriptTag>
//<script language=javascript>
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
<qtssobject type=form>
<input type=hidden name=filename value="error_log.html">
<input type=hidden name=action value="ResetErrorLog">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="ErrorLogHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
<p></p>
<table border=0 cellspacing=0 cellpadding=20>
<tr>
<td align=left>
<qtssobject name="qtssErrorLog"/>
</td>
</tr>
</table>
<p></p>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td class=button><a href="javascript:document.forms[0].submit()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td class=button><a href="javascript:document.forms[0].submit()"><qtssstring name="ErrorLogReset" /></a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,24 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><qtssstring name=ServerName/>: <qtssobject name=qtssSvrDefaultDNSName/></title>
<script type="text/javascript" language=javascript>
if (parent.frames.length > 0) {
parent.location = '/parse_xml.cgi';
}
</script>
</head>
<frameset rows="40,100%" border=0 frameborder=0>
<noframes><body bgcolor="#FFFFFF">
<p>Please load this page in a 4.0 or higher browser.</p>
</body>
</noframes>
<frame src="/parse_xml.cgi?filename=top.html" name="top" noresize scrolling=no marginwidth=0 marginheight=0 frameborder=0>
<frameset cols="150,50*" frameborder=0>
<frame src="/parse_xml.cgi?filename=nav.html" name="nav" noresize scrolling=no marginwidth=0 marginheight=0 frameborder=0>
<frame src="/parse_xml.cgi?filename=welcome.html" name="content" marginwidth=0 marginheight=0 frameborder=0>
</frameset>
</frameset>
</html>

View file

@ -0,0 +1,241 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
function onLoadScript() {
showConfirmMessage();
document.forms[0].elements['qtssMovieFolder'].focus();
}
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
function validateFormData() {
var wasInvalid = false;
if (document.forms[0].elements['qtssMovieFolder'].value == '') {
entityAlert("<qtssstring name=GenSetErrorMediaDirCannotBeBlank/>");
document.forms[0].elements['qtssMovieFolder'].value = document.forms[0].elements['qtssMovieFolder_shadow'].value;
return false;
}
if (document.forms[0].elements['qtssMaxConn'].value == '') {
entityAlert("<qtssstring name=GenSetErrorMaxConnCannotBeBlank/>");
wasInvalid = true; // trigger the form to cancel
}
if ((document.forms[0].elements['qtssMaxConn'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssMaxConn'].value < 0)) {
entityAlert("<qtssstring name=GenSetErrorMaxConnMustBeNum/>");
wasInvalid = true; // trigger the form to cancel
}
if (wasInvalid) { // set because qtssMaxConn is invalid
document.forms[0].elements['qtssMaxConn'].value = document.forms[0].elements['qtssMaxConn_shadow'].value;
return false;
}
if (document.forms[0].elements['bpsinput'].value == '') {
entityAlert("<qtssstring name=GenSetErrorMaxThroughCannotBeBlank/>");
wasInvalid = true; // trigger the form to cancel
}
if ((document.forms[0].elements['bpsinput'].value.match('[^0-9]') != null) || (document.forms[0].elements['bpsinput'].value < 0)) {
entityAlert("<qtssstring name=GenSetErrorMaxThroughMustBeNum/>");
wasInvalid = true; // trigger the form to cancel
}
if (wasInvalid) { // set because bpsinput was invalid
document.forms[0].elements['bpsinput'].value = Math.floor(document.forms[0].elements['bpsinput_shadow'].value);
return false;
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
<qtssobject type=validatedform>
<input type=hidden name=filename value="general_settings.html">
<input type=hidden name=action value="SaveGeneralSettings">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<p>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</p>
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="GenSetHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td align=left valign=top>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left>
<b><qtssstring name="GenSetMediaDir"/></b>
</td>
</tr>
<tr>
<td align=left>
<qtssobject name=qtssMovieFolder type=string param=" size=64 onchange=validateFormData()"/>
</td>
</tr>
<tr>
<td align=left class=small>
<qtssstring name="GenSetMediaDirExp"/>
<br>
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left>
<p>&nbsp;
</p>
</td>
<td align=left>
<p></p>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="GenSetMaxConn"/> </b>
</td>
<td align=left>
<qtssobject name=qtssMaxConn type=string param=" size=6 maxlength=4 onchange=validateFormData()"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="GenSetMaxThroughput"/></b>
</td>
<td align=left>
<qtssobject name=qtssMaxThroughput param=" size=6 maxlength=4 onchange=validateFormData()"/>
</td>
</tr>
<tr>
<td align=left>
<p>&nbsp;
</p>
</td>
<td align=left>
<p></p>
</td>
</tr>
<tr>
<td align=left>
<b><qtssstring name="GenSetDefaultAuthScheme"/></b>
</td>
<td align=left>
<qtssobject name="qtssAuthScheme" type=select>
<qtssobject name="qtssAuthScheme" type=option format=option param=basic>
<qtssstring name="GenSetBasicAuth"/>
</qtssobject>
<qtssobject name="qtssAuthScheme" type=option format=option param=digest>
<qtssstring name="GenSetDigestAuth"/>
</qtssobject>
</qtssobject>
</td>
</tr>
<tr>
<td align=left>
<p>&nbsp;
</p>
</td>
<td align=left>
<p></p>
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
<tr>
<td align=left valign=top>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="/parse_xml.cgi?action=&filename=change_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="/parse_xml.cgi?action=&filename=change_password.html"><qtssstring name=GenSetChangeAdminPass/></a></td>
</tr>
</table>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="/parse_xml.cgi?action=&filename=change_broadcast_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="/parse_xml.cgi?action=&filename=change_broadcast_password.html"><qtssstring name=GenSetChangeBroadcastPass/></a></td>
</tr>
</table>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="/parse_xml.cgi?action=&filename=change_mp3_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="/parse_xml.cgi?action=&filename=change_mp3_password.html"><qtssstring name=GenSetChangeMP3Pass/></a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left valign=top colspan=2>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left valign=top>
<br>
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
</td>
<td align=right valign=top>
<br>
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject></body>
</html>

View file

@ -0,0 +1,125 @@
A capella
Acid
Acid Jazz
Acid Punk
Acoustic
Alternative
AlternRock
Ambient
Avantgarde
Ballad
Bass
Bebop
Big Band
Bluegrass
Blues
Booty Bass
Cabaret
Celtic
Chamber Music
Chanson
Chorus
Christian Rap
Classic Rock
Classical
Club
Comedy
Country
Cult
Dance
Dance Hall
Darkwave
Death Metal
Disco
Dream
Drum Solo
Duet
Easy Listening
Electronic
Ethnic
Euro-House
Euro-Techno
Eurodance
Fast Fusion
Folk
Folk-Rock
Folklore
Freestyle
Funk
Fusion
Game
Gangsta
Gospel
Gothic
Gothic Rock
Grunge
Hard Rock
Hip-Hop
House
Humour
Industrial
Instrumental
Instrumental Pop
Instrumental Rock
Jazz
Jazz+Funk
Jungle
Latin
Lo-Fi
Meditative
Metal
Musical
National Folk
Native American
New Age
New Wave
Noise
Oldies
Opera
Other
Polka
Pop
Pop-Folk
Pop/Funk
Power Ballad
Pranks
Primus
Progressive Rock
Psychadelic
Psychedelic Rock
Punk
Punk Rock
R&B
Rap
Rave
Reggae
Retro
Revival
Rhythmic Soul
Rock
Rock & Roll
Samba
Satire
Showtunes
Ska
Slow Jam
Slow Rock
Sonata
Soul
Sound Clip
Soundtrack
Southern Rock
Space
Speech
Swing
Symphonic Rock
Symphony
Tango
Techno
Techno-Industrial
Top 40
Trailer
Trance
Tribal
Trip-Hop
Vocal

View file

@ -0,0 +1,438 @@
# Text messages, errors and warnings
# Keyword ########################## Message ##########
# The strings in double quotes are to be localized ####
#######################################################
# Messages used in cgi-lib.pl
# Http header and body messages
Http200Status "OK"
Http302Status "Temporarily Unavailable"
Http401Status "Unauthorized"
Http403Status "Forbidden"
Http404Status "File Not Found"
Http401Body "A password is required to administer this Streaming Server. Please Try Again."
Http403Body "Access to the requested file is denied."
Http404Body "The requested file was not found."
# Server status messages
ServerNotRunningMessage "Streaming Server is not Running"
StartServerMessage "Click on 'Start Server Now' to start the server."
# Messages used in adminprotocol-lib.pl
# Socket errors
NoHostError "No Host"
SocketFailedError "Socket Failed"
ConnectFailedError "Connect Failed"
SendFailedError "Send failed"
# File errors
FileOpenError "Can't open file"
# Time strings
DaysStr "days"
HoursStr "hrs"
MinutesStr "min"
SecondsStr "sec"
# Day strings
MonStr "Mon"
TueStr "Tue"
WedStr "Wed"
ThuStr "Thu"
FriStr "Fri"
SatStr "Sat"
SunStr "Sun"
# Month strings
JanStr "Jan"
FebStr "Feb"
MarStr "Mar"
AprStr "Apr"
MayStr "May"
JunStr "Jun"
JulStr "Jul"
AugStr "Aug"
SepStr "Sep"
OctStr "Oct"
NovStr "Nov"
DecStr "Dec"
# Japanese date suffix strings
YearSuffix ""
DaySuffix ""
# Server State strings
ServerServerIs "Server is"
ServerStartingUpStr "Starting Up"
ServerRunningStr "Running"
ServerNotRunningStr "Not Running"
ServerRefusingConnectionsStr "Refusing Connections"
ServerInFatalErrorStateStr "In Fatal Error State"
ServerShuttingDownStr "Shutting Down"
ServerIdleStr "Idle"
# Start/Stop Server Buttons
StartServerButton "Enable Server"
StopServerButton "Disable Server"
# Units
BytesStr "Bytes"
KiloBytesStr "KB"
MegaBytesStr "MB"
GigaBytesStr "GB"
BitsPerSecStr "bps"
KilobitsPerSecStr "Kbps"
MegabitsPerSecStr "Mbps"
# Time in seconds for confirmation messages to disappear
ConfirmSecs "5"
# Confirmation colors - hex values
ConfirmColor "#006600"
# Messages used in playlist-lib.pl
# labels used in playlist tables
PLMovie "Movie"
PLDirectory "Directory"
PLState_0 "stopped"
PLState_1 "playing"
PLState_2 "error"
# Globals
ServerName "Darwin Streaming Server"
QTServerName "QuickTime Streaming Server"
MountPoint "Mount Point:"
Username "User Name:"
Password "Password:"
of "of"
# Server Startup messages
ServerStartupExpText "The server is currently not running.<br>Please start it before attempting to administer it."
# Login/logout messages
LoginTitle "Log In to Darwin Streaming Server"
QTLoginTitle "Log In to QuickTime Streaming Server"
LoginPleaseLogin "Log in with an administrative username and password."
LoginUsername "User Name:"
LoginPassword "Password:"
LoginButton "Log In"
# Standard dialog stuff
CancelButtonTitle "Cancel"
OKButtonTitle "OK"
SubmitButtonTitle "Save Changes"
Enabled "Enabled"
Disabled "Disabled"
# Central nav links
NavMain "Main"
NavBroadcaster "Broadcaster"
NavConnectedUsers "Connected Users"
NavRelayStatus "Relay Status"
NavGeneralSettings "General Settings"
NavPortSettings "Port Settings"
NavRelaySettings "Relay Settings"
NavLogSettings "Log Settings"
NavPlaylists "Playlists"
NavErrorLog "Error Log"
NavAccessHistory "Access History"
NavLogOut "Log Out"
# Server Snapshot messages
SnapshotHeader "Server Snapshot"
SnapshotServer "Server:"
SnapshotStatus "Status:"
SnapshotStarted "Started"
SnapshotCurrentTimeOnServer "Current Time On Server:"
SnapshotUptime "Up Time:"
SnapshotDNSName "DNS Name (default):"
SnapshotServerVersion "Server Version:"
SnapshotServerAPIVersion "Server API Version:"
SnapshotCPULoad "CPU Load:"
SnapshotCurrentConnectionCount "Current # of Connections:"
SnapshotCurrentThroughput "Current Throughput:"
SnapshotTotalBytesServed "Total Bytes Served:"
SnapshotTotalConnectionsServed "Total Connections Served:"
# General Settings messages
GenSetHeader "General Settings"
GenSetMediaDir "Media Directory:"
GenSetMediaDirExp "This is the master directory where all of your media is stored."
GenSetSSL "Secure Administration (SSL):"
GenSetMaxConn "Max. Number of Connections:"
GenSetMaxThroughput "Max. Throughput:"
GenSetDefaultAuthScheme "Default Authentication Scheme:"
GenSetBasicAuth "Basic"
GenSetDigestAuth "Digest"
GenSetOSXAutoStart "Start Server at System Startup:"
GenSetChangeAdminPass "Change Admin Username/Password..."
GenSetChangeBroadcastPass "Change Movie Broadcast Password..."
GenSetChangeMP3Pass "Change MP3 Broadcast Password..."
GenSetSettingsSavedText "Your settings have been saved."
GenSetErrorMediaDirCannotBeBlank "The media directory cannot be blank."
GenSetErrorMaxConnCannotBeBlank "The maximum connections setting cannot be blank."
GenSetErrorMaxConnMustBeNum "The maximum connections setting must be a positive integer."
GenSetErrorMaxThroughCannotBeBlank "The maximum throughput setting cannot be blank."
GenSetErrorMaxThroughMustBeNum "The maximum throughput setting must be a positive integer."
GenSetErrorSSLNotAvail "SSL is not available on this computer. Please make sure that the Net::SSLeay perl module, OpenSSL, and a signed SSL certificate are installed."
# Connected Users messages
ConnUserHeader "Connected Users"
ConnUserDisplay "Display"
ConnUserAllEntries "all"
ConnUserEntries "entries"
ConnUserPageRefreshInterval "Page Refresh Interval"
ConnUserSeconds "seconds"
ConnUserMinute "minute"
ConnUserMinutes "minutes"
ConnUserHour "hour"
ConnUserNever "Never"
ConnUserIPAddress "IP Address"
ConnUserConnType "Type"
ConnUserBitRate "Bit Rate"
ConnUserBytesSent "Bytes Sent"
ConnUserPercPacketLoss "% Packet Loss"
ConnUserTimeConnected "Time Connected"
ConnUserConnectedTo "Connected To"
# Relay Status messages
RelayStatHeader "Relay Status"
RelayStatConnRelays "Connected Relays"
RelayStatRelayName "Relay Name"
RelayStatSource "Source"
RelayStatDestination "Destination"
RelayStatBitrate "Bit Rate"
RelayStatBytesRelayed "Bytes Relayed"
# Port Settings messages
PortSetHeader "Port Settings"
PortSetStreaming80Title "Streaming on Port 80:"
PortSetDesc1 "Streaming on port 80 will allow you to get through some restrictive firewalls, but may interfere with Apache or other web servers running on the same machine."
PortSetDesc2 ""
PortSetSavedText "Your port settings have been saved."
PortServerNotBound80Message "The server is currently not bound to port 80."
PortChangeRestartServerConfirm "In order for this change to take effect, you must restart the server. This will interrupt any current streams. Restart now?"
# Change Password messages
ChPassHeader "Change Administrator Username/Password"
ChPassCurrentUser "Current User Name:"
ChPassCurrentPasswd "Current Password:"
ChPassNewUser "New User Name:"
ChPassNewPasswd "New Password:"
ChPassReenterPasswd "Re-enter New Password:"
ChPassChangePasswdButton "Change Password"
ChPassSavedText "Your new password has been saved."
ChPassOldPasswdWrongHeader "Incorrect Password"
ChPassOldPasswdWrongText "The old password was entered incorrectly. Please try again."
ChPassNoMatchHeader "Passwords don't match"
ChPassNoMatchText "The two passwords you entered don't match. Please try again."
ChPassErrorHeader "Error"
ChPassErrorText "An error occurred while changing your password."
ChPassNotLongerThan80Header "Password too long"
ChPassNotLongerThan80Text "Your password cannot be longer than 80 characters."
ChPassUsernameNotLongerThan255Header "Username longer than 255 characters"
ChPassUsernameNotLongerThan255Text "Your username cannot be longer than 255 characters."
ChPassUsernameCannotHaveColonHeader "Username has : character"
ChPassUsernameCannotHaveColonText "Your username cannot have the colon (:) character."
ChPassCannotHaveQuotesHeader "Username/Password has a quote character"
ChPassCannotContainSpacesText "Your administrator name cannot contain spaces."
ChPassCannotHaveQuotesText "Your username/password cannot quote characters (either single or double)."
ChPassNoHighBitStr "Your username/password cannot have high-bit characters."
ChPassMustEnterPasswdString "You must enter a password."
# Change Broadcast Password messages
ChBroadcastPassHeader "Change Broadcast Username/Password"
ChBroadcastPassAllowUnrestricted "Allow unrestricted broadcasting"
ChBroadcastPassSpacesText "Your broadcast username cannot contain spaces."
ChBoradcastPassCannotBeAdminUser "Your broadcast username cannot be the same as your administrator username."
# Change MP3 Password messages
ChMP3PassHeader "Change MP3 Broadcast Password"
ChMP3PassCurrentPasswd "Current Password:"
ChMP3PassNewPasswd "New Password:"
ChMP3PassReenterPasswd "Re-enter New Password:"
ChMP3PassChangePasswdButton "Change Broadcast Password"
ChMP3PassSavedText "Your new broadcast password has been saved."
ChMP3PassOldPasswdWrongHeader "Incorrect Password"
ChMP3PassOldPasswdWrongText "The old password was entered incorrectly. Please try again."
ChMP3PassNoMatchHeader "Passwords don't match"
ChMP3PassNoMatchText "The two passwords you entered don't match. Please try again."
ChMP3PassErrorHeader "Error"
ChMP3PassErrorText "An error occurred while changing your password."
ChMP3PassErrorNoQuotes "Your MP3 password cannot contain quotation marks."
ChMP3PassErrorNoSpaces "Your MP3 password cannot contain spaces."
ChMP3PassNoHighBitStr "Your MP3 password cannot have high-bit characters."
ChMP3PassNoBrackets "Your MP3 password cannot contain < or > symbols."
ChMP3PassNoAmpersands "Your MP3 password cannot contain ampersands."
ChMP3PassNoPercentageMarks "Your MP3 password cannot contain % symbols."
# Log Settings messages
LogSetHeader "Log Settings"
LogSetErrorLogHeader "Error Log"
LogSetErrorLogging "Logging:"
LogSetEvery "every"
LogSetDays "days"
LogSetRollErrorLog "Roll log:"
LogSetAccessLog "Access Log"
LogSetAccessLogging "Logging:"
LogSetRollAccessLog "Roll log:"
LogSetSavedHeader "Log Settings Saved"
LogSetSavedText "Your settings have been saved."
LogSetErrorValidationError "All of the settings on this screen must be positive integers."
# Error Log messages
ErrorLogHeader "Error Log"
ErrorLogReset "Reset Error Log"
ErrorLogResetConf "The error log has been reset successfully."
# Access History messages
AccessHistHeader "Access History"
AccessHistFilesReqHeader "Files Requested Since Last Reset"
AccessHistFileReq "File Requested"
AccessHistReqCount "Requests"
# Playlist messages
PLHeader "Playlists"
PLAvailablePlaylists "Available Playlists:"
PLNewMP3 "New MP3 Playlist"
PLNewMovie "New Media Playlist"
PLDeleteButton "Delete Playlist"
PLEditButton "Edit Playlist"
PLChangedHeader "Playlist Status(es) Changed"
PLChangedText "The status of your playlist has been changed."
PLErrorHeader "Error"
PLErrorText "An error occurred while starting or stopping your playlist."
PLErrorLogHeader "Playlist Error Log"
PLCreatedText "Your playlist was saved successfully."
PLCreateErrorHeader "Error"
PLCreateErrorText "An error occurred while creating your playlist."
PLDeleteText "Your playlist was deleted successfully."
PLErrNameCannotBeBlank "The playlist name cannot be blank."
PLErrMountPointCannotBeBlank "The mount point cannot be blank."
PLErrMountPointCannotContainSpaces "The mount point cannot contain spaces."
PLErrRepetitionTooLarge "The repetition value for weighted random playlists cannot be higher than the number of songs in the playlist."
PLDeleteErrorHeader "Error"
PLDeleteErrorText "An error occurred while deleting your playlist."
PLMP3PlaylistDetails "MP3 Playlist Details"
PLMoviePlaylistDetails "Media Playlist Details"
PLGenre "Genre:"
PLDefaultGenre "Pop"
PLName "Name:"
PLPlayMode "Play Mode:"
PLPlayModeWeightedRandom "Weighted Random"
PLPlayModeSequentialLooped "Sequential Looped"
PLPlayModeSequential "Sequential"
PLRepetition "Repetition:"
PLItemsRepeatAfter "Items only repeat after"
PLItemsHavePlayed "other items have played"
PLInstructions "Click and drag files from the left to the right to add to your playlist."
PLAvailableMedia "Available Content:"
PLItemsInPlaylist "Items in This Playlist:"
PLReorderInstructions "Drag items in your playlist up or down to reorder them."
PLOpenFolderButton "Open Folder"
PLRemoveItemButton "Remove Item"
PLOrderHeader "Order"
PLTitleHeader "Title"
PLWeightHeader "Weight"
PLLogging "Log this playlist's activity"
PLRelayToExternal "Send this playlist to a broadcast server"
PLStarted "Playing"
PLStopped "Stopped"
PLSetBroadcastPasswordConfirm "You must set an MP3 Broadcast Password before starting a playlist. Set a password now?"
PLStartBeforeTestingConfirm "This playlist must be started before viewing its publishing info. Start the playlist now?"
PLDeleteConfirm "Are you sure you want to delete the selected playlist?"
PLErrNameConflict "A playlist with this name already exists. Please choose a different name."
# Defaults for playlists... please do not include high-bit characters here.
PLDefaultPlaylistName "untitled"
PLDefaultMoviePlaylistSDP "untitled.sdp"
PLDefaultMP3PlaylistMountPoint "/untitled"
# Relay messages
RelayNameHeader "Name"
RelayStatusHeader "Status"
RelaySources "Other Relays:"
RelayNewSourceButton "New Relay"
RelayDeleteSourceButton "Delete Relay"
RelayEditSourceButton "Edit Relay"
RelayEditDefaultSourceButton "Edit Default Relay"
RelayStatusEnabled "Enabled"
RelayStatusDisabled "Disabled"
RelayDefaultRelayHeader "Default Relay:"
RelayDefaultRelayName "Default Relay"
rtsp_source "Push"
announced_source "Pull"
RelayDeleteText "Your relay was deleted successfully."
RelayDetailsHeader "Relay Details"
RelayDetailsRelayName "Relay Name:"
RelayDetailsStatus "Status:"
RelayDetailsSourceSettingsHeader "Source Settings"
RelayDetailsSourceHostname "Source Hostname or IP Address:"
RelayDetailsSourceRequestStream "Request incoming stream"
RelayDetailsSourceWait "Wait for announced stream(s)"
RelayDetailsDestinationHeader "Destination Settings"
RelayDetailsDestAnnounced "Announced UDP"
RelayDetailsDestUDP "Unannounced UDP"
RelayDetailsDestBasePort "Base Port:"
RelayDetailsDestMulticastTTL "Multicast TTL:"
RelayDetailsDestHostname "Hostname or IP Address:"
RelayDetailsDeleteDestination "Remove Destination"
RelayDetailsAddDestination "Add Destination"
RelaySaveText "Your relay was saved successfully."
RelayErrNoName "You must enter a relay name."
RelayErrNoSourceIP "You must enter a source IP address or hostname."
RelayErrMulticastTTLIncorrect "The Multicast TTL must be a number between 1 and 255."
RelayErrNoDestType "One of your relay destinations has no type. Please pick one (announced or unnanounced)."
RelayErrNoDestMountpoint "One of your announced relay destinations has no mount point. Please specify one before saving."
RelayErrNoDestBasePort "One of your unannounced relay destinations has no base port. Please specify one before saving."
RelayErrNameConflict "A relay with this name already exists. Please choose a different name."
RelayDeleteConfirm "Are you sure you want to delete the selected relay?"
# QuickTime Broadcaster Admin (Mac OS X Only)
QTBTitle "Broadcaster Settings"
QTBErrAlreadyRunningTitle "Restart Broadcaster?"
QTBErrAlreadyRunningText "The broadcaster cannot be remotely administered after it's launched from the Finder. Restart the broadcaster now?"
QTBErrNotRunningTitle "Start broadcaster?"
QTBErrNotRunningText "The broadcaster is not currently running. Start it now?"
QTBCurrentStatus "Current Status"
QTBAudioPreset "Audio"
QTBVideoPreset "Video"
QTBSDPFile "SDP File"
QTBBufferDelay "Buffer Delay"
QTBViewBroadcast "View Broadcast"
QTBStateSetup "Setup"
QTBStateStartingBroadcast "Starting Broadcast"
QTBStatePrerolling "Prerolling"
QTBStateBroadcasting "Broadcasting"
QTBStateStoppingBroadcast "Stopping Broadcast"
QTBConfStarted "The broadcast has been started."
QTBConfStopped "The broadcast has been stopped."
QTBStartButton "Start Broadcast"
QTBStopButton "Stop Broadcast"
QTBQuitBroadcasterButton "Quit Broadcaster"
QTBConfQuit "The broadcaster application is no longer running."
QTBErrBroadcastSettings "The brodcast could not be started, because an error occurred."
QTBConfSaved "Your broadcaster settings have been saved."
QTBErrNotInstalledText "QuickTime Broadcaster is not installed in the /Applications folder."
# Setup Assistant
SetupAssistTitle "Setup Assistant"
SetupAssistStep1 "Assign Username/Password"
SetupAssistNoUsernameHeader "Invalid Username/Password"
SetupAssistNoUsername "You must enter a valid username and password."
SetupAssistSetPasswordButton "Set Password"
SetupAssistNextButton "Next"
SetupAssistPrevButton "Prev"
SetupAssistFinishButton "Finish"
SetupAssistPassExp "This is the password used to administer the server."
SetupAssistSkipButton "Cancel"
SetupAssistStep2 "MP3 Broadcast Password"
SetupAssistMP3PassExp "The MP3 Broadcast password is required in order to receive MP3 broadcast streams."
SetupAssistStep3 "Secure Administration"
SetupAssistSSLExp "This will enable encryption between the administration server and the web client. This feature requires that you have a valid streaming server SSL certificate installed."
SetupAssistSSLLabel "Secure Administration (SSL)"
SetupAssistStep4 "Media Folder"
SetupAssistFolderExp "This is the folder or directory in which your media is stored."
SetupAssistMediaFolder "Media Folder:"
SetupAssistStep5 "Streaming on Port 80"
SetupAssist80Exp "This allows you to stream through firewalls."
SetupAssist80Label "Streaming on Port 80"

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 979 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

View file

@ -0,0 +1,136 @@
// Constants
var offsetX = 12;
var offsetY = 0;
var tolerance = 6;
// Globals
var darwinOriginalDragX = 0;
var darwinOriginalDrayY = 0;
var currentDragBox = null;
// Constructor for the DarwinDragWidget class.
function DarwinDragWidget(window, multipleSelectedString) {
// Remember some arguments for later.
this.window = window;
this.id = 'darwinDragWidget';
this.body = '';
this.multipleSelectedString = multipleSelectedString;
// Output a CSS-P style sheet for this document.
var d = window.document;
d.writeln('<style type="text/css">');
d.write('#darwinDragWidget { position: absolute; ');
d.write('left: 0px; top: 0px; ');
d.write('visibility: hidden; ');
d.writeln('}');
d.write('#darwinInvisibleCover { position: absolute; ');
d.write('left: 0px; top: 0px; ');
d.write('width: 4px; height: 4px; ');
d.write('visibility: hidden; ');
d.writeln('}');
d.writeln('<' + '/style>');
}
// This will output the initial HTML
DarwinDragWidget.prototype.output = function() {
var d = this.window.document;
d.writeln('<div id="' + this.id + '" class=line-item>');
d.writeln(this.body);
d.writeln('<' + '/div>');
d.writeln('<div id="darwinInvisibleCover" onmouseout="SetStyleVisible(\'darwinInvisibleCover\', false)">');
d.writeln('<img src="images/invis_dragcover.gif" width=4 height=4>');
d.writeln('<' + '/div>');
// save references to the element
this.element = d.getElementById(this.id);
this.style = this.element.style;
this.window.darwinDragWidget = this;
this.element.object = this;
}
DarwinDragWidget.prototype.draw = function() {
if (this.contents) {
if (this.contents.length == 1)
this.element.innerHTML = this.contents[0].draw();
else
this.element.innerHTML = this.multipleSelectedString;
this.style.visibility = 'hidden';
this.offsetX = this.style.pixelWidth / 2;
this.offsetY = this.style.pixelHeight / 2;
}
}
function GetScrollPos(d) {
if ((document.documentElement) && (document.documentElement.scrollTop)) {
if (d == 0)
return document.body.scrollLeft + document.documentElement.scrollLeft;
else
return document.body.scrollTop + document.documentElement.scrollTop;
}
else {
if (d == 0)
return document.body.scrollLeft;
else
return document.body.scrollTop;
}
}
function darwinHandleMouseMove(e) {
if (e) {
var currentX = e.pageX;
var currentY = e.pageY;
}
else {
var currentX = event.clientX + GetScrollPos(0);
var currentY = event.clientY + GetScrollPos(1);
}
if ((Math.abs(currentX - darwinOriginalDragX) > tolerance) || (Math.abs(currentY - darwinOriginalDrayY) > tolerance)) {
SetStylePos('darwinDragWidget', 0, currentX + offsetX);
SetStylePos('darwinDragWidget', 1, currentY + offsetY);
darwinDragWidget.style.visibility = 'visible';
if (IsNS6()) {
currentDragBox = null;
for (i = 0; i < dragRegionBoxes.length; i++) {
var g = dragRegionBoxes[i];
var regionEndX = g.locationX + g.sizeX;
var regionEndY = g.locationY + g.sizeY;
if ((currentX > g.locationX) && (currentX < regionEndX) && (currentY > g.locationY) && (currentY < regionEndY)) {
g.element.style.backgroundColor = g.highlightcolor;
currentDragBox = g;
}
else {
if (currentDragBox == g)
currentDragBox = null;
g.element.style.backgroundColor = '#FFFFFF';
}
}
}
}
return false;
}
function darwinHandleMouseUp(e) {
var d = darwinDragWidget.window.document;
var str = '';
darwinDragWidget.style.visibility = 'hidden';
// stop tracking events
d.onmousemove = null;
d.onmouseup = null;
if (currentDragBox) {
for (i = 0; i < dragRegionBoxes.length; i++) {
var g = dragRegionBoxes[i];
g.element.style.backgroundColor = '#FFFFFF';
}
var allElements = currentDragBox.element.getElementsByTagName('div');
if (allElements.length > 0) {
var lastElement = allElements[allElements.length-1];
lastElement.scrollIntoView();
}
}
return true;
}

View file

@ -0,0 +1,153 @@
var dragRegionBoxes = new Array();
var testCount = 0;
// Constructor for DarwinListbox class.
function DarwinListbox(window, id, locationX, locationY, width, height, background, bordercolor, highlightcolor, allowMultipleSelect, allowDrag, allowDrop, allowRearrange) {
// Remember some arguments for later.
this.window = window;
this.id = id;
this.body = '';
this.contents = new Array();
this.highlightcolor = highlightcolor;
this.mousedown = false;
this.allowMultipleSelect = allowMultipleSelect;
this.allowDrag = allowDrag;
this.allowDrop = allowDrop;
this.locationX = locationX;
this.locationY = locationY;
this.sizeX = width;
this.sizeY = height;
this.width = width;
this.height = height;
this.bordercolor = bordercolor;
// If this is droppable, add it to the list of droppable regions.
if (allowDrop)
dragRegionBoxes[dragRegionBoxes.length] = this;
this.allowRearrange = allowRearrange;
// Output a CSS-P style sheet for this document.
var d = window.document;
d.writeln('<style type="text/css">');
d.write('#' + id + ' { ');
width += 17;
d.write('overflow: scroll; ');
d.write('border-style: solid; ');
d.write('border-width: 1px; ');
d.write('border-color: ' + bordercolor + '; ');
d.write('background: ' + background + '; ');
if (width) d.write('width: ' + width + 'px; ');
if (height) d.write('height: ' + width + 'px; ');
d.writeln('}');
d.writeln('<' + '/style>');
}
// This will output the initial HTML
DarwinListbox.prototype.output = function() {
var d = this.window.document;
d.writeln('<div id="' + this.id + '">');
d.writeln(this.body);
d.writeln('<' + '/div>');
// save references to the element
this.element = d.getElementById(this.id);
this.style = this.element.style;
// set the document's events
if (document.captureEvents)
document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
}
DarwinListbox.prototype.draw = function() {
var str = '';
for (var i in this.contents) {
str += '<div id="' + this.id + i + '" class="line-item" onmouseover="this.parent.handleMouseOver(this)" onmouseout="this.parent.handleMouseOut(this)" onselectstart="return false" onmousemove="this.parent.handleMouseOver(this)">';
this.contents[i].parent = this;
str += this.contents[i].draw();
str += '<' + '/div>';
}
this.element.innerHTML = str;
for (var i in this.contents) {
this.window.document.getElementById(this.id + i).parent = this;
}
}
DarwinListbox.prototype.selectOne = function(obj) {
var itemClicked = obj.id.replace(this.id, '');
// if the item is already selected, do nothing
if (!this.contents[itemClicked].selected) {
// deselect everything
for (var i in this.contents) {
this.window.document.getElementById(this.id + i).style.background = 'inherit';
this.contents[i].selected = false;
}
// select the clicked item
obj.style.background = this.highlightcolor;
this.contents[itemClicked].selected = true;
// send it a callback message so it can handle any UI changes
this.contents[itemClicked].onupdate();
}
else {
}
// set the last item clicked in case they shift-click next time
this.lastItemClicked = itemClicked;
}
DarwinListbox.prototype.handleMouseOver = function(obj) {
var d = this.window.document;
this.window.status = obj.id;
this.window.currentDarwinObj = obj;
if (d.onmousemove == darwinHandleMouseMove) {
if (this.allowDrop)
this.selectOne(obj);
}
else {
d.onmousedown = darwinHandleMouseDown;
}
}
// this gets called when the user mouses out of a list item
DarwinListbox.prototype.handleMouseOut = function(obj) {
if (this.window.document.onmousemove == darwinHandleMouseMove) {
this.window.currentDarwinObj = null;
this.window.document.onmousedown = null;
}
}
// this should get called when the user drops something onto the listbox
DarwinListbox.prototype.handleDrop = function(obj) {
}
function darwinHandleMouseDown(e) {
if (e) {
var currentX = e.pageX;
var currentY = e.pageY;
}
else {
var currentX = event.clientX + GetScrollPos(0);
var currentY = event.clientY + GetScrollPos(1);
e = window.event;
}
var itemClicked = window.currentDarwinObj.id.replace(window.currentDarwinObj.parent.id, '');
window.currentDarwinObj.parent.selectOne(window.currentDarwinObj);
// set up the drag widget, and send mouse move and up events to it
if (darwinDragWidget) {
var g = darwinDragWidget;
var d = window.document;
darwinOriginalDragX = currentX;
darwinOriginalDrayY = currentY;
g.contents = new Array(window.currentDarwinObj.parent.contents[itemClicked]);
g.draw();
d.onmousemove = darwinHandleMouseMove;
d.onmouseup = darwinHandleMouseUp;
}
this.mousedown = true;
return false;
}

View file

@ -0,0 +1,185 @@
var browserYOffset = 0;
var browserButtonYOffset = 0;
// calculate offsets
if (browserName.indexOf('MSIE 5.0; Mac') > 0) {
browserYOffset = 18;
browserButtonYOffset = 20;
}
function clearPreinsert() {
var newArray = new Array();
for (var i = 0; i < playlistFiles.length; i++) {
if (playlistFiles[i] != "") {
newArray[newArray.length] = playlistFiles[i];
}
}
delete playlistFiles;
playlistFiles = newArray;
}
function preInsert(thePos) {
var newArray = new Array();
for (var i = 0; i < playlistFiles.length; i++) {
if (i == thePos) newArray[newArray.length] = "";
if (playlistFiles[i] != "") {
newArray[newArray.length] = playlistFiles[i];
}
}
delete playlistFiles;
playlistFiles = newArray;
}
function doInsert(theItem) {
for (var i = 0; i < playlistFiles.length; i++) {
if (playlistFiles[i] == "") {
playlistFiles[i] = theItem;
}
}
}
function buildLibrary() {
for (var i = scrollPos1; i <= GetMin(directoryListing.length - 1, scrollPos1+gNumLayersVisible-1); i++) {
generateLayerText('library'+i, directoryListing[i]);
}
}
function buildPlaylist() {
for (var i = scrollPos2; i <= GetMin(playlistFiles.length - 1, scrollPos2+gNumLayersVisible-1); i++) {
generateLayerText('playlist'+i, playlistFiles[i]);
}
}
function buildLists() {
buildLibrary();
buildPlaylist();
}
function stageCall(s) {
currentStepNumber++;
if ((currentStepNumber == gNumberOfSteps) || ((GetStylePos(s, 0) == xFinalValue) && (GetStylePos(s, 1) == yFinalValue))) {
SetStylePos(s, 0, xFinalValue);
SetStylePos(s, 1, yFinalValue);
SetStyleVisible("draglayer", false);
}
else {
SetStylePos(s, 0, (GetStylePos(s, 0) - xStepValue));
SetStylePos(s, 1, (GetStylePos(s, 1) - yStepValue));
var currentTimer = setTimeout('stageCall("' + s + '")', gStepTiming);
}
}
function moveInStages(s, xVal, yVal) {
currentStepNumber = 0;
xStepValue = ((GetStylePos(s, 0) - xVal) / gNumberOfSteps);
yStepValue = ((GetStylePos(s, 1) - yVal) / gNumberOfSteps);
xFinalValue = xVal;
yFinalValue = yVal;
var currentTimer = setTimeout('stageCall("' + s + '")', gStepTiming);
}
function handleMouseDown(e) {
if (IsIE()) var theTarget = window.event.srcElement;
else var theTarget = e.target;
if (IsIE()) var theButton = event.button;
else var theButton = e.which;
layerClicked = "";
movingStatus = "";
if (IsIE()) {
oldX = window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
oldY = window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
offsetX = window.event.offsetX;
offsetY = window.event.offsetY;
}
else {
oldX = e.pageX
oldY = e.pageY
}
for (var i=0; i<=(Math.min(gNumLayersVisible-1,directoryListing.length-1)); i++) {
if ((oldX >= GetStylePos('library'+i, 0)) && (oldX <= (GetStylePos('library'+i, 0) + gLayerWidth)) && (oldY >= GetStylePos('library'+i, 1) + browserYOffset) && (oldY <= (GetStylePos('library'+i, 1) + gLayerHeight) + browserYOffset)) {
SetStylePos("highlight", 0, GetStylePos('library'+i, 0));
SetStylePos("highlight", 1, GetStylePos('library'+i, 1) + browserYOffset);
SetStyleVisible("highlight", true);
SetButtonsEnabled(true);
SetStylePos('draglayer', 0, GetStylePos('library'+i, 0));
SetStylePos('draglayer', 1, GetStylePos('library'+i, 1) + browserYOffset);
itemDragged = i;
generateLayerText('draglayer',directoryListing[i]);
layerClicked = 'draglayer';
}
}
if (layerClicked == "") {
if (allowDeselect) {
SetStyleVisible("highlight", false);
SetButtonsEnabled(false);
}
return true;
}
if ((layerClicked != "") && (allowDrag)) {
if (theButton == 1) {
movingStatus = "drag";
origX = GetStylePos(layerClicked, 0);
origY = GetStylePos(layerClicked, 1);
}
if (!IsIE()) {
document.captureEvents(Event.MOUSEMOVE);
}
document.onmousemove = handleDrag;
}
return false;
}
function handleMouseUp(e) {
if (movingStatus == "drag") {
movingStatus = "false";
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
if (GetStyleVisible("inserthere")) {
SetStyleVisible(layerClicked, false);
SetStyleVisible("inserthere", false);
playlistFiles[playlistFiles.length] = directoryListing[itemDragged];
// doInsert();
buildLists();
}
else moveInStages(layerClicked, origX, origY);
}
}
function handleDrag(e) {
if (movingStatus == "drag") {
SetStylePos(layerClicked, 0, window.event.clientX - offsetX);
SetStylePos(layerClicked, 1, window.event.clientY - offsetY);
var didHighlight = false;
for (var i = 0; i <= (gNumLayersVisible-1); i++) {
if ((window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft >= GetStylePos('playlist'+i, 0)) && (window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft <= (GetStylePos('playlist'+i, 0) + gLayerWidth)) && (window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop >= GetStylePos('playlist'+i, 1)) && (window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop <= (GetStylePos('playlist'+i, 1) + gLayerHeight))) {
SetStylePos("inserthere", 0, GetStylePos('playlist'+i, 0));
SetStylePos("inserthere", 1, GetStylePos('playlist'+GetMin(i,playlistFiles.length), 1));
SetStyleVisible("inserthere", true);
//preInsert(0);
//buildPlaylist();
didHighlight = true;
}
}
if ((!didHighlight) && (GetStyleVisible("inserthere"))) {
SetStyleVisible("inserthere", false);
//clearPreinsert();
buildPlaylist();
}
}
return false;
}
// re-route events to handlers
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);
document.onmousedown = handleMouseDown;
document.onmouseup = handleMouseUp;

View file

@ -0,0 +1,45 @@
entities = new Array();
chars = new Array();
entities[entities.length] = '&ocirc;';
chars[chars.length] = "ô";
entities[entities.length] = '&eacute;';
chars[chars.length] = "é";
entities[entities.length] = '&ecirc;';
chars[chars.length] = "ê";
entities[entities.length] = '&agrave;';
chars[chars.length] = "à";
entities[entities.length] = '&ocirc;';
chars[chars.length] = "ô";
entities[entities.length] = '&Ecirc;';
chars[chars.length] = "Ê";
entities[entities.length] = '&ucirc;';
chars[chars.length] = "û";
entities[entities.length] = '&uuml;';
chars[chars.length] = "ü";
entities[entities.length] = '&Auml;';
chars[chars.length] = "Ä";
entities[entities.length] = '&auml;';
chars[chars.length] = "ä";
entities[entities.length] = '&ouml;';
chars[chars.length] = "ö";
entities[entities.length] = '&szlig;';
chars[chars.length] = "ß";
function replaceEntities(theString) {
for (var i = 0; i < chars.length; i++) {
theString = eval('theString.replace(/' + entities[i] + '/g, chars[i])');
}
return theString
}
function entityAlert(theString) {
theString = replaceEntities(theString);
alert(theString);
}
function entityConfirm(theString) {
theString = replaceEntities(theString);
return confirm(theString)
}

View file

@ -0,0 +1,268 @@
isMoving = false
// browserName = "OmniWeb/4";
// try {
// tempVal = window.location.href.indexOf('lucy');
browserName = window.navigator.userAgent
// }
// catch(theErr) {
// browserName = "OmniWeb/4";
// }
browserVersion = parseInt(browserName.charAt(browserName.indexOf("/")+1),10)
gMakeVisibleAfter = ""
gIsVisible = false
prevVisible = ""
openDrawer = ""
mainNav = new Array("hrweblogo","benefits","money","staffing","training","records","policies","manager","appledir","searchbox"); // jaa
defaultPos = new Array(0,93,114,135,156,185,206,228,306,344); // jaa
baseLoc = "/areas/hrweb/employee/"
maxY = 490
menuBGColor = "#336633"
menuLineColor = "#669966"
// standard subroutines
function popUp(URL,w,h,s) {
eval("window.open(URL, 'AppleHelp', 'width="+w+",height="+h+",scrollbars="+s+"');");
}
function browserAlert() {
if (browserVersion < 4) alert("This web site only works with Netscape and Internet Explorer version 4.0 or higher.")
}
function FindStyleInArray(theStyle) {
for (var i = 0; i < (mainNav.length); i++) if (mainNav[i] == theStyle) return i
return (-1)
}
function closeAllDrawers() {
ridLayers(1)
for (var i = 0; i < (mainNav.length); i++) SetStylePos(mainNav[i], 1, defaultPos[i])
}
function IsIE() {
return browserName.indexOf("MSIE") > 0
}
function IsNS6() {
return ((browserName.indexOf("Netscape6") > 0) ||
(browserName.indexOf("Gecko") > 0));
}
function IsWin32() {
return browserName.indexOf("Win") > 0
}
function GetIEStyle(s) {
// return document.all.tags("div") [s].style
return document.all[s].style
}
function GetNSStyle(s) {
if (IsNS6()) return document.getElementById(s).style
else return document.layers[s]
}
function GetIEScrollPos(d) {
if ((document.documentElement) && (document.documentElement.scrollTop)) {
if (d == 0)
return document.body.scrollLeft + document.documentElement.scrollLeft;
else
return document.body.scrollTop + document.documentElement.scrollTop;
}
else {
if (d == 0)
return document.body.scrollLeft;
else
return document.body.scrollTop;
}
}
function GetStyle(s) {
if (IsIE()) return GetIEStyle(s)
else return GetNSStyle(s)
}
function GetMin(x, y) {
return Math.min(x, y)
}
function GetMax(x, y) {
return Math.max(x, y)
}
function SetStylePos(s, d, p) {
if (IsIE()) {
if (d == 0) GetIEStyle(s).posLeft = p
else GetIEStyle(s).posTop = p
}
else {
if (d == 0) return GetNSStyle(s).left = p
else GetNSStyle(s).top = p
}
return true
}
function GetStyleVisible(s) {
if (IsIE()) return (GetIEStyle(s).visibility == "visible")
else {
if (IsNS6()) return (document.getElementById(s).style.visibility == "visible")
else return (GetNSStyle(s).visibility == "show")
}
}
function SetStyleVisible(s, whichOne) {
if (IsIE()) {
GetIEStyle(s).visibility = whichOne ? "visible" : "hidden"
}
else {
if (IsNS6()) {
document.getElementById(s).style.visibility = whichOne ? "visible" : "hidden"
}
else GetNSStyle(s).visibility = whichOne ? "show" : "hide"
}
}
function findObj(n, d) { //v3.0 (thanks Austin!)
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document); return x;
}
function SetStyleText(s, theText) { // sets to contents of divText var
if (IsIE() || IsNS6()) {
document.getElementById(s).innerHTML = theText;
}
else {
GetStyle(s).document.write(theText);
GetStyle(s).document.close();
}
SetStyleVisible(s, true)
}
function clearSearchbox() {
document.searchbox.document.Search.elements['queryText'].value=''
document.searchbox.document.Search.elements['queryText'].blur()
SetStyleVisible('searchbox', false)
}
function SetMenu(menuLevel, whichMenu, top) {
var s = "menu"+menuLevel+"text"
if (!(GetStyleVisible(s) && (GetStylePos(s, 1) == top))) {
var s2 = "menu"+menuLevel+"bg"
var myHeight = (eval('navarray'+menuLevel)[whichMenu].length/2)*15
var theLink = ""
if ((top+myHeight>maxY) && ((top-myHeight+15)>0)) {
top = top-myHeight+15
}
var posSoFar = top
SetStylePos(s,1,top)
SetStylePos(s2,1,top)
var theText="<table width=140 height="+String(myHeight)+" cellpadding=0 cellspacing=0 border=0 bgcolor=\"" + menuBGColor + "\">\r"
theText+=" <tr><td><spacer type=\"block\" width=138 height="+String(myHeight-2)+">&nbsp;</td></tr>\r"
theText+="</table></div>\r"
SetStyleText(s2, theText)
theText = "<table width=140 border=0 cellspacing=0 cellpadding=0>\r"
theText+=" <tr>\r"
theText+=" <td width=122 height=1><spacer type=\"block\" width=122 height=1></td>\r"
theText+=" <td width=12 height=1><spacer type=\"block\" width=12 height=1></td>\r"
theText+=" </tr>\r"
var isMenuItem = false
var theURL = ""
for (var i = 0; i<eval('navarray'+menuLevel)[whichMenu].length; i=i+2) {
isMenuItem = (typeof(eval('navarray'+menuLevel)[whichMenu][i+1]) == 'string')
theText+=" <tr>\r"
theText+=" <td class=\"leftnav\" width=122 height=14"
if (isMenuItem) theText+=" colspan=2"
theText+="><a class=\"leftnav\" href=\""
theURL = String(eval('navarray'+menuLevel)[whichMenu][i+1])
if ((theURL.indexOf("http") != 0) && isMenuItem) theText+=baseLoc
if (isMenuItem) theText+=theURL+"\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+")\""
else theText+="#\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+"); SetMenu("+String(menuLevel+1)+", "+eval('navarray'+menuLevel)[whichMenu][i+1]+", "+posSoFar+")\""
theText+=" onmouseout=\"ridLater("+String(ridOnTimeout)+")"
var newItemText = eval('navarray'+menuLevel)[whichMenu][i]
if (IsIE()) var numChars = (24-newItemText.length)*0.7
else var numChars = (24-newItemText.length)*1.69
if (numChars >= 1) for (var j = 1; j<=numChars; j++) newItemText += "&nbsp;"
theText+="\">&nbsp;" + newItemText + "</a></td>\r"
if (!isMenuItem) theText+="<td align=right><b><a class=\"leftnav\" href=\"#\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+"); SetMenu("+String(menuLevel+1)+", "+eval('navarray'+menuLevel)[whichMenu][i+1]+", "+posSoFar+")\" onmouseout=\"ridLater("+String(ridOnTimeout)+")\">&gt;</a></td>"
theText+=" </tr>\r"
if (i+2<eval('navarray'+menuLevel)[whichMenu].length) theText+="<tr>\r <td colspan=2 height=1 bgcolor=\"" + menuLineColor + "\"><spacer type=\"block\" width=140 height=1></td>\r </tr>\r"
posSoFar+=15
}
theText+="</table>\r"
SetStyleText(s, theText)
}
}
function GetStylePos(s, d) {
if (IsIE()) {
if (d == 0) return GetIEStyle(s).posLeft
else return GetIEStyle(s).posTop
}
else {
if (d == 0) return GetNSStyle(s).left
else return GetNSStyle(s).top
}
}
function slideLayer(s, d, p, makeVisibleAfter) {
var theDifference = 0
var isInArray = FindStyleInArray(s) + 1
SetStyleVisible(s, true)
if (isInArray > 0) {
closeAllDrawers()
}
var currentPos = GetStylePos(s, d)
var theDifference = p - currentPos
if (!((isInArray > 0) & (makeVisibleAfter == openDrawer))) {
SetStylePos(s, d, currentPos + theDifference)
if (isInArray > 0) for (var i = isInArray; i<mainNav.length; i++) {
SetStylePos(mainNav[i], d, GetStylePos(mainNav[i],d) + theDifference)
}
if ((makeVisibleAfter != "") & (isInArray > 0)) {
if (currentPos == defaultPos[isInArray-1]) {
// activateMenu(makeVisibleAfter, 1)
var menuTop = defaultPos[isInArray-1]
if (makeVisibleAfter=='manager') menuTop -= 49
SetMenu(1,isInArray-2,menuTop)
if (openDrawer != "") restoreImage(openDrawer)
openDrawer = mainNav[isInArray-2]
exciteImage(makeVisibleAfter)
}
}
}
else {
openDrawer = ""
ridLayers(0)
}
}

View file

@ -0,0 +1,15 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Setup Assistant</title>
<meta name="generator" content="BBEdit Prerelease">
<meta http-equiv=refresh content="2; URL=parse_xml.cgi?filename=setup_assistant2.html">
<meta http-equiv=pragma content=no-cache>
<meta http-equiv=expires content="Fri, 21 Ag 1998 12:00:00 GMT">
<script type="text/javascript" language=javascript>
location.href='/parse_xml.cgi?filename=setup_assistant2.html';
</script>
</head>
<body>
</body>
</html>

View file

@ -0,0 +1,100 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>listbox test</title>
<meta name="generator" content="BBEdit 6.5.2">
<script type="text/javascript" src="includes/DarwinDragWidget.js"></script>
<script type="text/javascript" src="includes/DarwinListbox.js"></script>
<script type="text/javascript" src="includes/standardNav.js"></script>
<style type="text/css">
.line-item
{
display: block;
width: 236px;
font-family: Monaco, monospace;
font-size: 10px;
}
</style>
<script type="text/javascript" language="Javascript">
darwinDragWidget = new DarwinDragWidget(window, 'Multiple Items Selected');
libraryControl = new DarwinListbox(window, 'library', 0, 0, 236, 320, '#FFFFFF', '#8C93AD', '#D7D7E6', true, true, false, false);
playlistControl = new DarwinListbox(window, 'playlist', 287, 12, 236, 320, '#FFFFFF', '#8C93AD', '#D7D7E6', true, true, true, true);
// class for plain strings
function ImageAndStringListboxItem(imagename, description) {
this.imagename = imagename;
this.description = description;
}
// method to draw plain string... return the HTML
ImageAndStringListboxItem.prototype.draw = function() {
var str = '<img src="images/' + this.imagename + '" width="16" height="16" hspace="2" vspace="2" align="middle">';
str = str + this.description;
return str;
}
function populateListbox() {
var contents = new Array();
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'one');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'two');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'three');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'four');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'five');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'six');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'seven');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'eight');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'nine');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'ten');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'eleven');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'twelve');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'thirteen');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'fourteen');
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'fifteen');
libraryControl.contents = contents;
libraryControl.draw();
playlistControl.contents = contents;
playlistControl.draw();
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="populateListbox()">
<table>
<tr>
<td><script type="text/javascript">libraryControl.output();</script></td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td><script type="text/javascript">playlistControl.output();</script></td>
</tr>
</table>
<script type="text/javascript" language="Javascript">
darwinDragWidget.output();
var str = '';
var s = playlistControl.style
var count = 0;
var totalCount = 0;
for (var i in s) {
totalCount++;
str += i;
if ((totalCount < 40) || totalCount > 50)
str += ":" + s[i];
str += "\n";
if (++count == 20) {
count = 0;
str = '';
}
}
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>new listbox test</title>
<meta name="generator" content="BBEdit 6.5.2">
<style type="text/css">
.list-item
{
display: block;
width: 236px;
font-family: Monaco, monospace;
font-size: 10px;
background-color: #FFFFFF;
}
</style>
</head>
<body background="images/stripes_gray.gif">
<table border="0" cellspacing="0" cellpadding="2" bgcolor="#8C93AD">
<tr>
<td><table border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr>
<td class=list-item onmousedown="this.style.background = '#D7D7E6'"><img src="images/mp3_file.gif" width="16" height="16" hspace="2" vspace="2" align="middle">one</td>
</tr>
<tr>
<td class=list-item onmousedown="this.style.background = '#D7D7E6'"><img src="images/mp3_file.gif" width="16" height="16" hspace="2" vspace="1" align="middle">two</td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,214 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<script src="includes/standardNav.js" type="text/javascript" language="Javascript"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
function validateFormData() {
var wasInvalid = false;
if (document.forms[0].elements['qtssErrorLogInterval'].value == '') {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if ((document.forms[0].elements['qtssErrorLogInterval'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssErrorLogInterval'].value < 0)) {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if (wasInvalid) { // set because qtssErrorLogInterval was invalid
document.forms[0].elements['qtssErrorLogInterval'].value = document.forms[0].elements['qtssErrorLogInterval_shadow'].value;
return false;
}
if (document.forms[0].elements['qtssErrorLogSize'].value == '') {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if ((document.forms[0].elements['qtssErrorLogSize'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssErrorLogSize'].value < 0)) {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if (wasInvalid) { // set because qtssErrorLogSize was invalid
document.forms[0].elements['qtssErrorLogSize'].value = document.forms[0].elements['qtssErrorLogSize_shadow'].value;
return false;
}
if (document.forms[0].elements['qtssRequestLogInterval'].value == '') {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if ((document.forms[0].elements['qtssRequestLogInterval'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssRequestLogInterval'].value < 0)) {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if (wasInvalid) { // set because qtssRequestLogInterval was invalid
document.forms[0].elements['qtssRequestLogInterval'].value == document.forms[0].elements['qtssRequestLogInterval_shadow'].value;
return false;
}
if (document.forms[0].elements['qtssRequestLogSize'].value == '') {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if ((document.forms[0].elements['qtssRequestLogSize'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssRequestLogSize'].value < 0)) {
alert("qtssstring name=LogSetErrorValidationError/>");
wasInvalid = true;
}
if (wasInvalid) { // set because qtssRequestLogSize was invalid
document.forms[0].elements['qtssRequestLogSize'].value == document.forms[0].elements['qtssRequestLogSize_shadow'].value;
return false;
}
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
<qtssobject type=validatedform>
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="SaveLogSettings">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="LogSetHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td align=left valign=top>
<b class=large><qtssstring name="LogSetErrorLogHeader"/></b>
<br>&nbsp;<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left valign=top rowspan=2 nowrap>
<b><qtssstring name="LogSetErrorLogging"/></b>
</td>
<td align=left nowrap>
<qtssobject name="qtssErrorLogging" format=checkbox param=true/><qtssstring name="Enabled"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
</tr>
<tr>
<td align=left valign=top rowspan=2 nowrap>
<b><qtssstring name="LogSetRollErrorLog"/></b>
</td>
<td align=left nowrap>
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssErrorLogInterval" type=string param=" size=3 maxlength=3 onchange=validateFormData()"/> <qtssstring name="LogSetDays"/>
</td>
</tr>
<tr>
<td align=left nowrap>
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssErrorLogSize" type=string format=div1024 param=" size=9 maxlength=9 onchange=validateFormData()"/> <qtssstring name="KiloBytesStr"/>
</td>
</tr>
</table>
</td>
<td align=left width=30>
<img src="images/divider_vert.gif" width=30 height="100%" align=middle alt="">
</td>
<td align=left valign=top nowrap>
<b class=large><qtssstring name="LogSetAccessLog"/></b>
<br>&nbsp;<br>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=left valign=top rowspan=2 nowrap>
<b><qtssstring name="LogSetAccessLogging"/></b>
</td>
<td align=left nowrap>
<qtssobject name="qtssRequestLogging" format=checkbox param=true/><qtssstring name="Enabled"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
</tr>
<tr>
<td align=left valign=top rowspan=2>
<b><qtssstring name="LogSetRollAccessLog"/></b>
</td>
<td align=left nowrap>
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssRequestLogInterval" type=string param=" size=3 maxlength=3 onchange=validateFormData()"/> <qtssstring name="LogSetDays"/>
</td>
</tr>
<tr>
<td align=left nowrap>
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssRequestLogSize" type=string format=div1024 param=" size=9 maxlength=9 onchange=validateFormData()"/> <qtssstring name="KiloBytesStr"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left valign=top colspan=2>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left valign=top>
<br>
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
</td>
<td align=right valign=top>
<br>
<input type=submit name=Submit value="<qtssstring name=SubmitButtonTitle/>">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,74 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><qtssstring name="ServerName"/></title>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: <qtssobject name=fontFaceCSS/>; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.white { color: #FFFFFF }
input { font-size: 12px }
</style>
<qtssobject name=scriptTag>
//<script language=javascript>
function onLoadScript() {
if ((document.forms[0]) && (document.forms[0].elements) && (document.forms[0].elements['qtssusername'])) {
document.forms[0].elements['qtssusername'].focus();
if (document.forms[0].elements['filename'].value.indexOf('setup') != 0)
document.forms[0].elements['filename'].value = '';
}
}
if (parent.frames.length > 0) {
parent.location = '/parse_xml.cgi';
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()"><qtssobject type=form param="_top">
<input type="hidden" name="action" value="login">
<qtssobject name=filename type=hidden/>
<qtssobject name=treatedFilename type=hidden/>
<table border="0" width="100%" height="90%" cellspacing="0" cellpadding="0">
<tr>
<td align="center" valign="middle"><table border=0 cellspacing=0 cellpadding=0>
<tr>
<td colspan=3 valign=middle align=left><img src="images/dialog_top.gif" width=500 height=20></td>
</tr>
<tr>
<td background="images/dialog_side.gif" width=1><img src="images/dialog_side.gif" width="1" height="20"></td>
<td valign=middle align=left bgcolor="#FFFFFF" width=498><table border=0 width="98%" cellspacing=0 cellpadding=4>
<tr>
<td align=center width=110 valign=top><img src="images/nav_logo.gif" width="82" height="105" hspace=21 vspace=5></td>
<td valign=middle align=left><p class=large><qtssstring name=LoginTitle/></p>
<p><qtssstring name=LoginPleaseLogin/></p>
</td>
<tr>
<td valign=middle align=left></td>
<td valign=middle align=center><table border=0 cellspacing=4 cellpadding=0>
<tr>
<td valign=middle align=right><b><qtssstring name=LoginUsername/></b></td>
<td valign=middle align=left><input type=text name="qtssusername"></td>
</tr>
<tr>
<td valign=middle align=right><b><qtssstring name=LoginPassword/></b></td>
<td valign=middle align=left><input type="password" name="qtsspassword"></td>
</tr>
<tr>
<td valign=middle align=left></td>
<td valign=middle align=left>&nbsp;<br>&nbsp;<br><input type=submit value="&nbsp;<qtssstring name=LoginButton/>&nbsp;"/></td>
</tr>
</table></td>
<tr>
</table></td>
<td background="images/dialog_side.gif" width=1><img src="images/dialog_side.gif" width="1" height="20"></td>
</tr>
<tr>
<td colspan=3 valign=middle align=left><img src="images/dialog_bottom.gif" width="500" height="20" hspace=0 vspace=0></td>
</tr>
</table></td>
</tr>
</table></qtssobject></body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit 6.1.1">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
</style>
<script type="text/javascript" language="Javascript">
function showHelp() {
window.open('<qtssobject name=helpurl/>', 'Help', 'width=600,height=430,scrollbars=yes,resizable=yes')
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray_dark.gif">
<table border=0 width="100%" cellspacing=0 cellpadding=0>
<tr>
<td align=center><img src="images/nav_logo_small.gif" width="60" height="77" vspace="20"><br>
<table border=0 cellspacing=1 width=140>
<tr>
<td align=left width=10>&nbsp;</td>
<td align=left>
<p><a href="/parse_xml.cgi?filename=welcome.html" target=content><qtssstring name="NavMain"/></a></p>
<qtssrepeater name="broadcasteravailable"><p><a href="/parse_xml.cgi?filename=broadcaster_settings.html" target=content><qtssstring name="NavBroadcaster"/></a></p></qtssrepeater>
<p><a href="/parse_xml.cgi?filename=connected.html" target=content><qtssstring name="NavConnectedUsers"/></a><br>
<a href="/parse_xml.cgi?filename=relay_status.html" target=content><qtssstring name="NavRelayStatus"/></a></p>
<p><a href="/parse_xml.cgi?filename=general_settings.html" target=content><qtssstring name="NavGeneralSettings"/></a><br>
<a href="/parse_xml.cgi?filename=ports.html" target=content><qtssstring name="NavPortSettings"/></a><br>
<a href="/parse_xml.cgi?filename=relay.html" target=content><qtssstring name="NavRelaySettings"/></a><br>
<a href="/parse_xml.cgi?filename=log_settings.html" target=content><qtssstring name="NavLogSettings"/></a></p>
<p><a href="/parse_xml.cgi?filename=playlists.html" target=content><qtssstring name="NavPlaylists"/></a></p>
<p><a href="/parse_xml.cgi?filename=error_log.html" target=content><qtssstring name="NavErrorLog"/></a><br>
<a href="/parse_xml.cgi?filename=access_log.html" target=content><qtssstring name="NavAccessHistory"/></a></p>
<p><a href="/parse_xml.cgi?filename=login.html&amp;action=logout"><qtssstring name=NavLogOut/></a></p>
</td>
</tr>
</table><br>&nbsp;<br><a href="<qtssobject name=helpurl/>" onclick="showHelp(); return false" target="Help"><img src="images/nav_help.gif" width="20" height="20" border="0"></a></td>
</tr>
</table>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,340 @@
# password-utils.pl
# Common functions for talking to the admin module of QTSS
#----------------------------------------------------------
#
# @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@
#
#
#---------------------------------------------------------
require('adminprotocol-lib.pl');
package passwordutils;
# GetLineEndingChar
# Returns the line ending character for the current platform.
sub GetLineEndingChar
{
my $lineEnding = "\n";
if ($^O ne "MSWin32") {
$lineEnding = "\r\n";
}
return $lineEnding;
}
# GetUserList(usersFilepath, groupsFilePath)
# Given the path to the qtusers file, returns an array ref of users.
sub GetUserList
{
my $usersFilepath = $_[0];
my $groupsFilePath = $_[1];
my %usersList = ();
my $line;
my @splitItem = ();
if (open(USERFILE, $usersFilepath)) {
while ($line = <USERFILE>) {
if ($line =~ /:/o) { # not a realm statement
@splitItem = split(/:/, $line);
$line = $splitItem[0];
$usersList{$line} = 'user';
}
}
close(USERFILE);
}
if (open(GROUPSFILE, $groupsFilePath)) {
while ($line = <GROUPSFILE>) {
if ($line =~ /:/o) { # a valid line
@splitItem = split(/:/, $line);
$line = $splitItem[0];
$usersList{$line} = 'group';
}
}
close(GROUPSFILE);
}
return \%usersList;
}
# GetBroadcastRestrictionsFromFile(filepath)
# Given a path to a qtaccess file, returns the type and an array
sub GetBroadcastRestrictionsFromFile {
my $filepath = $_[0];
my $line;
my @splitText = ();
my $restrictionType = '';
my @userList = ();
my $addToList = 0;
if (open(ACCESSFILE, $filepath)) {
while ($line = <ACCESSFILE>) {
if ($addToList == 1) {
if ($line =~ /<\/limit>/i) {
$addToList = 0;
}
else {
if ($line =~ /^require/i) {
$line =~ s/[\r\n]+//s;
push(@splitText, $line);
}
}
}
else {
if ($line =~ /<limit write>/i) {
$addToList = 1;
}
}
}
close(ACCESSFILE);
if (scalar(@splitText) > 0) {
@userList = split /\s+/, $splitText[0];
}
}
return \@userList;
}
# GetViewingRestrictionsFromFile(filepath)
# Given a path to a qtaccess file, returns the type and an array
sub GetViewingRestrictionsFromFile {
my $filepath = $_[0];
my $line;
my @splitText = ();
my $restrictionType = '';
my @userList = ();
my $addToList = 0;
if (open(ACCESSFILE, $filepath)) {
while ($line = <ACCESSFILE>) {
if ($addToList == 1) {
if ($line =~ /<limit write>/i) {
$addToList = 0;
}
else {
if ($line =~ /^require/i) {
$line =~ s/[\r\n]+//s;
push(@splitText, $line);
}
}
}
else {
if ($line =~ /<\/limit>/i) {
$addToList = 1;
}
}
}
close(ACCESSFILE);
if (scalar(@splitText) > 0) {
@userList = split /\s+/, $splitText[0];
}
}
return \@userList;
}
# WriteRestrictionsToFile(filepath, broadcastRestrictionString, viewingRestrictionString)
# Given a path to a qtaccess file and a reference to an array,
# write the access data to the specified file.
sub WriteRestrictionsToFile {
my $filepath = $_[0];
my $broadcastRestrictionString = $_[1];
my $viewingRestrictionString = $_[2];
my $lineEnding = GetLineEndingChar();
if (open(ACCESSFILE, ">$filepath")) {
if ($broadcastRestrictionString ne '') {
print ACCESSFILE "<Limit WRITE>$lineEnding";
print ACCESSFILE $broadcastRestrictionString;
print ACCESSFILE "$lineEnding</Limit>$lineEnding";
}
if ($viewingRestrictionString eq '') {
$viewingRestrictionString = 'require any-user';
}
print ACCESSFILE "$viewingRestrictionString$lineEnding";
close ACCESSFILE;
}
}
sub RemoveRestrictionsFile {
my $filepath = $_[0];
my $newPath = "$filepath.1";
rename $filepath, $newPath;
}
# ParseGroupsFile(groupsfilepath)
# Returns a ref to a hash table
# each entry contains a string-delimited list of usernames.
sub ParseGroupsFile {
my $groupsfilepath = $_[0];
my %groups = ();
my $line;
my $lineUsernames;
if (open(GROUPSFILE), $groupsfilepath) {
while ($line = <GROUPSFILE>) {
if ($line =~ /([^:]*):(.*)/) {
$lineUsernames = $2;
$lineUsernames =~ s/^\s+//; # remove leading white space
$groups{$1} = $lineUsernames;
}
}
}
return \%groups;
}
# SaveGroupsFile(groupsfilepath, groupshashref)
sub SaveGroupsFile {
my $groupsfilepath = $_[0];
my $groupshashref = $_[1];
my %groups = %$groupshashref;
my $selectedGroup;
if (open(GROUPSFILE, ">$groupsfilepath")) {
foreach $selectedGroup (keys %groups) {
print GROUPSFILE "$selectedGroup: " . $groups{$selectedGroup};
}
close(GROUPSFILE);
}
}
# RemoveUserFromGroup(groupsfilepath, username, groupname)
# Remove the specified user from the specified group.
# If groupname is an empty string, remove from all groups.
sub RemoveUserFromGroup {
my $groupsfilepath = $_[0];
my $username = $_[1];
my $groupname = $_[2];
my %groupsRef = ParseGroupsFile($groupsfilepath);
my %groups = %$groupsRef;
my $selectedGroup;
my $selectedUser;
my @usernames;
my @newUsernames;
foreach $selectedGroup (keys %groups) {
if (($groupname eq '') || ($selectedGroup eq $groupname)) {
@newUsernames = ();
@usernames = split(/\s/, $groups{$selectedGroup});
foreach $selectedUser (@usernames) {
if ($selectedUser ne $username) {
push(@newUsernames, $selectedUser);
}
}
$groups{$selectedGroup} = join(' ', @newUsernames);
}
}
SaveGroupsFile(groupsfilepath, \%groups);
}
# DeleteUser(qtpasswdpath, userfilepath, groupsfilepath, username)
sub DeleteUser {
my $qtpasswdpath = $_[0];
my $userfilepath = $_[1];
my $groupsfilepath = $_[2];
my $username = $_[3];
RemoveUserFromGroup($groupsfilepath, $username, '');
if ($^O eq "MSWin32")
{
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -F -d \"$username\"";
$progName = qq($qtpasswdpath);
eval "require Win32::Process";
if(!$@) {
Win32::Process::Create(
$processObj,
$progName,
$programArgs,
1,
DETACHED_PROCESS,
".") || return $code;
$processObj->SetPriorityClass(NORMAL_PRIORITY_CLASS);
$processObj->Wait(0);
sleep(2);
$code = 200;
}
}
else
{
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -F -d \'$username\'";
if(system($programArgs) == 0) {
$code = 200;
}
else {
$code = 500;
return $code;
}
}
return $code;
}
# AddOrEditBroadcastUser(qtpasswdpath, userfilepath, username, password)
sub AddOrEditBroadcastUser {
my $qtpasswdpath = $_[0];
my $userfilepath = $_[1];
my $username = $_[2];
my $password = $_[3];
if ($^O eq "MSWin32")
{
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -p \"$password\" \"$username\"";
$progName = qq($qtpasswdpath);
eval "require Win32::Process";
if(!$@) {
Win32::Process::Create(
$processObj,
$progName,
$programArgs,
1,
DETACHED_PROCESS,
".") || return $code;
$processObj->SetPriorityClass(NORMAL_PRIORITY_CLASS);
$processObj->Wait(0);
sleep(2);
$code = 200;
}
}
else
{
my $initArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -R broadcaster ";
system($initArgs);
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -p \'$password\' -A broadcaster \'$username\'";
if(system($programArgs) == 0) {
$code = 200;
}
else {
$code = 500;
$_[0] = "Error running password application.";
return $code;
}
$_[0] = "";
}
return $code;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <style type="text/css"> td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px } .large { font-weight: bold; font-size: 14px } .small { font-size: 10px } .white { color: #FFFFFF } .header { font-size: 18px; color:#666699 } input { font-size: 12px } </style> </head> <body bgcolor="#FFFFFF" background="images/stripes_gray.gif"> <qtssobject type=form param="_self"> <input type=hidden name=filename value="general_settings.html"> <input type=hidden name=action value="SaveGeneralSettings"> <table border=0 cellspacing=0 cellpadding=0 width=620> <tr> <td align=left valign=top width=20> <img src="images/spacer.gif" width=20 height=20 align=top alt=""> </td> <td valign=top align=center> <br> <table border=0 cellspacing=0 cellpadding=2 width="100%"> <tr> <td align=left nowrap class=header> <qtssstring name="PLErrorLogHeader"/> </td> </tr> <tr> <td align=left> <img src="images/divider.gif" width="100%" height=1 align=middle alt=""> </td> </tr> <tr> <td align=left><qtssobject name=playlistErrorLogText/> </tr> </table> </td> </tr> </table>

View file

@ -0,0 +1,807 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit 6.1.1">
<meta http-equiv="imagetoolbar" content="no">
<style type="text/css">
td
{
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
font-size: 12px;
}
.normal
{
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
font-size: 12px;
}
.large
{
font-weight: bold;
font-size: 14px;
}
.small { font-size: 10px }
.reallysmall
{
font-size: 10px;
color: #333;
}
.header
{
font-size: 18px;
color: #669;
}
.white { color: #FFFFFF }
#availpllabel
{
position: absolute;
z-index: 1;
top: 71px;
left: 78px;
height: 19px;
visibility: visible;
}
#newMP3Button
{
position: absolute;
z-index: 3;
top: 93px;
left: 430px;
width: 120px;
height: 284px;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#newMovieButton
{
position: absolute;
z-index: 3;
top: 124px;
left: 430px;
width: 120px;
height: 284px;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#editButton
{
position: absolute;
z-index: 5;
top: 167px;
left: 430px;
width: 120px;
height: 284px;
color: #999999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: hidden;
}
#editButtonDisabled
{
position: absolute;
z-index: 5;
top: 167px;
left: 430px;
width: 120px;
height: 284px;
color: #999999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#deleteButton
{
position: absolute;
z-index: 7;
top: 210px;
left: 430px;
width: 120px;
height: 284px;
color: #999999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: hidden;
}
#deleteButtonDisabled
{
position: absolute;
z-index: 7;
top: 210px;
left: 430px;
width: 120px;
height: 284px;
color: #999999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#libbackground
{
position: absolute;
z-index: 1;
top: 93px;
left: 78px;
width: 324px;
height: 284px;
visibility: visible;
}
#libfiles
{
position: absolute;
z-index: 3;
top: 108px;
left: 80px;
width: 216px;
line-height: 18px;
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
}
#libstatus
{
position: absolute;
z-index: 3;
top: 108px;
left: 302px;
width: 84px;
line-height: 18px;
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
}
#libcontrols
{
position: absolute;
z-index: 3;
top: 108px;
left: 383px;
width: 56px;
line-height: 18px;
visibility: visible;
}
#libscrollbar
{
position: absolute;
z-index: 3;
top: 107px;
left: 404px;
width: 16px;
visibility: hidden;
}
#libscrollbardisabled
{
position: absolute;
z-index: 3;
top: 107px;
left: 404px;
width: 16px;
visibility: visible;
}
#libscrollthumb
{
position: absolute;
z-index: 4;
top: 122px;
left: 404px;
width: 14px;
height: 16px;
visibility: hidden;
}
#libhighlight
{
position: absolute;
z-index: 2;
top: 94px;
left: 79px;
width: 322px;
height: 20px;
visibility: hidden;
}
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<script src="includes/standardNav.js" type="text/javascript" language="javascript"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
var gLibBasePosX = 79;
var gLibBasePosY = 108;
var gLibItemWidth = 325;
var gLibClickWidth = 266;
var gLibItemHeight = 20;
var gLibNumItems = 14;
var gLibMaxChars = 29;
var gDefaultImage = 'images/mp3_file.gif';
var gDragThreshold = 6;
var gNumberOfSteps = 4;
var gStepTiming = 35;
var gTextSpacerImg = '<img src="images/spacer.gif" width=3 height=20 align=middle>';
var gThumbRangeTop = 122;
var gThumbRangeBottom = 360;
var gThumbHeight = 16;
var gScrollArrowWidth = 16;
var gScrollArrowHeight = 16;
var gDirScrollbarLeft = 404;
var gScrollUpArrowTop = 107;
var gScrollDownArrowTop = 375;
var gScrollBy = 6;
var dblClickDelay = 300;
var gScrollDelay = 200;
var libHighlightStart = (-1);
var libHighlightEnd = (-1);
var libScrollPos = 0;
var dragStatus = 'false';
var directoryListing = new Array();
var playlists = new Array();
var playlistPaths = new Array();
var startArray = new Array();
var iconImages = new Array();
var doContiguousSelection = false;
var insertPos = (-1);
var removeOldItem = (-1);
var showedAlert = false;
var isDblClick = false;
var dblClickTimer;
var scrollTimer;
var scrollBy = 1; // -1=scroll up, 1=scroll down
var scrollWhich = 0; // 0=library, 1=playlist contents
var broadcastPasswordIsSet = <qtssobject name=plbroadcastpasswordisset/>;
function DoScroll() {
if (dragStatus == 'timedscroll') {
if (scrollWhich == 0) {
var dataHeight = directoryListing.length - gLibNumItems;
libScrollPos = Math.max(Math.min(libScrollPos+scrollBy, dataHeight), 0);
BuildLibrary();
libSetThumbPos();
}
else {
var dataHeight = playlistFiles.length - gPLNumItems;
plScrollPos = Math.max(Math.min(plScrollPos+scrollBy, dataHeight), 0);
BuildPlaylist();
PLSetThumbPos();
}
SetScrollTimer();
}
else {
clearInterval(scrollTimer);
scrollTimer = null;
}
}
function SetScrollTimer() {
if (scrollTimer == null) {
scrollTimer = setInterval("DoScroll()", gScrollDelay)
}
}
function BuildLibrary() {
var filesLayerText = '<span class=small>';
var statusLayerText = '<span class=small>';
var controlsLayerText = '<span class=small>';
for (var i=libScrollPos; i < Math.min((libScrollPos+gLibNumItems), directoryListing.length); i++) {
var itemText = directoryListing[i];
var itemName = playlists[i];
var isMP3 = (iconImages[i] == 'images/mp3_file.gif') ? 'true' : 'false';
if (itemText.length > gLibMaxChars) {
itemText = itemText.substr(0, gLibMaxChars) + "&#8230;";
}
itemText = itemText.replace('<', '&lt;');
itemText = itemText.replace('>', '&gt;');
filesLayerText = filesLayerText + '<div style="width:216px; height:20px;">';
filesLayerText = filesLayerText + '<img src="' + iconImages[i] + '" width=16 height=16 align=middle vspace=2>';
filesLayerText = filesLayerText + gTextSpacerImg + itemText + '<' + '/div>';
statusLayerText = statusLayerText + '<div style="width:84px; height:20px;">';
if ((startArray[i] == 2) || (startArray[i] == 3)) { // error
statusLayerText = statusLayerText + '<a href="javascript:ViewErrors(\'' + itemName + '\')">';
if (startArray[i] == 2) {
statusLayerText = statusLayerText + '<img src="images/icon_error.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle><' + '/a>';
}
else {
statusLayerText = statusLayerText + '<img src="images/icon_alert.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle><' + '/a>';
}
}
else {
statusLayerText = statusLayerText + '<img src="images/spacer.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle>';
}
controlsLayerText = controlsLayerText + '<div style="width:56px; height:20px;">';
if ((startArray[i] == 0) || (startArray[i] == 2)) { // stopped
statusLayerText = statusLayerText + '<qtssstring name=PLStopped>';
controlsLayerText = controlsLayerText + '<a href="javascript:StartPlaylist(\'' + itemName + '\', ' + isMP3 + ')">';
controlsLayerText = controlsLayerText + '<img src="images/icon_start_playlist.gif" width=16 height=16 hspace=1 vspace=2 border=0><' + '/a>';
}
else { // started
statusLayerText = statusLayerText + '<qtssstring name=PLStarted>';
controlsLayerText = controlsLayerText + '<a href="javascript:StopPlaylist(\'' + itemName + '\', ' + isMP3 + ')">';
controlsLayerText = controlsLayerText + '<img src="images/icon_stop_playlist.gif" width=16 height=16 hspace=1 vspace=2 border=0><' + '/a>';
}
statusLayerText = statusLayerText + '<' + '/div>';
controlsLayerText = controlsLayerText + '<' + '/div>';
}
filesLayerText = filesLayerText;
SetStyleText('libfiles', filesLayerText + '<' + '/span>');
SetStyleText('libstatus', statusLayerText + '<' + '/span>');
SetStyleText('libcontrols', controlsLayerText + '<' + '/span>');
SetLibHighlightBar();
if (directoryListing.length > gLibNumItems) {
SetStyleVisible('libscrollbardisabled', false);
SetStyleVisible('libscrollbar', true);
SetStyleVisible('libscrollthumb', true);
}
else {
SetStyleVisible('libscrollbardisabled', true);
SetStyleVisible('libscrollbar', false);
SetStyleVisible('libscrollthumb', false);
}
}
function clickedEditButton() {
document.forms[0].elements['action'].value='GetPlaylist';
document.forms[0].elements['curplaylist'].value=playlists[libHighlightStart];
document.forms[0].elements['filename'].value='playlist_detail.html';
document.forms[0].submit();
}
function clickedDeleteButton() {
if (entityConfirm("<qtssstring name=PLDeleteConfirm>")) {
document.forms[0].elements['action'].value='DeletePlaylist';
document.forms[0].elements['filename'].value='playlists.html';
document.forms[0].elements['curplaylist'].value=playlists[libHighlightStart];
document.forms[0].submit();
}
}
function clickedNewMP3Button() {
document.forms[0].elements['action'].value='NewMP3Playlist';
document.forms[0].elements['filename'].value='playlist_detail.html';
document.forms[0].submit();
}
function clickedNewMovieButton() {
document.forms[0].elements['action'].value='NewMoviePlaylist';
document.forms[0].elements['filename'].value='playlist_detail.html';
document.forms[0].submit();
}
function handleLibDblClick() {
ClearDblClickTimer();
clickedEditButton();
}
function SetDblClickTimer() {
isDblClick = true;
currentTooltipTimer = setTimeout("ClearDblClickTimer()", dblClickDelay);
}
function ClearDblClickTimer() {
isDblClick = false;
dblClickTimer = null;
}
function StartPlaylist(plname, isMP3) {
if ((!isMP3) || (broadcastPasswordIsSet == 1)) {
document.forms[0].elements['action'].value='StartPlaylist';
document.forms[0].elements['curplaylist'].value=plname;
document.forms[0].elements['filename'].value='playlists.html';
document.forms[0].submit();
}
else {
if (confirm('<qtssstring name=PLSetBroadcastPasswordConfirm>')) {
document.forms[0].elements['action'].value = '';
document.forms[0].elements['filename'].value = 'change_mp3_password.html';
document.forms[0].submit();
}
}
}
function StopPlaylist(plname) {
document.forms[0].elements['action'].value='StopPlaylist';
document.forms[0].elements['curplaylist'].value=plname;
document.forms[0].elements['filename'].value='playlists.html';
document.forms[0].submit();
}
function ViewErrors(plname) {
document.forms[0].elements['action'].value='ShowPlaylistLog';
document.forms[0].elements['curplaylist'].value=plname;
document.forms[0].elements['filename'].value='playlist_error_log.html';
document.forms[0].submit();
}
function libScrollDown() {
var dataHeight = directoryListing.length - gLibNumItems;
if (libScrollPos < dataHeight) {
libScrollPos = Math.min(libScrollPos+gScrollBy, dataHeight);
BuildLibrary();
libSetThumbPos();
}
}
function libScrollUp() {
if (libScrollPos > 0) {
libScrollPos = Math.max(libScrollPos-gScrollBy, 0);
BuildLibrary();
libSetThumbPos();
}
}
function libSetThumbPos() {
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
var dataHeight = directoryListing.length - gLibNumItems;
if (dataHeight > 1) {
var scrollRatio = libScrollPos / dataHeight;
SetStylePos('libscrollthumb', 1, (gThumbRangeTop + (scrollRatio * scrollbarHeight)));
}
}
function libGetThumbPos() {
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
var dataHeight = directoryListing.length - gLibNumItems;
if (dataHeight > 1) {
var scrollRatio = (GetStylePos('libscrollthumb', 1) - gThumbRangeTop) / scrollbarHeight;
libScrollPos = Math.round(scrollRatio * (directoryListing.length - gLibNumItems));
BuildLibrary();
libSetThumbPos();
}
}
function SetLibHighlightBar() {
if (libHighlightEnd < libScrollPos) {
SetStyleVisible('libhighlight', false);
}
else {
var displayHighlightStart = Math.max(libHighlightStart - libScrollPos, 0);
var displayHighlightEnd = Math.min(libHighlightEnd - libScrollPos, libScrollPos + gLibNumItems - 1);
var highlightHeight = (displayHighlightEnd - displayHighlightStart + 1) * gLibItemHeight;
var startPos = (displayHighlightStart * gLibItemHeight) + gLibBasePosY;
SetStyleText('libhighlight', '<img src="images/highlight.gif" width=' + gLibItemWidth + ' height=' + highlightHeight + '>');
SetStylePos('libhighlight', 1, startPos);
SetStyleVisible('libhighlight', true);
}
}
function SetButtonsEnabled(isEnabled) {
SetStyleVisible('deleteButtonDisabled', !isEnabled);
SetStyleVisible('deleteButton', isEnabled);
SetStyleVisible('editButtonDisabled', !isEnabled);
SetStyleVisible('editButton', isEnabled);
}
function handleMouseDown(e) {
var continueClick = true;
if (IsIE()) var theTarget = window.event.srcElement;
else var theTarget = e.target;
if (IsIE()) var theButton = event.button;
else var theButton = e.which;
if (IsIE()) doContiguousSelection = window.event.shiftKey;
else doContiguousSelection = (e.modifiers == 4);
if (IsIE()) {
oldX = event.clientX + GetIEScrollPos(0);
oldY = event.clientY + GetIEScrollPos(1);
}
else {
oldX = e.pageX
oldY = e.pageY
}
removeOldItem = (-1);
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollUpArrowTop) && (oldY <= (gScrollUpArrowTop + gScrollArrowHeight))) { // dir up scroll
dragStatus = 'timedscroll';
scrollWhich = 0;
scrollBy = (-1);
DoScroll();
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY > (gScrollUpArrowTop + gScrollArrowHeight)) && (oldY < GetStylePos('libscrollthumb', 1))) { // jump up
dragStatus = 'timedscroll';
scrollWhich = 0;
scrollBy = ((-1) * (gLibNumItems - 1));
DoScroll();
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= GetStylePos('libscrollthumb', 1)) && (oldY <= (GetStylePos('libscrollthumb', 1) + gThumbHeight))) { // dir scroll thumb
layerClicked = 'libscrollthumb';
dragStatus = 'scrolling';
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY > (GetStylePos('libscrollthumb', 1) + gThumbHeight)) && (oldY < gScrollDownArrowTop)) { // jump down
dragStatus = 'timedscroll';
scrollWhich = 0;
scrollBy = gLibNumItems - 1;
DoScroll();
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollDownArrowTop) && (oldY <= (gScrollDownArrowTop + gScrollArrowHeight))) { // dir up scroll
dragStatus = 'timedscroll';
scrollWhich = 0;
scrollBy = 1;
DoScroll();
continueClick = false;
}
if ((oldX >= gLibBasePosX) && (oldX <= gLibBasePosX+gLibClickWidth) && (oldY >= gLibBasePosY) && (oldY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
var itemClicked = (oldY - gLibBasePosY) / gLibItemHeight;
itemClicked = Math.floor(itemClicked);
itemClicked = itemClicked + libScrollPos;
if (itemClicked > (directoryListing.length - 1)) {
return false;
}
offsetX = oldX - gLibBasePosX;
offsetY = oldY - (gLibBasePosY + ((itemClicked - libScrollPos) * gLibItemHeight));
if ((itemClicked < libHighlightStart) || (itemClicked > libHighlightEnd)) {
libHighlightStart = itemClicked;
libHighlightEnd = itemClicked;
SetLibHighlightBar();
}
dragStatus = 'click';
SetButtonsEnabled(true);
continueClick = false;
if (isDblClick) { // double-click; handle
handleLibDblClick()
}
else { // first click; set isDblClick to true and set a timer to set it to false after the delay
SetDblClickTimer();
}
}
if (continueClick) return;
else return continueClick;
}
function handleDrag(e) {
status = '';
if (IsIE()) {
currentX = event.clientX + GetIEScrollPos(0);
currentY = event.clientY + GetIEScrollPos(1);
}
else {
currentX = e.pageX
currentY = e.pageY
}
if (dragStatus == 'scrolling') {
SetStylePos(layerClicked, 1, Math.max(Math.min(currentY, gThumbRangeBottom), gThumbRangeTop));
}
var maxPos = directoryListing.length;
if ((currentX >= gLibBasePosX) && (currentX <= gLibBasePosX+gLibItemWidth) && (currentY >= gLibBasePosY) && (currentY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
// check to see if we've switched positions
tooltipPosY = Math.min(Math.floor((currentY - gLibBasePosY) / gLibItemHeight), maxPos);
if (tooltipPosY < directoryListing.length) {
if (status != playlistPaths[tooltipPosY]) {
status = playlistPaths[tooltipPosY];
}
}
}
}
function handleMouseUp() {
var continueClick = true;
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
if (dragStatus == 'scrolling') {
dragStatus = 'false';
if (layerClicked == 'libscrollthumb') libGetThumbPos();
else PLGetThumbPos();
continueClick = false;
}
dragStatus = 'false';
if (continueClick) return;
else return continueClick;
}
function UpdateHiddenFields() {
var myString = '';
var myString2 = '';
for (var i = 0; i < directoryListing.length; i++) {
myString = myString + directoryListing[i];
myString2 = myString2 + startArray[i];
if (i < (startArray.length - 1)) {
myString = myString + "\t";
myString2 = myString2 + "\t";
}
}
document.forms[0].submitplaylistnames.value = myString;
document.forms[0].submitstartstop.value = myString2;
}
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
// re-route events to handlers
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
document.onmousedown = handleMouseDown;
document.onmouseup = handleMouseUp;
document.onmousemove = handleDrag
// populate array from QTSS
<qtssrepeater name=playlists>
directoryListing[directoryListing.length] = '<qtssobject name=qtssPlaylistTitles format=nosinglequotes/>';
playlists[playlists.length] = '<qtssobject name=qtssPlaylistNames format=nosinglequotes/>';
playlistPaths[playlistPaths.length] = '<qtssobject name=qtssPlaylistPaths format=nosinglequotes/>';
startArray[startArray.length] = '<qtssobject name=qtssPlaylistStatuses format=nosinglequotes/>';
iconImages[iconImages.length] = 'images/<qtssobject name=qtssPlaylistImages format=nosinglequotes/>';
</qtssrepeater>
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage();BuildLibrary()">
<qtssobject type=getform>
<input type=hidden name=filename value="confirm.html"><input type="hidden" name="submitplaylistnames" value=""><input type="hidden" name="submitstartstop" value="">
<input type=hidden name=action value="">
<input type="hidden" name="curplaylist" value="">
<qtssobject name="qtssSvrDefaultDNSName" type=hidden/>
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="PLHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
<div id="availpllabel" class=large>
<qtssstring name="PLAvailablePlaylists"/>
</div>
<div id="libbackground">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
<tr>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
<td width=238 height=13 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayNameHeader" /></td>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
<td width=62 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayStatusHeader" /></td>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
<td width=38 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt="">&nbsp;</td>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
</tr>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
<tr>
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=282 alt=""></td>
<td width=238 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=238 height=282 alt=""></td>
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=282 alt=""></td>
<td width=62 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=62 height=282 alt=""></td>
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=282 alt=""></td>
<td width=38 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=38 height=282 alt=""></td>
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=282 alt=""></td>
</tr>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
</table>
</div>
<div id="libfiles">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libstatus">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libcontrols">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libhighlight">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libscrollbar">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td><img src="images/scroll_arrow_up.gif" width=16 height=16></td>
</tr>
<tr>
<td background="images/scroll_bg.gif" height=252><img src="images/scroll_bg.gif" width=16 height=252></td>
</tr>
<tr>
<td><img src="images/scroll_arrow_down.gif" width=16 height=16></td>
</tr>
</table>
</div>
<div id="libscrollbardisabled">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
</tr>
<tr>
<td background="images/scroll_bg_inactive.gif" height=282><img src="images/scroll_bg_inactive.gif" width="16" height="282"></td>
</tr>
<tr>
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
</tr>
</table>
</div>
<div id="libscrollthumb">
<img src="images/scroll_thumb.gif" width=16 height=16>
</div>
<div id="newMP3Button">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><a href="javascript:clickedNewMP3Button()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td align=left nowrap><a href="javascript:clickedNewMP3Button()"><qtssstring name="PLNewMP3" /></a></td>
</tr>
</table>
</div>
<div id="newMovieButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><a href="javascript:clickedNewMovieButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td align=left nowrap><a href="javascript:clickedNewMovieButton()"><qtssstring name="PLNewMovie" /></a></td>
</tr>
</table>
</div>
<div id="deleteButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><a href="javascript:clickedDeleteButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td align=left nowrap><a href="javascript:clickedDeleteButton()"><qtssstring name="PLDeleteButton" /></a></td>
</tr>
</table>
</div>
<div id="deleteButtonDisabled">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><img src="images/link_disabled.gif" width=28 height=24></td>
<td align=left nowrap><qtssstring name="PLDeleteButton" /></td>
</tr>
</table>
</div>
<div id="editButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><a href="javascript:clickedEditButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td align=left nowrap><a href="javascript:clickedEditButton()"><qtssstring name="PLEditButton" /></a></td>
</tr>
</table>
</div>
<div id="editButtonDisabled">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left><img src="images/link_disabled.gif" width=28 height=24></td>
<td align=left nowrap><qtssstring name="PLEditButton" /></td>
</tr>
</table>
</div>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,109 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit Prerelease">
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
<qtssobject name=scriptTag>
//<script language=javascript>
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
function validateFormData() {
if (document.forms[0].elements['qtssIsStreamingOn80'].checked) {
return confirm("<qtssstring name=PortChangeRestartServerConfirm>");
}
else
return true;
}
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
<qtssobject type=validatedform param=_self>
<input type=hidden name="filename" value=ports.html> <input type=hidden name="action" value="SavePortSettings">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="PortSetHeader"/>
</td>
</tr>
<tr>
<td align=left nowrap>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=4 cellpadding=0 width="90%">
<tr>
<td valign=top nowrap align=right>
<b><qtssstring name="PortSetStreaming80Title"/></b>
</td>
<td align=left valign=top nowrap>
<qtssobject name="qtssIsStreamingOn80" format=checkbox param=true/> <qtssstring name="Enabled"/>
</td>
<td align=left>
<img src="images/spacer.gif" width=30 height=30 align=middle alt="">
</td>
<td align=left valign=top class=small>
<p>
<qtssstring name="PortSetDesc1"/>
</p>
<p>
<qtssstring name="PortSetDesc2"/>
</p>
</td>
</tr>
<tr>
<td colspan=3></td>
<td><b><qtssobject name="getNotBoundPort80Msg"/></b></td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left valign=top colspan=2>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left valign=top>
<br>
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
</td>
<td align=right valign=top>
<br>
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,656 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit 6.1.1">
<meta http-equiv="imagetoolbar" content="no">
<style type="text/css">
td
{
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
font-size: 12px;
}
.normal
{
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
font-size: 12px;
}
.large
{
font-weight: bold;
font-size: 14px;
}
.small { font-size: 10px; }
.reallysmall
{
font-size: 10px;
color: #333;
}
.header
{
font-size: 18px;
color: #669;
}
.white { color: #FFF; }
#RelayDefaultRelayHeader
{
position: absolute;
z-index: 1;
top: 56px;
left: 50px;
}
#RelayDefaultStatus
{
position: absolute;
z-index: 1;
top: 76px;
left: 60px;
}
#editDefaultButton
{
position: absolute;
z-index: 1;
top: 66px;
left: 320px;
}
#divider
{
position: absolute;
z-index: 1;
top: 107px;
left: 50px;
}
#RelaySources
{
position: absolute;
z-index: 1;
top: 126px;
left: 50px;
}
#newButton
{
position: absolute;
z-index: 3;
top: 147px;
left: 320px;
width: 380px;
height: 284px;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#deleteButtonDisabled
{
position: absolute;
z-index: 4;
top: 215px;
left: 320px;
width: 380px;
height: 284px;
color: #999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#deleteButton
{
position: absolute;
z-index: 4;
top: 215px;
left: 320px;
width: 380px;
height: 284px;
color: #999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: hidden;
}
#editButtonDisabled
{
position: absolute;
z-index: 3;
top: 181px;
left: 320px;
width: 380px;
height: 284px;
color: #999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: visible;
}
#editButton
{
position: absolute;
z-index: 3;
top: 181px;
left: 320px;
width: 380px;
height: 284px;
color: #999;
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
visibility: hidden;
}
#libbackground
{
position: absolute;
z-index: 1;
top: 147px;
left: 49px;
visibility: visible;
}
#libfiles
{
position: absolute;
z-index: 3;
top: 162px;
left: 50px;
width: 188px;
line-height: 18px;
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
}
#libfilestatuses
{
position: absolute;
z-index: 3;
top: 162px;
left: 238px;
width: 54px;
line-height: 18px;
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
}
#libscrollbar
{
position: absolute;
z-index: 3;
top: 161px;
left: 294px;
width: 16px;
visibility: hidden;
}
#libscrollbardisabled
{
position: absolute;
z-index: 3;
top: 161px;
left: 294px;
width: 16px;
visibility: visible;
}
#libscrollthumb
{
position: absolute;
z-index: 4;
top: 176px;
left: 294px;
width: 16px;
height: 16px;
visibility: hidden;
}
#libhighlight
{
position: absolute;
z-index: 2;
top: 164px;
left: 50px;
width: 243px;
height: 20px;
visibility: hidden;
}
</style>
<script src="includes/standardNav.js" type="text/javascript" language="javascript"></script>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
var gLibBasePosX = 50;
var gLibBasePosY = 162;
var gLibItemWidth = 244;
var gLibItemHeight = 20;
var gLibNumItems = 14;
var gLibMaxChars = 29;
var gDragThreshold = 6;
var gNumberOfSteps = 4;
var gStepTiming = 35;
var gTextSpacerImg = '<img src="images/spacer.gif" width=3 height=20 align=middle>';
var gThumbRangeTop = 176;
var gThumbRangeBottom = 412;
var gThumbHeight = 16;
var gScrollArrowWidth = 16;
var gScrollArrowHeight = 16;
var gDirScrollbarLeft = 294;
var gScrollUpArrowTop = 161;
var gScrollDownArrowTop = 427;
var gScrollBy = 6;
var dblClickDelay = 300;
var libHighlightStart = (-1);
var libHighlightEnd = (-1);
var libScrollPos = 0;
var dragStatus = 'false';
var directoryListing = new Array();
var statusArray = new Array();
var doContiguousSelection = false;
var insertPos = (-1);
var removeOldItem = (-1);
var showedAlert = false;
var isDblClick = false;
var dblClickTimer;
function BuildLibrary() {
var filesLayerText = '<span class=small>';
var statusesLayerText = '<span class=small>';
for (var i=libScrollPos; i < Math.min((libScrollPos+gLibNumItems), directoryListing.length); i++) {
var itemText = directoryListing[i];
itemText = itemText.replace('<', '&lt;');
itemText = itemText.replace('>', '&gt;');
filesLayerText = filesLayerText + '<div style="width:188px; height:20px;">';
filesLayerText = filesLayerText + gTextSpacerImg + itemText + '<' + '/div>';
statusesLayerText = statusesLayerText + '<div style="width:54px; height:20px;">';
statusesLayerText = statusesLayerText + gTextSpacerImg + statusArray[i] + '<' + '/div>';
}
filesLayerText = filesLayerText;
SetStyleText('libfiles', filesLayerText + '<' + '/span>');
SetStyleText('libfilestatuses', statusesLayerText + '<' + '/span>');
SetLibHighlightBar();
if (directoryListing.length > gLibNumItems) {
SetStyleVisible('libscrollbardisabled', false);
SetStyleVisible('libscrollbar', true);
SetStyleVisible('libscrollthumb', true);
}
else {
SetStyleVisible('libscrollbardisabled', true);
SetStyleVisible('libscrollbar', false);
SetStyleVisible('libscrollthumb', false);
}
}
function clickedEditButton() {
document.forms[0].elements['action'].value='getValsForRelay';
document.forms[0].elements['currentRelay'].value=directoryListing[libHighlightStart];
document.forms[0].submit();
}
function clickedNewButton() {
document.forms[0].elements['action'].value='getNewRelay';
document.forms[0].elements['currentRelay'].value='';
document.forms[0].elements['filename'].value='relay_details.html';
document.forms[0].submit();
}
function clickedDeleteButton() {
if (entityConfirm("<qtssstring name=RelayDeleteConfirm>")) {
document.forms[0].elements['action'].value='DeleteRelay';
document.forms[0].elements['currentRelay'].value=directoryListing[libHighlightStart];
document.forms[0].elements['filename'].value='relay.html';
document.forms[0].submit();
}
}
function handleLibDblClick() {
ClearDblClickTimer();
clickedEditButton();
}
function SetDblClickTimer() {
isDblClick = true;
currentTooltipTimer = setTimeout("ClearDblClickTimer()", dblClickDelay);
}
function ClearDblClickTimer() {
isDblClick = false;
dblClickTimer = null;
}
function SetButtonsEnabled(isEnabled) {
SetStyleVisible('deleteButtonDisabled', !isEnabled);
SetStyleVisible('deleteButton', isEnabled);
SetStyleVisible('editButtonDisabled', !isEnabled);
SetStyleVisible('editButton', isEnabled);
}
function clickedEditDefaultButton() {
document.forms[0].elements['action'].value='getValsForRelay';
document.forms[0].elements['currentRelay'].value='***qtssDefaultRelay***';
document.forms[0].elements['filename'].value = 'relay_details_default.html';
document.forms[0].submit();
}
function libScrollDown() {
var dataHeight = directoryListing.length - gLibNumItems;
if (libScrollPos < dataHeight) {
libScrollPos = Math.min(libScrollPos+gScrollBy, dataHeight);
BuildLibrary();
libSetThumbPos();
}
}
function libScrollUp() {
if (libScrollPos > 0) {
libScrollPos = Math.max(libScrollPos-gScrollBy, 0);
BuildLibrary();
libSetThumbPos();
}
}
function libSetThumbPos() {
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
var dataHeight = directoryListing.length - gLibNumItems;
if (dataHeight > 1) {
var scrollRatio = libScrollPos / dataHeight;
SetStylePos('libscrollthumb', 1, (gThumbRangeTop + (scrollRatio * scrollbarHeight)));
}
}
function libGetThumbPos() {
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
var dataHeight = directoryListing.length - gLibNumItems;
if (dataHeight > 1) {
var scrollRatio = (GetStylePos('libscrollthumb', 1) - gThumbRangeTop) / scrollbarHeight;
libScrollPos = Math.round(scrollRatio * (directoryListing.length - gLibNumItems));
BuildLibrary();
libSetThumbPos();
}
}
function SetLibHighlightBar() {
if (libHighlightEnd < libScrollPos) {
SetStyleVisible('libhighlight', false);
}
else {
var displayHighlightStart = Math.max(libHighlightStart - libScrollPos, 0);
var displayHighlightEnd = Math.min(libHighlightEnd - libScrollPos, libScrollPos + gLibNumItems - 1);
var highlightHeight = (displayHighlightEnd - displayHighlightStart + 1) * gLibItemHeight;
var startPos = (displayHighlightStart * gLibItemHeight) + gLibBasePosY;
SetStyleText('libhighlight', '<img src="images/highlight.gif" width=' + gLibItemWidth + ' height=' + highlightHeight + '>');
SetStylePos('libhighlight', 1, startPos);
SetStyleVisible('libhighlight', true);
}
}
function handleMouseDown(e) {
var continueClick = true;
if (IsIE()) var theTarget = window.event.srcElement;
else var theTarget = e.target;
if (IsIE()) var theButton = event.button;
else var theButton = e.which;
if (IsIE()) doContiguousSelection = window.event.shiftKey;
else doContiguousSelection = (e.modifiers == 4);
if (IsIE()) {
oldX = event.clientX + GetIEScrollPos(0);
oldY = event.clientY + GetIEScrollPos(1);
}
else {
oldX = e.pageX
oldY = e.pageY
}
removeOldItem = (-1);
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollDownArrowTop) && (oldY <= (gScrollDownArrowTop + gScrollArrowHeight))) { // dir up scroll
libScrollDown();
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollUpArrowTop) && (oldY <= (gScrollUpArrowTop + gScrollArrowHeight))) { // dir up scroll
libScrollUp();
continueClick = false;
}
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= GetStylePos('libscrollthumb', 1)) && (oldY <= (GetStylePos('libscrollthumb', 1) + gThumbHeight))) { // dir scroll thumb
layerClicked = 'libscrollthumb';
dragStatus = 'scrolling';
continueClick = false;
}
if ((oldX >= gLibBasePosX) && (oldX <= gLibBasePosX+gLibItemWidth) && (oldY >= gLibBasePosY) && (oldY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
var itemClicked = (oldY - gLibBasePosY) / gLibItemHeight;
itemClicked = Math.floor(itemClicked);
itemClicked = itemClicked + libScrollPos;
if (itemClicked > (directoryListing.length - 1)) {
return false;
}
offsetX = oldX - gLibBasePosX;
offsetY = oldY - (gLibBasePosY + ((itemClicked - libScrollPos) * gLibItemHeight));
if ((itemClicked < libHighlightStart) || (itemClicked > libHighlightEnd)) {
libHighlightStart = itemClicked;
libHighlightEnd = itemClicked;
SetLibHighlightBar();
}
dragStatus = 'click';
SetButtonsEnabled(true);
continueClick = false;
if (isDblClick) { // double-click; handle
handleLibDblClick()
}
else { // first click; set isDblClick to true and set a timer to set it to false after the delay
SetDblClickTimer();
}
}
if (continueClick) return;
else return continueClick;
}
function handleDrag(e) {
if (IsIE()) {
currentX = event.clientX + GetIEScrollPos(0);
currentY = event.clientY + GetIEScrollPos(1);
}
else {
currentX = e.pageX
currentY = e.pageY
}
if (dragStatus == 'scrolling') {
SetStylePos(layerClicked, 1, Math.max(Math.min(currentY, gThumbRangeBottom), gThumbRangeTop));
}
}
function handleMouseUp() {
var continueClick = true;
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
if (dragStatus == 'scrolling') {
dragStatus = 'false';
if (layerClicked == 'libscrollthumb') libGetThumbPos();
else PLGetThumbPos();
continueClick = false;
}
dragStatus = 'false';
if (continueClick) return;
else return continueClick;
}
function showConfirmMessage() {
if ('<qtssobject name=confirmMessage/>' != '') {
if (parent.frames['top'].showConfirmMessage) {
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
else if (parent.parent.frames[0].showConfirmMessage) {
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
}
}
}
// re-route events to handlers
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
document.onmousedown = handleMouseDown;
document.onmouseup = handleMouseUp;
document.onmousemove = handleDrag
// populate array from QTSS
<qtssrepeater name=relaynames>
directoryListing[directoryListing.length] = '<qtssobject name=qtssRelayName/>';
statusArray[statusArray.length] = '<qtssobject name=qtssRelayStatus/>';
</qtssrepeater>
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="BuildLibrary(); showConfirmMessage()">
<qtssobject type=getform>
<qtssobject type=hidden name="qtssSvrDefaultDNSName"/>
<input type=hidden name="filename" value=relay_details.html> <input type=hidden name="action" value=""> <input type=hidden name="currentRelay" value="">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td valign=top nowrap width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td nowrap class=header>
<qtssstring name="NavRelaySettings"/>
</td>
</tr>
<tr>
<td>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
</table>
</td>
</tr>
</table>
<div id="RelayDefaultRelayHeader" class="normal">
<b><qtssstring name="RelayDefaultRelayHeader"/></b>
</div>
<div id="RelayDefaultStatus" class="normal">
<qtssstring name="RelayDetailsStatus"/> <qtssobject name="defaultRelayStatus"/>
</div>
<div id="editDefaultButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedEditDefaultButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedEditDefaultButton()"><qtssstring name="RelayEditDefaultSourceButton" /></a></td>
</tr>
</table>
</div>
<div id="divider">
<img src="images/divider.gif" width="500" height="1" alt="">
</div>
<div id="RelaySources" class="normal">
<b><qtssstring name="RelaySources"/></b>
</div>
<div id="libbackground">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
<tr>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
<td width=188 height=13 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayNameHeader" /></td>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
<td width=70 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayStatusHeader" /></td>
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
</tr>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
<tr>
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=280 alt=""></td>
<td width=188 height=280 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=188 height=280 alt=""></td>
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=280 alt=""></td>
<td width=70 height=280 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=70 height=280 alt=""></td>
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=280 alt=""></td>
</tr>
<tr>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
</tr>
</table>
</div>
<div id="libfiles">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libfilestatuses">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libcontrols">
<!--placeholder ~~ will be populated dynamically-->
</div>
<div id="libhighlight">
<img src="images/highlight.gif" width=218 height=20>
</div>
<div id="libscrollbar">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td><img src="images/scroll_arrow_up.gif" width=16 height=16></td>
</tr>
<tr>
<td background="images/scroll_bg.gif" height=250><img src="images/scroll_bg.gif" width=16 height=250></td>
</tr>
<tr>
<td><img src="images/scroll_arrow_down.gif" width=16 height=16></td>
</tr>
</table>
</div>
<div id="libscrollbardisabled">
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
</tr>
<tr>
<td background="images/scroll_bg_inactive.gif" height=280><img src="images/scroll_bg_inactive.gif" width="16" height="280"></td>
</tr>
<tr>
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
</tr>
</table>
</div>
<div id="libscrollthumb">
<img src="images/scroll_thumb.gif" width=16 height=16>
</div>
<div id="newButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedNewButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedNewButton()"><qtssstring name="RelayNewSourceButton" /></a></td>
</tr>
</table>
</div>
<div id="deleteButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedDeleteButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedDeleteButton()"><qtssstring name="RelayDeleteSourceButton" /></a></td>
</tr>
</table>
</div>
<div id="deleteButtonDisabled">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><img src="images/link_disabled.gif" width=28 height=24></td>
<td><qtssstring name="RelayDeleteSourceButton" /></td>
</tr>
</table>
</div>
<div id="editButton">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="javascript:clickedEditButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
<td><a href="javascript:clickedEditButton()"><qtssstring name="RelayEditSourceButton" /></a></td>
</tr>
</table>
</div>
<div id="editButtonDisabled">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><img src="images/link_disabled.gif" width=28 height=24></td>
<td><qtssstring name="RelayEditSourceButton" /></td>
</tr>
</table>
</div>
</qtssobject>
</body>
</html>

View file

@ -0,0 +1,459 @@
<html>
<head>
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
div { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.header { font-size: 18px; color:#666699 }
.white { color: #FFFFFF }
input { font-size: 12px }
</style>
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
<qtssobject name=scriptTag>
//<script language=javascript>
var allRelays = new Array();
function clickedDeleteRelayDest(relayToDelete) {
document.forms[0].elements['action'].value = 'DeleteRelayDest';
document.forms[0].elements['currentDest'].value = relayToDelete;
document.forms[0].elements['filename'].value = 'relay_details.html';
document.forms[0].submit();
}
function clickedSaveButton() {
document.forms[0].elements['action'].value = 'SaveRelay';
document.forms[0].elements['filename'].value = 'relay.html';
}
function clickedAddDestButton() {
document.forms[0].elements['action'].value = 'AddRelayDestination';
document.forms[0].elements['filename'].value = 'relay_details.html';
document.forms[0].submit();
}
function fixMountPoints() {
for (var i=0; i < document.forms[0].elements['relayDestCount'].value; i++) {
if ((document.forms[0].elements['relayDestMountPoint'+i].value.indexOf('.sdp') < 0) && (document.forms[0].elements['relayDestMountPoint'+i].value != '')) {
document.forms[0].elements['relayDestMountPoint'+i].value = document.forms[0].elements['relayDestMountPoint'+i].value + '.sdp';
}
}
}
function validateFormData() {
var relayNameOK = true;
if (document.forms[0].elements['currentRelay'].value != document.forms[0].elements['currentRelay_shadow'].value) {
for (var i = 0; i < allRelays.length; i++) {
if (allRelays[i] == document.forms[0].elements['currentRelay'].value) relayNameOK = false;
}
}
if (!relayNameOK) {
entityAlert("<qtssstring name=RelayErrNameConflict/>");
document.forms[0].elements['currentRelay'].value = document.forms[0].elements['currentRelay_shadow'].value;
return false;
}
if (document.forms[0].elements['currentRelay'].value == '') {
entityAlert("<qtssstring name=RelayErrNoName/>");
document.forms[0].elements['currentRelay'].value = document.forms[0].elements['currentRelay_shadow'].value;
return false;
}
if (document.forms[0].elements['relaySourceHostname'].value == '') {
entityAlert("<qtssstring name=RelayErrNoSourceIP/>");
document.forms[0].elements['relaySourceHostname'].value = document.forms[0].elements['relaySourceHostname_shadow'].value;
return false;
}
for (var i = 0; i < document.forms[0].elements['relayDestCount'].value; i++) {
// check to see that TTL is a number (if it's filled in)
var fieldValue = document.forms[0].elements['relayDestTTL'+i].value;
if ((fieldValue != '') && ((fieldValue < 1) || (fieldValue > 255) || (fieldValue.match('[^0-9]') != null))) {
entityAlert("<qtssstring name=RelayErrMulticastTTLIncorrect/>");
document.forms[0].elements['relayDestTTL'+i].value = document.forms[0].elements['relayDestTTL'+i+'_shadow'].value
return false;
}
// check the destinations for empty fields based on dest type
var currentRelayDestTypeRadios = document.forms[0].elements['relayDestType'+i];
if (currentRelayDestTypeRadios[0].checked) { // announced
if (document.forms[0].elements['relayDestMountPoint'+i].value == '') {
entityAlert("<qtssstring name=RelayErrNoDestMountpoint />");
return false;
}
}
else if (currentRelayDestTypeRadios[1].checked) { // unannounced
if (document.forms[0].elements['relayDestPort'+i].value == '') {
entityAlert("<qtssstring name=RelayErrNoDestBasePort />");
return false;
}
}
else { // no type selected
entityAlert("<qtssstring name=RelayErrNoDestType />");
return false;
}
}
return true;
}
<qtssrepeater name=relaynames>
allRelays[allRelays.length] = '<qtssobject name=qtssRelayName/>';
</qtssrepeater>
</script>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
<qtssobject type=validatedform>
<qtssobject type=hidden name="relayDestCount"/>
<qtssobject type=hidden name="qtssSvrDefaultDNSName"/>
<qtssobject type=hidden name="relayIsNew"/>
<input type=hidden name=action value="">
<input type=hidden name=filename value="relay.html">
<input type=hidden name="currentDest" value="">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top nowrap width=20>
<img src="images/spacer.gif" width=20 height=20 align=top>
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="RelayDetailsHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width=600 height=1 align=middle>
</td>
</tr>
</table>
<br>
<table border=0 cellspacing=0 cellpadding=0 width="90%">
<tr>
<td valign=top nowrap align=center>
<table border=0 cellspacing=4 cellpadding=0>
<tr>
<td align=right>
<b><qtssstring name="RelayDetailsRelayName"/></b>
</td>
<td align=left>
<qtssobject name="currentRelay" type="text" param=" size=60">
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=right>
<b><qtssstring name="RelayDetailsStatus"/></b>
</td>
<td align=left>
<qtssobject name="relayEnabled" format=checkbox param="1"> <qtssstring name="Enabled"/>
</td>
</tr>
</table>
<br>
</td>
</tr>
<tr>
<td align=left valign=top>
<p class=large>
<img src="images/divider.gif" width="100%" height=1 align=middle>
<br>
<b><qtssstring name="RelayDetailsSourceSettingsHeader"/></b>
<br>&nbsp;
</p>
<table border=0 cellspacing=4 cellpadding=0 align=center>
<tr>
<td colspan=2 align=right>
<b><qtssstring name="RelayDetailsSourceHostname"/></b>
</td>
<td align=left>
<p>
<qtssobject name="relaySourceHostname" type=text param=" size=32"/>
</p>
</td>
</tr>
<tr>
<td colspan=2 align=right>
<b><qtssstring name="MountPoint"/></b>
</td>
<td align=left>
<qtssobject name="relaySourceMountPoint" type=text param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=right>
<qtssobject name="relayType" format="radio" param="rtsp_source" />
</td>
<td align=left colspan=2>
<b><qtssstring name="RelayDetailsSourceRequestStream"/></b>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="Username"/></b>
</td>
<td align=left>
<qtssobject name="relaySourceUsername" type=text param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="Password"/></b>
</td>
<td align=left>
<qtssobject name="relaySourcePassword" type=password param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=right>
<qtssobject name="relayType" format="radio" param="announced_source" />
</td>
<td align=left colspan=2>
<b><qtssstring name="RelayDetailsSourceWait"/></b>
</td>
</tr>
</table>
<br>
<br>
</td>
</tr>
<qtssrepeater name="relaydests">
<tr>
<td align=left>
<p class=large>
<img src="images/divider.gif" width="100%" height=1 align=middle>
<br>
<b><qtssstring name="RelayDetailsDestinationHeader"/> (<qtssobject name=iteration/> <qtssstring name="of"/> <qtssobject name="relayDestCount"/>)</b>
<br>
</p>
<table border=0 cellspacing=4 cellpadding=0 align=center>
<tr>
<td colspan=2 align=right>
<b><qtssstring name="RelayDetailsDestHostname"/></b>
</td>
<td align=left>
<qtssobject name="relayDestHostname" type=text param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=right>
<qtssobject name="relayDestType" format=radio param="announced_destination"/>
</td>
<td align=left colspan=2>
<b><qtssstring name="RelayDetailsDestAnnounced"/></b>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="MountPoint"/></b>
</td>
<td align=left>
<qtssobject name="relayDestMountPoint" type=text param=" size=32 onchange=fixMountPoints()"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="Username"/></b>
</td>
<td align=left>
<qtssobject name="relayDestUsername" type=text param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="Password"/></b>
</td>
<td align=left>
<qtssobject name="relayDestPassword" type=password param=" size=32"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=left>
<p>
<br>
</p>
</td>
<td align=left>
<p>
</p>
</td>
</tr>
<tr>
<td align=right>
<qtssobject name="relayDestType" format=radio param="udp_destination"/>
</td>
<td align=left colspan=2>
<b><qtssstring name="RelayDetailsDestUDP"/></b>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="RelayDetailsDestBasePort"/></b>
</td>
<td align=left>
<qtssobject name="relayDestPort" type=text param=" size=6"/>
</td>
</tr>
<tr>
<td align=left>
<p>
</p>
</td>
<td align=right>
<b><qtssstring name="RelayDetailsDestMulticastTTL"/></b>
</td>
<td align=left>
<qtssobject name="relayDestTTL" type=text param=" size=3"/>
</td>
</tr>
</table>
<p>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left>
<a href="#" onclick="clickedDeleteRelayDest(<qtssobject name=iteration/>)">
<img src="images/link.gif" width=28 height=24 border=0>
</a>
</td>
<td align=left>
<a href="#" onclick="clickedDeleteRelayDest(<qtssobject name=iteration/>)">
<qtssstring name="RelayDetailsDeleteDestination" />
</a>
</td>
</tr>
</table>
<br>
</p>
</td>
</tr>
</qtssrepeater>
<tr>
<td align=left>
<p>
<img src="images/divider.gif" width="100%" height=1 align=middle>
<br>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=left>
<a href="#" onclick="clickedAddDestButton()">
<img src="images/link.gif" width=28 height=24 border=0>
</a>
</td>
<td align=left>
<a href="#" onclick="clickedAddDestButton()">
<qtssstring name="RelayDetailsAddDestination" />
</a>
</td>
</tr>
</table>
</p>
</td>
</tr>
</table>
<br>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left valign=top colspan=2>
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left valign=top>
<br>
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
</td>
<td align=right valign=top>
<br>
<input type=submit name=Submit value="<qtssstring name=SubmitButtonTitle/>" onclick="clickedSaveButton()">
</td>
</tr>
</table>
</td>
</tr>
</table>
</qtssobject>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more