Browse Source

unfinished http proxy

Darien Raymond 10 years ago
parent
commit
05caf04eee
3 changed files with 36 additions and 15 deletions
  1. 4 0
      proxy/http/config.go
  2. 32 15
      proxy/http/http.go
  3. 0 0
      proxy/http/json/json.go

+ 4 - 0
proxy/http/config.go

@@ -0,0 +1,4 @@
+package http
+
+type Config interface {
+}

+ 32 - 15
proxy/http/http.go

@@ -2,36 +2,53 @@ package http
 
 import (
 	"net"
-	// "net/http"
+	"net/http"
+	"strings"
 
 	"github.com/v2ray/v2ray-core/app"
-	"github.com/v2ray/v2ray-core/common/log"
+	_ "github.com/v2ray/v2ray-core/common/log"
 	v2net "github.com/v2ray/v2ray-core/common/net"
-	jsonconfig "github.com/v2ray/v2ray-core/proxy/http/config/json"
 )
 
 type HttpProxyServer struct {
 	accepting  bool
 	dispatcher app.PacketDispatcher
-	config     *jsonconfig.HttpProxyConfig
+	config     Config
 }
 
-func NewHttpProxyServer(dispatcher app.PacketDispatcher, config *jsonconfig.HttpProxyConfig) *HttpProxyServer {
+func NewHttpProxyServer(dispatcher app.PacketDispatcher, config Config) *HttpProxyServer {
 	return &HttpProxyServer{
 		dispatcher: dispatcher,
 		config:     config,
 	}
 }
 
-func (server *HttpProxyServer) Listen(port v2net.Port) error {
-	_, err := net.ListenTCP("tcp", &net.TCPAddr{
-		IP:   []byte{0, 0, 0, 0},
-		Port: int(port),
-		Zone: "",
-	})
-	if err != nil {
-		log.Error("HTTP Proxy failed to listen on port %d: %v", port, err)
-		return err
+func (this *HttpProxyServer) Listen(port v2net.Port) error {
+	server := http.Server{
+		Addr:    ":" + port.String(),
+		Handler: this,
 	}
-	return nil
+	return server.ListenAndServe()
+}
+
+func (this *HttpProxyServer) ServeHTTP(w http.ResponseWriter, request *http.Request) {
+	if strings.ToUpper(request.Method) == "CONNECT" {
+		host, port, err := net.SplitHostPort(request.URL.Host)
+		if err != nil {
+			if strings.Contains(err.(*net.AddrError).Err, "missing port") {
+				host = request.URL.Host
+				port = "80"
+			} else {
+				http.Error(w, "Bad Request", 400)
+				return
+			}
+		}
+		_ = host + port
+	} else {
+
+	}
+}
+
+func (this *HttpProxyServer) handleConnect(response http.ResponseWriter, request *http.Request) {
+
 }

+ 0 - 0
proxy/http/config/json/json.go → proxy/http/json/json.go