# This be a comment, I like comments.

################################################################################
# I suggest you read this file carefully, and don't do anything silly
# cause the configuration file parser is pretty lame.
# If not stated otherwize, you can change these while the server is 
# running (through the admin console). Or by changing this file
# and using the rehash command (or (if supported) sending SIGHUP)
# Please use the admin console though, cause that's what its there for :)
################################################################################

############### Server Location and Resposible Person ##########################
# Server meta info, please fill out these.  
# They get displayed when listing directories, streams, and 
# if the client supports it, among the other stream headers.
# You can put anything here, it's just for show.
###############

location Snookles Music, Minneapolis, MN
rp_email scottf@snookles.com
server_url http://www.snookles.com/

########################### Server Limits ######################################
# These describe the maximum number of simultaneous connections allowed.
# When reached, the server will refuse access.
# There is a builtin bandwidth measuring tool inside the icecast server,
# and when icecast thinks that it is using more than "throttle" MB/s, then
# no clients or sources will be allowed until the bandwidth usage goes back
# down below the limit. Use this with caution, since the bandwidth measurement
# is in no way an exact science.
###########################

max_clients 5
max_clients_per_source 5
max_sources 16
max_admins 5
throttle 0.2

########################## Stream Meta Data ####################################
# This is a experimental feature, at best. 
# When it does not work, it will put the whole stream out of synk on the client
# side, and you will get a big mess.
# use_meta_data controls whether this icecast server will use title streaming at
# 	        all. It's turned off by default, cause it creates chirps in the
#               stream if you're not careful.
# streamtitletemplate is a the template for creating the title that gets sent to
#                     the client and the directory server. %s will be
#		      substituted for the actual filename.
# streamurl is the default url for each stream.
# nametemplate is a template for the name of each stream.
# desctemplate is a template for the description of each stream.
##########################
#XXX use_meta_data 0
#XXX streamurllock 0
#XXX streamtitletemplate %s
#XXX streamurl http://yp.icecast.org
nametemplate %s
desctemplate %s

######################### Server passwords #####################################
# Unless you've compiled icecast with crypt support,
# i.e with --with-crypt as an argument to the configure script,
# then these are in cleartext. If you _do_ have crypt support, then
# you have to create a crypted version of the password. You can do this
# with the included mkpasswd.c program. Just compile it with
# "gcc -o mkpasswd mkpasswd.c", perhaps with the -lcrypt option.
#########################

client_password not_used
encoder_password ChangeThis
admin_password ChangeThis
oper_password ChangeThis

######################## Directory servers #####################################
# A directory server is a "meta-server" where you, for free, can list
# your own icecast server. This is a great way of getting more listeners.
# The touch_freq is how often to "update" the directory server with information
# from your server. (e.g number of listeners, stream info, etc..)
########################

icydir yp.breakfree.com
icydir yp.musicseek.net
icydir yp.van-pelt.com
icydir yp.radiostation.de
icydir yp.shoutcast.com
directory yp.icecast.org
directory yp.mp3.de
touch_freq 1

############# Server IP/port configuration (IMPORTANT) #########################
# If no hostname is specified, icecast will listen on all available interfaces,
# i.e INADDR_ANY. This is probably what you want.
# If you want icecast to _only_ listen on a specified ip, then change the 
# "hostname" parameter. The "port" parameter is rather self-explanatory. 
# As of icecast 1.3, all connections use port 8000. Admins, encoders, clients, 
# the whole thing. So no more messing with 3 different ports in the firewall 
# rules.
# The server_name can currently ONLY be specified here, and ONLY when you start
# the server. Changing it later on will not have the desired effect.
# The server_name specifies the hostname of the server, don't set it to an ip, 
# and don't even THINK about setting it to a hostname not pointing to your ip.
# - WARNING - WARNING - WARNING - (important, get it?)
# It is VERY important that this server_name does actually resolv to the ip you
# are running your server at. If not, BAD THINGS<tm> will happen.
# E.g localhost is definately probably not what you want :)
# Using your ip will probably work.. but it will look nicer with your hostname.
# The problem is that if you specify something that doesn't resolve to yourself,
# then virtual host support will get fscked up, and default server action
# might not work either.
# Also, changing the port here will not affect the server when doing a 'rehash'
# since binding to a port is done only once, when the server is started.
# server is started.
# Users on dialup connections with dynamic ip:s are in trouble here, I know.
# You will just have to live without the virtual hosts support, cause there is
# no portable way of getting all the ip:s the process is binding to. Either
# edit this file before starting icecast and fill in the current ip, or just
# live with it. Setting the value to "dynamic", will tell the icecast server
# that there is no reliable hostname for this machine.
#############

#hostname 192.168.1.1

port 8000
portalias 8010:/djo
portalias 8011:/mpr
portalias 8012:/mc
portalias 8013:/stochoir
portalias 8014:/bj
portalias 8015:/meanfarmer
portalias 8016:/ds
portalias 8017:/classical1
portalias 8018:/classical2
portalias 8019:/rock1
portalias 8020:/rock2
portalias 8021:/misc4
portalias 8022:/misc5

server_name www.snookles.com

######################## Main Server Logfile ##################################
# This is the file where icecast prints all the information about
# connections, warnings, errors, etc...
# You cannot change this in the admin console, but changing it here
# and then rehashing the server will work.
# logfiledebuglevel is the debugging level for all output to the main logfile.
# consoledebuglevel is the debugging level to the icecast console.
# accessfile is the file where all connects/disconnects goes
# usagefile is a file for periodic bandwidth and usage information goes
########################

logfile icecast.log
accessfile access.log
usagefile usage.log
logfiledebuglevel 0
consoledebuglevel 0

########################## Reverse Lookups ####################################
# Set this to 1 if you want ip:s to be looked up (using reverse lookup)
# or 0 if you just want the ip:s (which is slightly faster)
##########################

reverse_lookups 1

############################ Console mode #####################################
# Use 0 if you want stdin to become a local admin console with log tailing
# Use 1 if you want stdin to become a local admin console
# Use 2 if you just want the console to become a log window
# Use 3 if you want the icecast server to be launched in the background (not available for Win32)
############################

# XXX I don't know why, but there's a weird thread problem if
# XXX I use mode 3.  Mode 2 appears OK, though.  -SLF
console_mode 2

########################### Client Timeout ####################################
# (How to deal with clients when no encoder is connected)
# A negative value means keep them forever
# 0 (zero) means kick them out instantly
# X > 0 means keep them X seconds
###########################

client_timeout 30

######################### Kicking clients #####################################
# If set to 1, then clients whose source has disconnected will
# be kicked. If set to 0, they will simply be moved to another
# stream. This only has an effect if client_timeout is <= 0.
#########################

kick_clients 0

###################### Static file directory ##################################
# This enables the http-server file streaming support in icecast.
# If you don't want to go through the trouble of setting up apache
# or roxen or whatever, then you can just specify a directory here,
# and then http://your_server:port/file/file.mp3 will be equivalent
# to /static_dir/file.mp3
# The http server support is of course very limited, don't try to 
# do anything fancy. Also, only .mp3 files will be displayed.
######################

#static_dir c:\windows\desktop
# XXX?  static_dir /tmp/wav

############################# Statistics ######################################
# The icecast server dumps statistics to a file on a regular basis.
# You can specify how often (stats_time), and to what file (stats_log)
# StatsTime (how often to dump stats, in seconds)
# 0 (zero) means to not dump stats
# X > 0 means dump stats every X seconds to the file specified by stats_log
#############################

stats_log stats.log
statshtml_log /usr/local/apache/htdocs/icecast/stats.html
stats_time 60

############# Aliases (including virtual host support) ########################
# In icecast servers prior to the 1.3 release, you could run a icecast
# server as a relay for another icecast server, simply acting as a 
# client for the other server and serving the local clients. This was
# of course a neat way of increasing the number of possible listeners
# for your broadcast. You could build a tree-like structure of relays
# and broadcast to 1000 listeners without problem with the originating
# stream on a cable modem or whatever.
# In icecast 1.3 and above, we make this procedure much simpler.
# If you want to relay a stream from another server, simply add an 
# alias for that server. Say you want to relay the broadcast originating
# from my machine (laika.linux.tm:8000/laika), on your machine, do this:
# alias laika http://laika.linux.tm:8000/laika
# What happens is that when a listeners connects to your server and
# requests the /laika stream, then your icecast server will connect
# as a client to my machine, and then feed my stream to the listener.
# All subsequent requests for /laika will use the same feed (i.e only
# one connect will be made to my machine). Icecast will automagically
# shut the link from my machine down when no one is listening. I.e
# no bandwidth will be wasted.
# The old functionality (i.e adding a more or less static relay) is still
# there, but you have to do it from the admin console. Just do
# relay pull http://laika.linux.tm:8000, and that will be accessible as
# http://your_machine:port/laika.linux.tm:8000/ (you can change this with
# the -m option to relay pull.
# There is also a possibity to do it the other way around, starting at
# the originating server. Just do "relay push <source_id> host:port", and
# your stream will be relayed to the remote server.
# In theory, this should enable virtual host support, cause you can
# specify an alias like so:
# alias http://virtual.host.com:port/whatever /something
# This will make all requests to virtual.host.com:port/whatever use the
# stream /something. This is not really thorougly tested, but it should
# work if your server_name is correctly set, and the client is sending
# the valid Host: <host:port> http header.
#############

#alias radiofri http://195.7.65.207:6903
#XXX doesn't work: alias http://www.snookles.com:8001/djodjo djo2

############################ Kick Relays ######################################
# How long to keep aliased sources when no clients are left listening to it.
############################
kick_relays 10

############################ Transparent proxy ################################
# This is somewhat equivalent to making _all_ request to aliased sources. So
# instead of adding an alias for all streams in the world, turn on the
# transparent proxy support. Using this on a server that has streams of it's
# own can be quite tricky, and then, as usual it is _very_ important that
# the server_name is correct. 
# Most mp3 playing clients have support for a http proxy 
# (afaik x11amp and winamp do, anyway). If listeners set your machine as this
# proxy, and you turn on transparent_proxy, then when a client requests
# http://whatever.com:port/whatever, then your icecast server will connect
# to whatever.com and feed the whatever-stream to the client. All subsequent
# request for this stream will use the same feed, just as if it was an alias.
# When running icecast with your own broadcasts, then you should turn this off,
# or anyone can bring your network down with a lot of relaying connects.
# Don't turn this on if you don't have a server_name set
############################
transparent_proxy 0


######################## Access Control Lists ##################################
# Perhaps you don't care who connects to your server, but I guess most people
# do. Icecast has 2 different ways of keeping people out. The first is using
# libwrap (tcpd, tcp wrappers, whatever you want to call it). It is a separate
# library written by Wietse Venema that over the years has become more or less
# a security standard in Unix. It should compile on every sane and unsane unix
# platform, and perhaps other platforms as well, I don't know.
# libwrap uses the files hosts.deny and hosts.allow, usually found in /etc
# or /usr/local/etc. You probably have to be root to edit these files.
# Try the man pages for tcpd and hosts_access for more information.
# There are 4 different icecast control thingies to use in hosts.deny/allow.
# First just "icecast", which controls _all_ connections, and kick in before
# anything is written or read on the socket. If a connection is denied here
# then it's bye bye. If it is allowed then depending on the type of the 
# connection (admin/client/source), the controls "icecast_client", 
# "icecast_admin", "icecast_source" describe who gets in.
# So to deny all clients except those matching *.se, add
# "icecast_client: ALL EXCEPT *.se" to hosts.deny. There are millions of
# variations on how to build a complete defence, and it's quite simple too.
# libwrap is a very powerful tool, consult the manpages for more information.
####
# The second way (which is always available) is using icecast's internal
# acl lists. The functionality is the same, but it is not as powerful when it
# comes to configuration and flexibilty as libwrap.
# You can specify acl rules either here in icecast.conf, or using the
# admin console. The syntax in icecast.conf is:
# allow <all|client|source|admin> <hostmask>
# deny <all|client|source|admin> <hostmask>
# So, using the same rule as above (allowing only clients from *.se)
# deny <client> *
# allow <client> *.se
# When using the internal acl rules, you need to specify a policy.
# This rule kick in when no allow or deny rule affects a connection.
# If you set acl_policy to 0, then connections who are not allowed by any
# allow rule will be denied, and the other way around if you set it to 1.
#########################

acl_policy 1
#deny all *
#allow all *.ryd.student.liu.se

################################################################################
