summaryrefslogtreecommitdiff
path: root/pkg/server/socket/dial.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-03-11 10:49:15 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-03-11 10:49:15 +0300
commit76012e39e9201b9dfcbbad546c7c2b38512903cb (patch)
tree389e35734416c2bfea9ceeb720757cdca3d29675 /pkg/server/socket/dial.go
parent9b85a2f18b2be51dd099beb169e7e30a9eacb816 (diff)
auto dial, tunnel limit
Diffstat (limited to 'pkg/server/socket/dial.go')
-rw-r--r--pkg/server/socket/dial.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/pkg/server/socket/dial.go b/pkg/server/socket/dial.go
new file mode 100644
index 0000000..818fbc6
--- /dev/null
+++ b/pkg/server/socket/dial.go
@@ -0,0 +1,42 @@
+package socket
+
+import (
+ "fmt"
+ "net"
+ "strings"
+ "tunnel/pkg/server/env"
+)
+
+type dialSocket struct {
+ proto, addr string
+}
+
+func newDialSocket(proto, addr string) (S, error) {
+ switch proto {
+ case "tcp", "udp":
+ if !strings.Contains(addr, ":") {
+ addr = "localhost:" + addr
+ }
+ }
+
+ return &dialSocket{proto: proto, addr: addr}, nil
+}
+
+func (s *dialSocket) String() string {
+ return fmt.Sprintf("%s/%s", s.proto, s.addr)
+}
+
+func (s *dialSocket) Open(env.Env) (Channel, error) {
+ conn, err := net.Dial(s.proto, s.addr)
+ if err != nil {
+ return nil, err
+ }
+
+ addr := conn.RemoteAddr()
+ info := fmt.Sprintf(">%s/%s", addr.Network(), addr)
+
+ return exported{info, newConn(conn)}, nil
+}
+
+func (s *dialSocket) Close() {
+}