OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / hashicorp / yamux / addr.go
diff --git a/vendor/github.com/hashicorp/yamux/addr.go b/vendor/github.com/hashicorp/yamux/addr.go
new file mode 100644 (file)
index 0000000..be6ebca
--- /dev/null
@@ -0,0 +1,60 @@
+package yamux
+
+import (
+       "fmt"
+       "net"
+)
+
+// hasAddr is used to get the address from the underlying connection
+type hasAddr interface {
+       LocalAddr() net.Addr
+       RemoteAddr() net.Addr
+}
+
+// yamuxAddr is used when we cannot get the underlying address
+type yamuxAddr struct {
+       Addr string
+}
+
+func (*yamuxAddr) Network() string {
+       return "yamux"
+}
+
+func (y *yamuxAddr) String() string {
+       return fmt.Sprintf("yamux:%s", y.Addr)
+}
+
+// Addr is used to get the address of the listener.
+func (s *Session) Addr() net.Addr {
+       return s.LocalAddr()
+}
+
+// LocalAddr is used to get the local address of the
+// underlying connection.
+func (s *Session) LocalAddr() net.Addr {
+       addr, ok := s.conn.(hasAddr)
+       if !ok {
+               return &yamuxAddr{"local"}
+       }
+       return addr.LocalAddr()
+}
+
+// RemoteAddr is used to get the address of remote end
+// of the underlying connection
+func (s *Session) RemoteAddr() net.Addr {
+       addr, ok := s.conn.(hasAddr)
+       if !ok {
+               return &yamuxAddr{"remote"}
+       }
+       return addr.RemoteAddr()
+}
+
+// LocalAddr returns the local address
+func (s *Stream) LocalAddr() net.Addr {
+       return s.session.LocalAddr()
+}
+
+// LocalAddr returns the remote address
+func (s *Stream) RemoteAddr() net.Addr {
+       return s.session.RemoteAddr()
+}