#!/usr/local/bin/perl
$port = shift;
# from Ў wwwclient.pl
# from Ў /usr/include/linux/socket.h
$AF_INET=2;
$SOCK_STREAM=1;
$PF_INET=$AF_INET;
#
# if ($url =~ m!http://([^/]*)(/.*)!) {$them=$1;$file=$2;}
# if ($them =~ /(.*):([0-9]*)/) {$them=$1;$port=$2;}
#
# ($them,$port) = @ARGV;
$port = 8081 unless $port;
# And here's a server:
$newport=$port;
$sockaddr = 'S n a4 x8';
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $newport) = getservbyname($newport, 'tcp')
unless $newport =~ /^\d+$/;
$this = pack($sockaddr, $AF_INET, $newport, "\0\0\0\0");
select(NETSCAPE); $| = 1; select(stdout);
socket(S, $PF_INET, $SOCK_STREAM, $proto) || die "socket: $!";
bind(S, $this) || die "bind: $!";
listen(S, 5) || die "connect: $!";
select(S); $| = 1; select(stdout);
for (;;) {
print "Listening again $port\n";
($addr = accept(NETSCAPE,S)) || die $!;
print "accept ok\n";
($af,$newport,$inetaddr) = unpack($sockaddr,$addr);
@inetaddr = unpack('C4',$inetaddr);
print "$af $newport @inetaddr\n";
##################
$ihport=80;
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $ihport) = getservbyname($ihport, 'tcp') unless $ihport =~ /^\d+$/;
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $ihport, $thataddr);
socket(HTTPD, $PF_INET, $SOCK_STREAM, $proto) || die "socket: $!";
bind(HTTPD, $this) || die "bind: $!";
connect(HTTPD, $that) || die "connect: $!";
select(HTTPD); $| = 1;
select(NETSCAPE); $| = 1; select(stdout); $|=1;
########################################
$Contentslength=0;
while () { # ЗАЧИТЫВАЕМ ЗАГОЛОВОК HTTPD ЗАПРОСА
print length;
print;
print HTTPD;
/^Content-length: ([0-9]*)/ && do {print $Contentslength=$1 ; print "<>"};
/^\r*$/ && last; # ПО ПРОТОКОЛУ В КОНЦЕ СТРОКИ CRNL
}
# /^Content-type: application/x-www-form-urlencoded/;
print "Contentslength: ",$Contentslength,"\n jjj\niii" ;
if ($Contentslength) {
print "Contentslength: ",$Contentslength ;
while (0) # read (NETSCAPE,$bufer,1)
{ # ЗАЧИТЫВАЕМ ВСЕ ОСТАЛЬНОЕ
print 1,"\n";
print;
print HTTPD $bufer;
}
}
# print time," GET $file HTTP/1.0\n\n";
print "GET $file HTTP/1.0\n\n";
$bufersize=64*1024;
while ( read(HTTPD,$bufer,$bufersize)) {
print NETSCAPE $bufer, "\n";
}
# print time;
##################
}