add local/remote ip to socket

This commit is contained in:
Asim Aslam 2018-11-14 19:41:13 +00:00
parent a0b257b572
commit 71bacf6991
3 changed files with 59 additions and 14 deletions

View File

@ -40,6 +40,10 @@ type httpTransportClient struct {
r chan *http.Request r chan *http.Request
bl []*http.Request bl []*http.Request
buff *bufio.Reader buff *bufio.Reader
// local/remote ip
local string
remote string
} }
type httpTransportSocket struct { type httpTransportSocket struct {
@ -51,6 +55,10 @@ type httpTransportSocket struct {
conn net.Conn conn net.Conn
// for the first request // for the first request
ch chan *http.Request ch chan *http.Request
// local/remote ip
local string
remote string
} }
type httpTransportListener struct { type httpTransportListener struct {
@ -62,6 +70,14 @@ func (b *buffer) Close() error {
return nil return nil
} }
func (h *httpTransportClient) Local() string {
return h.local
}
func (h *httpTransportClient) Remote() string {
return h.remote
}
func (h *httpTransportClient) Send(m *Message) error { func (h *httpTransportClient) Send(m *Message) error {
header := make(http.Header) header := make(http.Header)
@ -173,6 +189,14 @@ func (h *httpTransportClient) Close() error {
return err return err
} }
func (h *httpTransportSocket) Local() string {
return h.local
}
func (h *httpTransportSocket) Remote() string {
return h.remote
}
func (h *httpTransportSocket) Recv(m *Message) error { func (h *httpTransportSocket) Recv(m *Message) error {
if m == nil { if m == nil {
return errors.New("message passed in is nil") return errors.New("message passed in is nil")
@ -368,12 +392,14 @@ func (h *httpTransportListener) Accept(fn func(Socket)) error {
ch <- r ch <- r
fn(&httpTransportSocket{ fn(&httpTransportSocket{
ht: h.ht, ht: h.ht,
w: w, w: w,
r: r, r: r,
rw: buf, rw: buf,
ch: ch, ch: ch,
conn: con, conn: con,
local: h.Addr(),
remote: r.RemoteAddr,
}) })
}) })
@ -430,6 +456,8 @@ func (h *httpTransport) Dial(addr string, opts ...DialOption) (Client, error) {
buff: bufio.NewReader(conn), buff: bufio.NewReader(conn),
dialOpts: dopts, dialOpts: dopts,
r: make(chan *http.Request, 1), r: make(chan *http.Request, 1),
local: conn.LocalAddr().String(),
remote: conn.RemoteAddr().String(),
}, nil }, nil
} }

View File

@ -18,6 +18,9 @@ type mockSocket struct {
exit chan bool exit chan bool
// listener exit // listener exit
lexit chan bool lexit chan bool
local string
remote string
} }
type mockClient struct { type mockClient struct {
@ -51,6 +54,14 @@ func (ms *mockSocket) Recv(m *transport.Message) error {
return nil return nil
} }
func (ms *mockSocket) Local() string {
return ms.local
}
func (ms *mockSocket) Remote() string {
return ms.remote
}
func (ms *mockSocket) Send(m *transport.Message) error { func (ms *mockSocket) Send(m *transport.Message) error {
select { select {
case <-ms.exit: case <-ms.exit:
@ -93,10 +104,12 @@ func (m *mockListener) Accept(fn func(transport.Socket)) error {
return nil return nil
case c := <-m.conn: case c := <-m.conn:
go fn(&mockSocket{ go fn(&mockSocket{
lexit: c.lexit, lexit: c.lexit,
exit: c.exit, exit: c.exit,
send: c.recv, send: c.recv,
recv: c.send, recv: c.send,
local: c.Remote(),
remote: c.Local(),
}) })
} }
} }
@ -118,10 +131,12 @@ func (m *mockTransport) Dial(addr string, opts ...transport.DialOption) (transpo
client := &mockClient{ client := &mockClient{
&mockSocket{ &mockSocket{
send: make(chan *transport.Message), send: make(chan *transport.Message),
recv: make(chan *transport.Message), recv: make(chan *transport.Message),
exit: make(chan bool), exit: make(chan bool),
lexit: listener.exit, lexit: listener.exit,
local: addr,
remote: addr,
}, },
options, options,
} }

View File

@ -11,6 +11,8 @@ type Message struct {
} }
type Socket interface { type Socket interface {
Local() string
Remote() string
Recv(*Message) error Recv(*Message) error
Send(*Message) error Send(*Message) error
Close() error Close() error