MCPcopy
hub / github.com/txthinking/brook / ServeHTTP

Method ServeHTTP

wsserver.go:148–191  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

146}
147
148func (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
193func (s *WSServer) TCPHandle(ss Exchanger) error {
194 rc, err := DialTCP("tcp", "", ss.Dst())

Callers

nothing calls this directly

Calls 11

CleanMethod · 0.95
NetworkMethod · 0.95
TCPHandleMethod · 0.95
DstMethod · 0.95
UDPHandleMethod · 0.95
NewStreamServerFunction · 0.85
NewSimpleStreamServerFunction · 0.85
GetMethod · 0.80
ErrorMethod · 0.80
CloseMethod · 0.45
RemoteAddrMethod · 0.45

Tested by

no test coverage detected