xref: /aosp_15_r20/external/curl/tests/http-server.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
25*6236dae4SAndroid Build Coastguard Worker
26*6236dae4SAndroid Build Coastguard Workeruse strict;
27*6236dae4SAndroid Build Coastguard Workeruse warnings;
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard WorkerBEGIN {
30*6236dae4SAndroid Build Coastguard Worker    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
31*6236dae4SAndroid Build Coastguard Worker    push(@INC, ".");
32*6236dae4SAndroid Build Coastguard Worker}
33*6236dae4SAndroid Build Coastguard Worker
34*6236dae4SAndroid Build Coastguard Workeruse File::Basename;
35*6236dae4SAndroid Build Coastguard Worker
36*6236dae4SAndroid Build Coastguard Workeruse serverhelp qw(
37*6236dae4SAndroid Build Coastguard Worker    server_pidfilename
38*6236dae4SAndroid Build Coastguard Worker    server_logfilename
39*6236dae4SAndroid Build Coastguard Worker    );
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Workeruse pathhelp qw(
42*6236dae4SAndroid Build Coastguard Worker    exe_ext
43*6236dae4SAndroid Build Coastguard Worker    );
44*6236dae4SAndroid Build Coastguard Worker
45*6236dae4SAndroid Build Coastguard Workermy $verbose = 0;     # set to 1 for debugging
46*6236dae4SAndroid Build Coastguard Workermy $port = 8990;     # just a default
47*6236dae4SAndroid Build Coastguard Workermy $unix_socket;     # location to place a listening Unix socket
48*6236dae4SAndroid Build Coastguard Workermy $ipvnum = 4;      # default IP version of http server
49*6236dae4SAndroid Build Coastguard Workermy $idnum = 1;       # default http server instance number
50*6236dae4SAndroid Build Coastguard Workermy $proto = 'http';  # protocol the http server speaks
51*6236dae4SAndroid Build Coastguard Workermy $pidfile;         # pid file
52*6236dae4SAndroid Build Coastguard Workermy $portfile;        # port number file
53*6236dae4SAndroid Build Coastguard Workermy $logfile;         # log file
54*6236dae4SAndroid Build Coastguard Workermy $cmdfile;         # command file
55*6236dae4SAndroid Build Coastguard Workermy $connect;         # IP to connect to on CONNECT
56*6236dae4SAndroid Build Coastguard Workermy $keepalive_secs;  # number of seconds to keep idle connections
57*6236dae4SAndroid Build Coastguard Workermy $srcdir;
58*6236dae4SAndroid Build Coastguard Workermy $gopher = 0;
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Workermy $flags  = "";
61*6236dae4SAndroid Build Coastguard Workermy $path   = '.';
62*6236dae4SAndroid Build Coastguard Workermy $logdir = $path .'/log';
63*6236dae4SAndroid Build Coastguard Workermy $piddir;
64*6236dae4SAndroid Build Coastguard Worker
65*6236dae4SAndroid Build Coastguard Workerwhile(@ARGV) {
66*6236dae4SAndroid Build Coastguard Worker    if($ARGV[0] eq '--pidfile') {
67*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
68*6236dae4SAndroid Build Coastguard Worker            $pidfile = $ARGV[1];
69*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
70*6236dae4SAndroid Build Coastguard Worker        }
71*6236dae4SAndroid Build Coastguard Worker    }
72*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--portfile') {
73*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
74*6236dae4SAndroid Build Coastguard Worker            $portfile = $ARGV[1];
75*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
76*6236dae4SAndroid Build Coastguard Worker        }
77*6236dae4SAndroid Build Coastguard Worker    }
78*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--config') {
79*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
80*6236dae4SAndroid Build Coastguard Worker            $cmdfile = $ARGV[1];
81*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
82*6236dae4SAndroid Build Coastguard Worker        }
83*6236dae4SAndroid Build Coastguard Worker    }
84*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--logfile') {
85*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
86*6236dae4SAndroid Build Coastguard Worker            $logfile = $ARGV[1];
87*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
88*6236dae4SAndroid Build Coastguard Worker        }
89*6236dae4SAndroid Build Coastguard Worker    }
90*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--logdir') {
91*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
92*6236dae4SAndroid Build Coastguard Worker            $logdir = $ARGV[1];
93*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
94*6236dae4SAndroid Build Coastguard Worker        }
95*6236dae4SAndroid Build Coastguard Worker    }
96*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--srcdir') {
97*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
98*6236dae4SAndroid Build Coastguard Worker            $srcdir = $ARGV[1];
99*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
100*6236dae4SAndroid Build Coastguard Worker        }
101*6236dae4SAndroid Build Coastguard Worker    }
102*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--ipv4') {
103*6236dae4SAndroid Build Coastguard Worker        $ipvnum = 4;
104*6236dae4SAndroid Build Coastguard Worker    }
105*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--ipv6') {
106*6236dae4SAndroid Build Coastguard Worker        $ipvnum = 6;
107*6236dae4SAndroid Build Coastguard Worker    }
108*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--unix-socket') {
109*6236dae4SAndroid Build Coastguard Worker        $ipvnum = 'unix';
110*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
111*6236dae4SAndroid Build Coastguard Worker            $unix_socket = $ARGV[1];
112*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
113*6236dae4SAndroid Build Coastguard Worker        }
114*6236dae4SAndroid Build Coastguard Worker    }
115*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--gopher') {
116*6236dae4SAndroid Build Coastguard Worker        $gopher = 1;
117*6236dae4SAndroid Build Coastguard Worker    }
118*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--port') {
119*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1] =~ /^(\d+)$/) {
120*6236dae4SAndroid Build Coastguard Worker            $port = $1;
121*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
122*6236dae4SAndroid Build Coastguard Worker        }
123*6236dae4SAndroid Build Coastguard Worker    }
124*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--connect') {
125*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
126*6236dae4SAndroid Build Coastguard Worker            $connect = $ARGV[1];
127*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
128*6236dae4SAndroid Build Coastguard Worker        }
129*6236dae4SAndroid Build Coastguard Worker    }
130*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--keepalive') {
131*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
132*6236dae4SAndroid Build Coastguard Worker            $keepalive_secs = $ARGV[1];
133*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
134*6236dae4SAndroid Build Coastguard Worker        }
135*6236dae4SAndroid Build Coastguard Worker    }
136*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--id') {
137*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1] =~ /^(\d+)$/) {
138*6236dae4SAndroid Build Coastguard Worker            $idnum = $1 if($1 > 0);
139*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
140*6236dae4SAndroid Build Coastguard Worker        }
141*6236dae4SAndroid Build Coastguard Worker    }
142*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--verbose') {
143*6236dae4SAndroid Build Coastguard Worker        $verbose = 1;
144*6236dae4SAndroid Build Coastguard Worker    }
145*6236dae4SAndroid Build Coastguard Worker    else {
146*6236dae4SAndroid Build Coastguard Worker        print STDERR "\nWarning: http-server.pl unknown parameter: $ARGV[0]\n";
147*6236dae4SAndroid Build Coastguard Worker    }
148*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
149*6236dae4SAndroid Build Coastguard Worker}
150*6236dae4SAndroid Build Coastguard Worker
151*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
152*6236dae4SAndroid Build Coastguard Worker# Initialize command line option dependent variables
153*6236dae4SAndroid Build Coastguard Worker#
154*6236dae4SAndroid Build Coastguard Worker
155*6236dae4SAndroid Build Coastguard Workerif($pidfile) {
156*6236dae4SAndroid Build Coastguard Worker    # Use our pidfile directory to store the other pidfiles
157*6236dae4SAndroid Build Coastguard Worker    $piddir = dirname($pidfile);
158*6236dae4SAndroid Build Coastguard Worker}
159*6236dae4SAndroid Build Coastguard Workerelse {
160*6236dae4SAndroid Build Coastguard Worker    # Use the current directory to store all the pidfiles
161*6236dae4SAndroid Build Coastguard Worker    $piddir = $path;
162*6236dae4SAndroid Build Coastguard Worker    $pidfile = server_pidfilename($piddir, $proto, $ipvnum, $idnum);
163*6236dae4SAndroid Build Coastguard Worker}
164*6236dae4SAndroid Build Coastguard Workerif(!$portfile) {
165*6236dae4SAndroid Build Coastguard Worker    $portfile = server_portfilename($piddir, $proto, $ipvnum, $idnum);
166*6236dae4SAndroid Build Coastguard Worker}
167*6236dae4SAndroid Build Coastguard Workerif(!$srcdir) {
168*6236dae4SAndroid Build Coastguard Worker    $srcdir = $ENV{'srcdir'} || '.';
169*6236dae4SAndroid Build Coastguard Worker}
170*6236dae4SAndroid Build Coastguard Workerif(!$logfile) {
171*6236dae4SAndroid Build Coastguard Worker    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
172*6236dae4SAndroid Build Coastguard Worker}
173*6236dae4SAndroid Build Coastguard Worker
174*6236dae4SAndroid Build Coastguard Worker$flags .= "--pidfile \"$pidfile\" ".
175*6236dae4SAndroid Build Coastguard Worker    "--cmdfile \"$cmdfile\" ".
176*6236dae4SAndroid Build Coastguard Worker    "--logfile \"$logfile\" ".
177*6236dae4SAndroid Build Coastguard Worker    "--logdir \"$logdir\" ".
178*6236dae4SAndroid Build Coastguard Worker    "--portfile \"$portfile\" ";
179*6236dae4SAndroid Build Coastguard Worker$flags .= "--gopher " if($gopher);
180*6236dae4SAndroid Build Coastguard Worker$flags .= "--connect $connect " if($connect);
181*6236dae4SAndroid Build Coastguard Worker$flags .= "--keepalive $keepalive_secs " if($keepalive_secs);
182*6236dae4SAndroid Build Coastguard Workerif($ipvnum eq 'unix') {
183*6236dae4SAndroid Build Coastguard Worker    $flags .= "--unix-socket '$unix_socket' ";
184*6236dae4SAndroid Build Coastguard Worker} else {
185*6236dae4SAndroid Build Coastguard Worker    $flags .= "--ipv$ipvnum --port $port ";
186*6236dae4SAndroid Build Coastguard Worker}
187*6236dae4SAndroid Build Coastguard Worker$flags .= "--srcdir \"$srcdir\"";
188*6236dae4SAndroid Build Coastguard Worker
189*6236dae4SAndroid Build Coastguard Workerif($verbose) {
190*6236dae4SAndroid Build Coastguard Worker    print STDERR "RUN: server/sws".exe_ext('SRV')." $flags\n";
191*6236dae4SAndroid Build Coastguard Worker}
192*6236dae4SAndroid Build Coastguard Worker
193*6236dae4SAndroid Build Coastguard Worker$| = 1;
194*6236dae4SAndroid Build Coastguard Workerexec("exec server/sws".exe_ext('SRV')." $flags");
195