diff options
| author | ivan <ivan> | 2003-06-16 11:38:34 +0000 |
|---|---|---|
| committer | ivan <ivan> | 2003-06-16 11:38:34 +0000 |
| commit | f447e74c146d83b9348ed3dcb32104d2b2991ac9 (patch) | |
| tree | 175c6936a276742501b6e40265bc2efe910f22dc /plex.pls | |
initial importSTART
Diffstat (limited to 'plex.pls')
| -rw-r--r-- | plex.pls | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/plex.pls b/plex.pls new file mode 100644 index 0000000..a1bd1cc --- /dev/null +++ b/plex.pls @@ -0,0 +1,90 @@ +#!/usr/bin/perl -w +# +# iceplex +# +# Copyright (c) 2003 Ivan Kohler +# All rights reserved. +# This program is free software; you can redistribute it and/or modify it under +# the same terms as Perl itself. + +use strict; +use subs qw(pick_server); +use CGI; +use CGI::Carp qw(fatalsToBrowser); +use Digest::MD5; +use Net::SSH qw(ssh); + +# pull in configuration +use vars qw($dsn $user $pass $mp3path $port); +use vars qw($override_query $fileno_query); +use vars qw(%extension2type); +require "/etc/iceplex.conf"; + +#detect .pls or .m3u filetype +$0 =~ /\.(pls|m3u)$/i or die "must be named with .pls or .m3u extension"; +my $extension = lc($1); + +#connect to database +my $dbh = DBI->connect($dsn, $user, $pass) or die $DBI::errstr; + +#pick a server +my $server = pick_server(); + +#get customer & user from client browser +my $cgi = new CGI; +$cgi->param('customer') =~ /^(\d{1,10})$/ or die 'illegal customer numer'; +my $customer = sprintf("%6d", $1); #!! how many digits in customer #? +$cgi->param('user') =~ /^(\d{1,10})$/ or die 'illegal user numer'; +my $user = sprintf("%4d", $1); #!! how many digits in user #? + +#get file number +my $fileno = ''; +if ( $override_query ) { + my $sth = $dbh->prepare( $override_query ) or die $dbh->errstr; + $sth->execute($customer, $user) or die $sth->errstr; + my $row = $sth->fetchrow_arrayref; + $fileno = $row->[0] if $row; +} +if ( !length($fileno) && $fileno_query ) { + my $sth = $dbh->prepare( $fileno_query ) or die $dbh->errstr; + $sth->execute($customer, $user) or die $sth->errstr; + my $row = $sth->fetchrow_arrayref; + die "No files for user $user of customer $customer" unless $row; + $fileno = $row->[0]; +} +$fileno = '000' unless length($fileno); #default + +#genarate filename +my $filename = "$mp3path/$customer-$user-$fileno.mp3"; + +#disconnect from database +$dbh->disconnect; + +#generate a mountpoint +my $mountpoint = md5_hex($cgi->remote_host. $$. time. int(rand(4294967296))); + +#signal encoder to start streaming to mountpoint & wait for confirmation +ssh($server, 'yashout', $filename, $mountpoint ); + +#send file back to client browser + +print $cgi->header( -type => $extension2type{$extension} ); +print "[playlist]\nNumberOfEntries=1\n" if $extension eq 'pls'; +print "http://$server:$port/$mountpoint\n"; + +### +# subroutiens +### + +sub pick_server { + my $sth = $dbh->prepare( + "SELECT servername FROM iceplex_servers ". + "WHERE status = 'online' ". + "ORDER BY listeners ASC LIMIT 1" + ) or die $dbh->errstr; + $sth->execute() or die $sth->errstr; + my $row = $sth->fetchrow_arrayref; + die "No servers online!" unless $row; + $row->[0]; +} + |
