浏览代码

KCP: Dialers for KCP

Shelikhoo 9 年之前
父节点
当前提交
c07d478ab5
共有 1 个文件被更改,包括 44 次插入0 次删除
  1. 44 0
      transport/hub/dialer.go

+ 44 - 0
transport/hub/dialer.go

@@ -6,6 +6,7 @@ import (
 	"time"
 
 	v2net "github.com/v2ray/v2ray-core/common/net"
+	"github.com/v2ray/v2ray-core/proxy"
 	"github.com/v2ray/v2ray-core/transport"
 )
 
@@ -62,3 +63,46 @@ func DialWithoutCache(src v2net.Address, dest v2net.Destination) (net.Conn, erro
 
 	return dialer.Dial(dest.Network().String(), dest.NetAddr())
 }
+
+func Dial3(src v2net.Address, dest v2net.Destination, proxyMeta proxy.InboundHandlerMeta) (*Connection, error) {
+	if proxyMeta.KcpSupported && transport.IsKcpEnabled() {
+		DialKCP3(src, dest, proxyMeta)
+	}
+	return Dial(src, dest)
+}
+func DialWithoutCache3(src v2net.Address, dest v2net.Destination, proxyMeta proxy.InboundHandlerMeta) (net.Conn, error) {
+	if proxyMeta.KcpSupported && transport.IsKcpEnabled() {
+	}
+	return DialWithoutCache(src, dest)
+}
+
+func DialKCP3(src v2net.Address, dest v2net.Destination, proxyMeta proxy.InboundHandlerMeta) (*Connection, error) {
+	if src == nil {
+		src = v2net.AnyIP
+	}
+	id := src.String() + "-" + dest.NetAddr()
+	var conn net.Conn
+	if dest.IsTCP() && transport.IsConnectionReusable() {
+		conn = globalCache.Get(id)
+	}
+	if conn == nil {
+		var err error
+		conn, err = DialWithoutCache3(src, dest, proxyMeta)
+		if err != nil {
+			return nil, err
+		}
+	}
+	return &Connection{
+		dest:     id,
+		conn:     conn,
+		listener: globalCache,
+	}, nil
+}
+
+/*DialKCPWithoutCache Dial KCP connection
+This Dialer will ignore src this is a restriction
+due to github.com/xtaci/kcp-go.DialWithOptions
+*/
+func DialKCPWithoutCache(src v2net.Address, dest v2net.Destination) (net.Conn, error) {
+	return DialKCP(dest)
+}