github.com/MerlinKodo/quic-go@v0.39.2/interop/server/main.go (about)

     1  package main
     2  
     3  import (
     4  	"crypto/tls"
     5  	"fmt"
     6  	"log"
     7  	"net"
     8  	"net/http"
     9  	"os"
    10  
    11  	"github.com/MerlinKodo/quic-go"
    12  	"github.com/MerlinKodo/quic-go/http3"
    13  	"github.com/MerlinKodo/quic-go/internal/qtls"
    14  	"github.com/MerlinKodo/quic-go/interop/http09"
    15  	"github.com/MerlinKodo/quic-go/interop/utils"
    16  )
    17  
    18  var tlsConf *tls.Config
    19  
    20  func main() {
    21  	logFile, err := os.Create("/logs/log.txt")
    22  	if err != nil {
    23  		fmt.Printf("Could not create log file: %s\n", err.Error())
    24  		os.Exit(1)
    25  	}
    26  	defer logFile.Close()
    27  	log.SetOutput(logFile)
    28  
    29  	keyLog, err := utils.GetSSLKeyLog()
    30  	if err != nil {
    31  		fmt.Printf("Could not create key log: %s\n", err.Error())
    32  		os.Exit(1)
    33  	}
    34  	if keyLog != nil {
    35  		defer keyLog.Close()
    36  	}
    37  
    38  	testcase := os.Getenv("TESTCASE")
    39  
    40  	quicConf := &quic.Config{
    41  		RequireAddressValidation: func(net.Addr) bool { return testcase == "retry" },
    42  		Allow0RTT:                testcase == "zerortt",
    43  		Tracer:                   utils.NewQLOGConnectionTracer,
    44  	}
    45  	cert, err := tls.LoadX509KeyPair("/certs/cert.pem", "/certs/priv.key")
    46  	if err != nil {
    47  		fmt.Println(err)
    48  		os.Exit(1)
    49  	}
    50  	tlsConf = &tls.Config{
    51  		Certificates: []tls.Certificate{cert},
    52  		KeyLogWriter: keyLog,
    53  	}
    54  
    55  	switch testcase {
    56  	case "versionnegotiation", "handshake", "retry", "transfer", "resumption", "multiconnect", "zerortt":
    57  		err = runHTTP09Server(quicConf)
    58  	case "chacha20":
    59  		reset := qtls.SetCipherSuite(tls.TLS_CHACHA20_POLY1305_SHA256)
    60  		defer reset()
    61  		err = runHTTP09Server(quicConf)
    62  	case "http3":
    63  		err = runHTTP3Server(quicConf)
    64  	default:
    65  		fmt.Printf("unsupported test case: %s\n", testcase)
    66  		os.Exit(127)
    67  	}
    68  
    69  	if err != nil {
    70  		fmt.Printf("Error running server: %s\n", err.Error())
    71  		os.Exit(1)
    72  	}
    73  }
    74  
    75  func runHTTP09Server(quicConf *quic.Config) error {
    76  	server := http09.Server{
    77  		Server: &http.Server{
    78  			Addr:      ":443",
    79  			TLSConfig: tlsConf,
    80  		},
    81  		QuicConfig: quicConf,
    82  	}
    83  	http.DefaultServeMux.Handle("/", http.FileServer(http.Dir("/www")))
    84  	return server.ListenAndServe()
    85  }
    86  
    87  func runHTTP3Server(quicConf *quic.Config) error {
    88  	server := http3.Server{
    89  		Addr:       ":443",
    90  		TLSConfig:  tlsConf,
    91  		QuicConfig: quicConf,
    92  	}
    93  	http.DefaultServeMux.Handle("/", http.FileServer(http.Dir("/www")))
    94  	return server.ListenAndServe()
    95  }