xref: /aosp_15_r20/external/curl/tests/http2-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 Worker# This script invokes nghttpx properly to have it serve HTTP/2 for us.
27*6236dae4SAndroid Build Coastguard Worker# nghttpx runs as a proxy in front of our "actual" HTTP/1 server.
28*6236dae4SAndroid Build Coastguard Workeruse Cwd;
29*6236dae4SAndroid Build Coastguard Workeruse Cwd 'abs_path';
30*6236dae4SAndroid Build Coastguard Workeruse File::Basename;
31*6236dae4SAndroid Build Coastguard Worker
32*6236dae4SAndroid Build Coastguard Workermy $logdir = "log";
33*6236dae4SAndroid Build Coastguard Workermy $pidfile = "$logdir/nghttpx.pid";
34*6236dae4SAndroid Build Coastguard Workermy $logfile = "$logdir/http2.log";
35*6236dae4SAndroid Build Coastguard Workermy $nghttpx = "nghttpx";
36*6236dae4SAndroid Build Coastguard Workermy $listenport = 9015;
37*6236dae4SAndroid Build Coastguard Workermy $listenport2 = 9016;
38*6236dae4SAndroid Build Coastguard Workermy $connect = "127.0.0.1,8990";
39*6236dae4SAndroid Build Coastguard Workermy $conf = "nghttpx.conf";
40*6236dae4SAndroid Build Coastguard Workermy $cert = "Server-localhost-sv";
41*6236dae4SAndroid Build Coastguard Workermy $dev_null = ($^O eq 'MSWin32' ? 'NUL' : '/dev/null');
42*6236dae4SAndroid Build Coastguard Worker
43*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
44*6236dae4SAndroid Build Coastguard Worker# Process command line options
45*6236dae4SAndroid Build Coastguard Worker#
46*6236dae4SAndroid Build Coastguard Workerwhile(@ARGV) {
47*6236dae4SAndroid Build Coastguard Worker    if($ARGV[0] eq '--verbose') {
48*6236dae4SAndroid Build Coastguard Worker        $verbose = 1;
49*6236dae4SAndroid Build Coastguard Worker    }
50*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--pidfile') {
51*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
52*6236dae4SAndroid Build Coastguard Worker            $pidfile = $ARGV[1];
53*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
54*6236dae4SAndroid Build Coastguard Worker        }
55*6236dae4SAndroid Build Coastguard Worker    }
56*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--nghttpx') {
57*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
58*6236dae4SAndroid Build Coastguard Worker            $nghttpx = $ARGV[1];
59*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
60*6236dae4SAndroid Build Coastguard Worker        }
61*6236dae4SAndroid Build Coastguard Worker    }
62*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--port') {
63*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
64*6236dae4SAndroid Build Coastguard Worker            $listenport = $ARGV[1];
65*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
66*6236dae4SAndroid Build Coastguard Worker        }
67*6236dae4SAndroid Build Coastguard Worker    }
68*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--port2') {
69*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
70*6236dae4SAndroid Build Coastguard Worker            $listenport2 = $ARGV[1];
71*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
72*6236dae4SAndroid Build Coastguard Worker        }
73*6236dae4SAndroid Build Coastguard Worker    }
74*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--connect') {
75*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
76*6236dae4SAndroid Build Coastguard Worker            $connect = $ARGV[1];
77*6236dae4SAndroid Build Coastguard Worker            $connect =~ s/:/,/;
78*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
79*6236dae4SAndroid Build Coastguard Worker        }
80*6236dae4SAndroid Build Coastguard Worker    }
81*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--logfile') {
82*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
83*6236dae4SAndroid Build Coastguard Worker            $logfile = $ARGV[1];
84*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
85*6236dae4SAndroid Build Coastguard Worker        }
86*6236dae4SAndroid Build Coastguard Worker    }
87*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--logdir') {
88*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
89*6236dae4SAndroid Build Coastguard Worker            $logdir = $ARGV[1];
90*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
91*6236dae4SAndroid Build Coastguard Worker        }
92*6236dae4SAndroid Build Coastguard Worker    }
93*6236dae4SAndroid Build Coastguard Worker    elsif($ARGV[0] eq '--conf') {
94*6236dae4SAndroid Build Coastguard Worker        if($ARGV[1]) {
95*6236dae4SAndroid Build Coastguard Worker            $conf = $ARGV[1];
96*6236dae4SAndroid Build Coastguard Worker            shift @ARGV;
97*6236dae4SAndroid Build Coastguard Worker        }
98*6236dae4SAndroid Build Coastguard Worker    }
99*6236dae4SAndroid Build Coastguard Worker    else {
100*6236dae4SAndroid Build Coastguard Worker        print STDERR "\nWarning: http2-server.pl unknown parameter: $ARGV[0]\n";
101*6236dae4SAndroid Build Coastguard Worker    }
102*6236dae4SAndroid Build Coastguard Worker    shift @ARGV;
103*6236dae4SAndroid Build Coastguard Worker}
104*6236dae4SAndroid Build Coastguard Worker
105*6236dae4SAndroid Build Coastguard Workermy $srcdir = dirname(__FILE__);
106*6236dae4SAndroid Build Coastguard Worker$certfile = "$srcdir/certs/$cert.pem";
107*6236dae4SAndroid Build Coastguard Worker$keyfile = "$srcdir/certs/$cert.key";
108*6236dae4SAndroid Build Coastguard Worker$certfile = abs_path($certfile);
109*6236dae4SAndroid Build Coastguard Worker$keyfile = abs_path($keyfile);
110*6236dae4SAndroid Build Coastguard Worker
111*6236dae4SAndroid Build Coastguard Workermy $cmdline="$nghttpx --backend=$connect ".
112*6236dae4SAndroid Build Coastguard Worker    "--backend-keep-alive-timeout=500ms ".
113*6236dae4SAndroid Build Coastguard Worker    "--frontend=\"*,$listenport;no-tls\" ".
114*6236dae4SAndroid Build Coastguard Worker    "--frontend=\"*,$listenport2\" ".
115*6236dae4SAndroid Build Coastguard Worker    "--log-level=INFO ".
116*6236dae4SAndroid Build Coastguard Worker    "--pid-file=$pidfile ".
117*6236dae4SAndroid Build Coastguard Worker    "--conf=$conf ".
118*6236dae4SAndroid Build Coastguard Worker    "--errorlog-file=$logfile ".
119*6236dae4SAndroid Build Coastguard Worker    "$keyfile $certfile";
120*6236dae4SAndroid Build Coastguard Workerprint "RUN: $cmdline\n" if($verbose);
121*6236dae4SAndroid Build Coastguard Workerexec("exec $cmdline 2>$dev_null");
122