mirror of
https://git.phreedom.club/localhost_frssoft/compy.git
synced 2024-11-05 16:03:19 +00:00
47488248d2
Fixes panic due to unimplemented method when the stdlib http server calls this under certain conditions. For our mitm implementation of net.Conn, an empty address string should be sufficient.
75 lines
1.1 KiB
Go
75 lines
1.1 KiB
Go
package proxy
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type mitmConn struct {
|
|
w FlushWriter
|
|
r io.Reader
|
|
remoteAddr addr
|
|
closed chan struct{}
|
|
}
|
|
|
|
type FlushWriter interface {
|
|
io.Writer
|
|
http.Flusher
|
|
}
|
|
|
|
func newMitmConn(w FlushWriter, r io.Reader, remoteAddr string) *mitmConn {
|
|
return &mitmConn{
|
|
w: w,
|
|
r: r,
|
|
remoteAddr: addr(remoteAddr),
|
|
closed: make(chan struct{}),
|
|
}
|
|
}
|
|
|
|
func (c *mitmConn) Read(b []byte) (int, error) {
|
|
return c.r.Read(b)
|
|
}
|
|
|
|
func (c *mitmConn) Write(b []byte) (int, error) {
|
|
n, err := c.w.Write(b)
|
|
c.w.Flush()
|
|
return n, err
|
|
}
|
|
|
|
func (c *mitmConn) Close() error {
|
|
close(c.closed)
|
|
return nil
|
|
}
|
|
|
|
func (c *mitmConn) RemoteAddr() net.Addr {
|
|
return c.remoteAddr
|
|
}
|
|
|
|
func (c *mitmConn) LocalAddr() net.Addr {
|
|
return addr("")
|
|
}
|
|
|
|
func (c *mitmConn) SetDeadline(t time.Time) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *mitmConn) SetReadDeadline(t time.Time) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *mitmConn) SetWriteDeadline(t time.Time) error {
|
|
return nil
|
|
}
|
|
|
|
type addr string
|
|
|
|
func (a addr) String() string {
|
|
return string(a)
|
|
}
|
|
|
|
func (a addr) Network() string {
|
|
return "tcp"
|
|
}
|