From fdd91b2209ea222cdd081a7b8afc8c4d502ac195 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 16 Nov 2000 09:06:18 +0000 Subject: moved out the FTP part --- tests/httpserver.pl | 147 +++++----------------------------------------------- 1 file changed, 12 insertions(+), 135 deletions(-) (limited to 'tests/httpserver.pl') diff --git a/tests/httpserver.pl b/tests/httpserver.pl index d7e52f4e0..e4e6d74aa 100755 --- a/tests/httpserver.pl +++ b/tests/httpserver.pl @@ -9,19 +9,19 @@ sub spawn; # forward declaration sub logmsg { #print "$0 $$: @_ at ", scalar localtime, "\n" } -my $port = $ARGV[0]; -my $proto = getprotobyname('tcp') || 6; -$port = $1 if $port =~ /(\d+)/; # untaint port number +my $verbose=0; # set to 1 for debugging -my $protocol; -if($ARGV[1] =~ /^ftp$/i) { - $protocol="FTP"; -} -else { - $protocol="HTTP"; -} +my $port = 8999; # just a default +do { + if($ARGV[0] eq "-v") { + $verbose=1; + } + elsif($ARGV[0] =~ /^(\d+)$/) { + $port = $1; + } +} while(shift @ARGV); -my $verbose=0; # set to 1 for debugging +my $proto = getprotobyname('tcp') || 6; socket(Server, PF_INET, SOCK_STREAM, $proto)|| die "socket: $!"; setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, @@ -29,7 +29,7 @@ setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, bind(Server, sockaddr_in($port, INADDR_ANY))|| die "bind: $!"; listen(Server,SOMAXCONN) || die "listen: $!"; -print "$protocol server started on port $port\n"; +print "HTTP server started on port $port\n"; open(PID, ">.server.pid"); print PID $$; @@ -44,55 +44,6 @@ sub REAPER { logmsg "reaped $waitedpid" . ($? ? " with exit $?" : ''); } -# USER is ok in fresh state -my %commandok = ( "USER" => "fresh", - "PASS" => "passwd", - # "PASV" => "loggedin", we can't handle PASV yet - "PORT" => "loggedin", - ); - -my %statechange = ( 'USER' => 'passwd', # USER goes to passwd state - 'PASS' => 'loggedin', # PASS goes to loggedin state - 'PORT' => 'ported', # PORT goes to ported - ); - -my %displaytext = ('USER' => '331 We are happy you popped in!', # output FTP line - 'PASS' => '230 Welcome you silly person', - ); - -my %commandfunc = ( 'PORT', \&PORT_command ); - -sub PORT_command { - my $arg = $_[0]; - print STDERR "fooo: $arg\n"; - - # "193,15,23,1,172,201" - - if($arg !~ /(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)/) { - print STDERR "bad PORT-line: $arg\n"; - print "314 silly you, go away\r\n"; - return 1; - } - my $iaddr = inet_aton("$1.$2.$3.$4"); - my $paddr = sockaddr_in(($5<<8)+$6, $iaddr); - my $proto = getprotobyname('tcp') || 6; - - socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "major failure"; - print STDERR "socket()\n"; - - connect(SOCK, $paddr) || return 1; - print STDERR "connect()\n"; - - my $line; - while (defined($line = )) { - print STDERR $line; - } - - close(SOCK); - print STDERR "close()\n"; - -} - $SIG{CHLD} = \&REAPER; for ( $waitedpid = 0; @@ -109,80 +60,6 @@ for ( $waitedpid = 0; spawn sub { my ($request, $path, $ver, $left, $cl); - if($protocol eq "FTP") { - - # < 220 pm1 FTP server (SunOS 5.7) ready. - # > USER anonymous - # < 331 Guest login ok, send ident as password. - # > PASS curl_by_daniel@haxx.se - # < 230 Guest login ok, access restrictions apply. - # * We have successfully logged in - # * Connected to pm1 (193.15.23.1) - # > PASV - # < 227 Entering Passive Mode (193,15,23,1,231,59) - # * Connecting to pm1 (193.15.23.1) port 59195 - # > TYPE A - # < 200 Type set to A. - # > LIST - # < 150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 bytes). - # * Getting file with size: -1 - - # flush data: - $| = 1; - - print "220-running the curl suite test server\r\n", - "220-running the curl suite test server\r\n", - "220 running the curl suite test server\r\n"; - - my $state="fresh"; - - while(1) { - - last unless defined ($_ = ); - - # Remove trailing CRLF. - s/[\n\r]+$//; - - unless (m/^([A-Z]{3,4})\s?(.*)/i) - { - print STDERR - "badly formed command received: ".$_; - exit 0; - } - my $FTPCMD=$1; - my $FTPARG=$2; - my $full=$_; - - print STDERR "GOT: ($1) $_\n"; - - my $ok = $commandok{$FTPCMD}; - if($ok !~ /$state/) { - print "314 $FTPCMD not OK ($ok) in state: $state!\r\n"; - exit; - } - - $state=$statechange{$FTPCMD}; - if($state eq "") { - print "314 Wwwwweeeeird internal error state: $state\r\n"; - exit; - } - - # see if the new state is a function caller. - my $func = $commandfunc{$FTPCMD}; - if($func) { - # it is! - spawn \&$func($FTPARG); - } - - print STDERR "gone to state $state\n"; - - my $text = $displaytext{$FTPCMD}; - print "$text\r\n"; - } - exit; - } - # otherwise, we're doing HTTP - my @headers; while() { if($_ =~ /([A-Z]*) (.*) HTTP\/1.(\d)/) { -- cgit v1.2.3