#!/usr/bin/env perl
# (C) 2009 Andrej Stepanchuk
my $version = 1.09;

use Env qw[@PATH];
use Fcntl;
use File::Copy;
use File::Path;
use File::stat;
use Getopt::Long;
use HTML::Entities;
use HTTP::Cookies;
use HTTP::Headers;
use IO::Seekable;
use IO::Socket;
use LWP::ConnCache;
#use LWP::Debug qw(+);
use LWP::UserAgent;
use POSIX qw(mkfifo);
use strict;
#use warnings;
use Time::Local;
use URI;

use XML::Simple;
use Data::Dumper;

use Crypt::Rijndael;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Digest::HMAC_MD5 qw(hmac_md5 hmac_md5_hex);
use MIME::Base64;

my ($rtmpurl, $output, $help, $host, $port, $protocol, $playpath, $swfurl, $tcurl, $pageurl, $app, $swfhash, $swfsize, $auth, $flashVer, $live, $timeout, $buffertime, $streamer, $sport);

usage() if (!GetOptions(
	'help|h'	=> \$help, 
	'rtmp|r=s',	=> \$rtmpurl,
	'host|n=s'	=> \$host, 
	'port|c=i'	=> \$port,
	'protocol|l=i'	=> \$protocol,
	'playpath|y=s'	=> \$playpath,
	'swfUrl|s=s'	=> \$swfurl,
	'tcUrl|t=s'	=> \$tcurl,
	'pageUrl|p=s'	=> \$pageurl,
	'app|a=s'	=> \$app,
	'swfhash|w=s'	=> \$swfhash,
	'swfsize|x=i'	=> \$swfsize,
	'auth|u=s'	=> \$auth,
	'flashVer|f=s'	=> \$flashVer,
	'live|v'	=> \$live,
	'timeout|m=i'	=> \$timeout,
	'buffer|b=i'	=> \$buffertime,
	
	'output|o=s'	=> \$output,
	'streamer=s'	=> \$streamer,
	'sport=i'	=> \$sport
)
    or defined $help );

unless(defined($streamer)) {
	print "You must specify the stream server!\n";
	exit 1;
}

if(!defined($rtmpurl) && !defined($playpath)) {
	print "You must specify playpath ot rtmpurl!";
	exit 1;
}
my $firstParam=1;

my $url = "http://$streamer";

if(defined($sport)) {
	$url = "$url:$sport";
}
$url = "$url/";

if(defined($rtmpurl)) {
	if($firstParam == 1) {
		$firstParam=0;
        	$url = "$url?r=".urlencode($rtmpurl);
	} else {
		$url = "$url&r=".urlencode($rtmpurl);
	}
}
if(defined($playpath)) {
        if($firstParam == 1) {
	        $firstParam=0;
		$url = "$url?y=".urlencode($playpath);
	} else {
		$url = "$url&y=".urlencode($playpath);
	}
}
if(defined($host)) {
        $url = "$url&n=".urlencode($host);
}
if(defined($port)) {
        $url = "$url&c=$port";
}
if(defined($protocol)) {
        $url = "$url&l=$protocol";
}
if(defined($swfurl)) {
        $url = "$url&s=".urlencode($swfurl);
}
if(defined($tcurl)) {
        $url = "$url&t=".urlencode($tcurl);
}
if(defined($pageurl)) {
        $url = "$url&p=".urlencode($pageurl);
}
if(defined($app)) {
        $url = "$url&a=".urlencode($app);
}
if(defined($swfhash)) {
        $url = "$url&w=".urlencode($swfhash);
}
if(defined($swfsize)) {
        $url = "$url&x=$swfsize";
}
if(defined($auth)) {
        $url = "$url&u=".urlencode($auth);
}
if(defined($flashVer)) {
        $url = "$url&f=".urlencode($flashVer);
}
if(defined($live)) {
        $url = "$url&v=";
}
if(defined($timeout)) {
        $url = "$url&m=$timeout";
}
if(defined($buffertime)) {
        $url = "$url&b=$buffertime";
}
print "final url: $url\n";

my $cmd = "wget \"$url\" -O \"$output\"";
system($cmd);
exit 0;

sub urlencode
{
	my $str = shift;
	$str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
	return $str;
}

sub usage
{
  print "Unknown option: @_\n" if ( @_ );
  system("./streams_x86 --help");
  exit 0;
}

#my $cmd = "wine rtmpdump_win32.exe --playpath \"$playpath\" --protocol 3 -r \"$rtmpurl\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --host \"$ip\" --port 1935 --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" --swfUrl \"http://www.hulu.com/player.swf\" --tcUrl \"$tcurl\" --app \"$app\" -o test.flv";

#my $cmd = "./rtmpdump --protocol 3 --resume -r \"$rtmpurl\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --host \"$ip\" --port 1935 --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" --swfUrl \"http://www.hulu.com/player.swf\" --tcUrl \"$tcurl\" --app \"$app\" -o test.flv";

#my $swfurl = "http://www.hulu.com/player.swf";
#$rtmpurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
#$progurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
#$tcurl   =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
#$app     =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
#$swfurl  =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;

#my $cmd = "wget \"http://$ip:$port/?r=$rtmpurl&l=3&w=$playerhash&x=$playersize&n=$host&c=1935&p=$progurl&s=$swfurl&t=$tcurl&a=$app\" -O test.flv";

#$rtmpurl =~ s/rtmp:\/\//rtmpe:\/\//;
#my $cmd = "./rtmpdump --rtmp \"$rtmpurl\" --swfUrl \"http://www.hulu.com/player.swf\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" -o test.flv";

#print "\nCOMMAND1: $cmd\n";
#system($cmd);






