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