File: http.go

package info (click to toggle)
golang-v2ray-core 4.34.0%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,100 kB
  • sloc: sh: 404; makefile: 50; asm: 38
file content (40 lines) | stat: -rw-r--r-- 795 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package tcp

import (
	"net/http"

	"v2ray.com/core/common/net"
)

type Server struct {
	Port        net.Port
	PathHandler map[string]http.HandlerFunc
	server      *http.Server
}

func (s *Server) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
	if req.URL.Path == "/" {
		resp.Header().Set("Content-Type", "text/plain; charset=utf-8")
		resp.WriteHeader(http.StatusOK)
		resp.Write([]byte("Home"))
		return
	}

	handler, found := s.PathHandler[req.URL.Path]
	if found {
		handler(resp, req)
	}
}

func (s *Server) Start() (net.Destination, error) {
	s.server = &http.Server{
		Addr:    "127.0.0.1:" + s.Port.String(),
		Handler: s,
	}
	go s.server.ListenAndServe()
	return net.TCPDestination(net.LocalHostIP, s.Port), nil
}

func (s *Server) Close() error {
	return s.server.Close()
}