|
|
@@ -110,10 +110,10 @@ func (this *Server) handleConnection(conn *hub.Connection) {
|
|
|
|
|
|
request, err := http.ReadRequest(reader)
|
|
|
if err != nil {
|
|
|
- log.Warning("Failed to read http request: ", err)
|
|
|
+ log.Warning("HTTP: Failed to read http request: ", err)
|
|
|
return
|
|
|
}
|
|
|
- log.Info("Request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]")
|
|
|
+ log.Info("HTTP: Request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]")
|
|
|
defaultPort := v2net.Port(80)
|
|
|
if strings.ToLower(request.URL.Scheme) == "https" {
|
|
|
defaultPort = v2net.Port(443)
|
|
|
@@ -124,7 +124,7 @@ func (this *Server) handleConnection(conn *hub.Connection) {
|
|
|
}
|
|
|
dest, err := parseHost(host, defaultPort)
|
|
|
if err != nil {
|
|
|
- log.Warning("Malformed proxy host (", host, "): ", err)
|
|
|
+ log.Warning("HTTP: Malformed proxy host (", host, "): ", err)
|
|
|
return
|
|
|
}
|
|
|
if strings.ToUpper(request.Method) == "CONNECT" {
|
|
|
@@ -205,21 +205,25 @@ func StripHopByHopHeaders(request *http.Request) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func (this *Server) GenerateResponse(statusCode int, status string) *http.Response {
|
|
|
+ hdr := http.Header(make(map[string][]string))
|
|
|
+ hdr.Set("Connection", "close")
|
|
|
+ return &http.Response{
|
|
|
+ Status: status,
|
|
|
+ StatusCode: statusCode,
|
|
|
+ Proto: "HTTP/1.1",
|
|
|
+ ProtoMajor: 1,
|
|
|
+ ProtoMinor: 1,
|
|
|
+ Header: hdr,
|
|
|
+ Body: nil,
|
|
|
+ ContentLength: 0,
|
|
|
+ Close: false,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func (this *Server) handlePlainHTTP(request *http.Request, dest v2net.Destination, reader *bufio.Reader, writer io.Writer) {
|
|
|
if len(request.URL.Host) <= 0 {
|
|
|
- hdr := http.Header(make(map[string][]string))
|
|
|
- hdr.Set("Connection", "close")
|
|
|
- response := &http.Response{
|
|
|
- Status: "400 Bad Request",
|
|
|
- StatusCode: 400,
|
|
|
- Proto: "HTTP/1.1",
|
|
|
- ProtoMajor: 1,
|
|
|
- ProtoMinor: 1,
|
|
|
- Header: hdr,
|
|
|
- Body: nil,
|
|
|
- ContentLength: 0,
|
|
|
- Close: false,
|
|
|
- }
|
|
|
+ response := this.GenerateResponse(400, "Bad Request")
|
|
|
|
|
|
buffer := alloc.NewSmallBuffer().Clear()
|
|
|
response.Write(buffer)
|
|
|
@@ -255,7 +259,7 @@ func (this *Server) handlePlainHTTP(request *http.Request, dest v2net.Destinatio
|
|
|
response, err := http.ReadResponse(responseReader, request)
|
|
|
if err != nil {
|
|
|
log.Warning("HTTP: Failed to read response: ", err)
|
|
|
- return
|
|
|
+ response = this.GenerateResponse(503, "Service Unavailable")
|
|
|
}
|
|
|
responseWriter := v2io.NewBufferedWriter(writer)
|
|
|
err = response.Write(responseWriter)
|