add local/remote ip to socket
This commit is contained in:
		| @@ -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 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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, | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user