The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
# rtsp-request: Command Line RTSP Tool 0.1
# http://www.kosho.org/tools/rtsp-request/
# 

$|=0;
my $VERSION=0.1;

use Getopt::Std;
use RTSP::Lite;

getopts('cbdphvm:');

$url = $ARGV[0];

if ($opt_h) {
    print STDERR "Command Line RTSP tool $VERSION\n";
    print STDERR "Usage: rtsp-request [OPTION]... -m method-name URL [optional-request-header]...\n";
    print STDERR "  -m method-name (OPTIONS, DESCRIBE, SETUP, PLAY, ...)\n";
    print STDERR "  -c display response code and message\n";
    print STDERR "  -b display received response body\n";
    print STDERR "  -p display received response headers\n";
    print STDERR "  -v display separators\n";
    print STDERR "  -d display network read and write (debug)\n";
    print STDERR "  -h display help\n";
    print STDERR "  optional-request-header, cf. \"User-Agent=rtsp-request\"\n";
    print STDERR "  return-code, 0: response code is 200, -1: others\n";
    exit (0);
}

($protocol,$host,$junk,$port,$object) = 
    $url =~ /^([^:\/]+):\/\/([^\/:]*)(:(\d+))?(\/.*)$/;

if (!defined($port)) {
  $port = 554;
}

if ($protocol ne "rtsp") {
  print STDERR "This tool only supports rtsp \n";
  exit (-1);
}

$rtsp = new RTSP::Lite;

if ($opt_d) {
  $rtsp->debug(1);
}

if (!($req = $rtsp->open($host,$port))) {
  print "Unable to open: $!\n";
  exit (0);
}

$rtsp->method($opt_m);
$rtsp->user_agent("rtsp-request:$VERSION");

shift @ARGV;

while ($header_string = shift @ARGV) {
  ($header, $param) = $header_string =~ /^([^=]+)=(.*)/;
  $rtsp->add_req_header($header,$param);
}


$rtsp->request($url);

if ($opt_c) {
    if ($opt_v) {
	print "--- Status ---\n";
    }
    print $rtsp->status." ".$rtsp->status_message();
}

if ($opt_p) {
  my @headers = $rtsp->headers_array();

  if ($opt_v) {
      print "--- Received Headers ---\n";
  }
  foreach $header (@headers)
  {
    print "$header\n";
  }
}

if ($opt_b) {
    if ($opt_v) {
	print "--- Received Body ---\n";
    }
    print $rtsp->body();
}

exit(0);