#!/usr/bin/perl -w

use strict;
use IO::Socket::INET;
use IO::Select;

$|++;

my $headers = [

	'GET /83/246309033_1c401b15ff.jpg HTTP/1.1',
	'Accept: text/plain, text/html, image/gif, image/jpeg, image/png, image/tv, */*',
	'PTV-Display-Width: 640',
	'PTV-UID: 000F216B3C26',
	'User-Agent: Mozilla/4.0 PowerTV/3.6 (compatible; Spyglass DM 4.1; MSIE 5.0; PowerTV; DigExt)',
	'UA-color: color0',
	'UA-pixels: 0x0',
	'UA-OS: PowerTV',
	'UA-CPU: usparc',
	'Host: static.flickr.com',
	'Connection: keep-alive',
	'TE: trailers',
	'Cookie: B=drb4plp2h0vku&b=2',
];

my $pairs = [
	['MUD VIP','storage1.flickr.vip.mud.yahoo.com'],
	['RE2 VIP','storage1.flickr.vip.re2.yahoo.com'],
	['MUD Direct','photocache1.flickr.mud.yahoo.com'],
	['RE3 Direct','photocache1.flickr.re3.yahoo.com'],
];

foreach my $pair (@{$pairs}){

	&try_request($pair->[0].' big ', $pair->[1], $headers, "\r\n");
	&try_request($pair->[0].' mini', $pair->[1], ['GET /foo.gif HTTP/1.0'], "\r\n");

	#&try_request($pair->[0].' big n   ', $pair->[1], $headers, "\n");
	#&try_request($pair->[0].' mini n  ', $pair->[1], ['GET /foo.gif HTTP/1.0'], "\n");
}


sub try_request {
	my ($label, $host, $lines, $cr) = @_;

	my $sock = new IO::Socket::INET(PeerAddr => $host, PeerPort => 'http(80)', Proto => 'tcp');
	my $sel = new IO::Select();

	$sel->add($sock);

	#$sock->blocking(0);

	print "$label : ";

	for my $line (@{$lines}){

		print '.';

		$sock->send("$line$cr");
	}

	print '(';
	$sock->send($cr);
	print '.)';

	my @ready = $sel->can_read(1);

	if (scalar @ready){

		print " ok\n";
		return;
	}

	print '(';
	$sock->send($cr);
	print '.)';

	my @ready2 = $sel->can_read(1);

	if (scalar @ready){

		print " ok (3rd)\n";
	}else{
		print " fail\n";
	}
}
