(w http.ResponseWriter, r *http.Request)
| 146 | } |
| 147 | |
| 148 | func (s *WSServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| 149 | conn, err := upgrader.Upgrade(w, r, nil) |
| 150 | if err != nil { |
| 151 | return |
| 152 | } |
| 153 | c := conn.UnderlyingConn() |
| 154 | defer c.Close() |
| 155 | from := c.RemoteAddr().String() |
| 156 | if s.XForwardedFor && r.Header.Get("X-Forwarded-For") != "" { |
| 157 | s1 := strings.Split(r.Header.Get("X-Forwarded-For"), ", ")[0] |
| 158 | h, _, err := net.SplitHostPort(s1) |
| 159 | if err != nil { |
| 160 | h = s1 |
| 161 | } |
| 162 | if net.ParseIP(h) != nil { |
| 163 | _, p, err := net.SplitHostPort(from) |
| 164 | if err == nil { |
| 165 | from = net.JoinHostPort(h, p) |
| 166 | } |
| 167 | } |
| 168 | } |
| 169 | var ss Exchanger |
| 170 | if !s.WithoutBrook { |
| 171 | ss, err = NewStreamServer(s.Password, from, c, s.TCPTimeout, s.UDPTimeout) |
| 172 | } |
| 173 | if s.WithoutBrook { |
| 174 | ss, err = NewSimpleStreamServer(s.Password, from, c, s.TCPTimeout, s.UDPTimeout) |
| 175 | } |
| 176 | if err != nil { |
| 177 | Log(Error{"from": from, "error": err.Error()}) |
| 178 | return |
| 179 | } |
| 180 | defer ss.Clean() |
| 181 | if ss.Network() == "tcp" { |
| 182 | if err := s.TCPHandle(ss); err != nil { |
| 183 | Log(Error{"from": from, "dst": ss.Dst(), "error": err.Error()}) |
| 184 | } |
| 185 | } |
| 186 | if ss.Network() == "udp" { |
| 187 | if err := s.UDPHandle(ss); err != nil { |
| 188 | Log(Error{"from": from, "dst": ss.Dst(), "error": err.Error()}) |
| 189 | } |
| 190 | } |
| 191 | } |
| 192 | |
| 193 | func (s *WSServer) TCPHandle(ss Exchanger) error { |
| 194 | rc, err := DialTCP("tcp", "", ss.Dst()) |
nothing calls this directly
no test coverage detected