package main import ( "crypto/tls" "io" "log" "net" "net/url" "strings" ) func serveProxy(c net.Conn, request *url.URL, proxyURL string) { original := proxyURL tlsConfig := &tls.Config{} if strings.HasPrefix(proxyURL, "gemini://") { proxyURL = proxyURL[9:] } else if strings.HasPrefix(proxyURL, "gemini-insecure://") { proxyURL = proxyURL[18:] tlsConfig.InsecureSkipVerify = true } proxy, err := tls.Dial("tcp", proxyURL, tlsConfig) if err != nil { writeStatus(c, statusProxyError) return } defer proxy.Close() // Forward request proxy.Write([]byte(request.String())) proxy.Write([]byte("\r\n")) // Forward response io.Copy(c, proxy) if verbose { log.Printf("< %s\n", original) } }