forked from tslocum/twins
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
667 B
33 lines
667 B
package main |
|
|
|
import ( |
|
"crypto/tls" |
|
"io" |
|
"net" |
|
"net/url" |
|
"strings" |
|
) |
|
|
|
func serveProxy(c net.Conn, request *url.URL, proxyURL string) int { |
|
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 { |
|
return writeStatus(c, statusProxyError) |
|
} |
|
defer proxy.Close() |
|
|
|
// Forward request |
|
proxy.Write([]byte(request.String())) |
|
proxy.Write([]byte(newLine)) |
|
|
|
// Forward response |
|
io.Copy(c, proxy) |
|
|
|
return statusSuccess |
|
}
|
|
|