|  | @@ -6,6 +6,7 @@ import (
 | 
	
		
			
				|  |  |  	"time"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/common/log"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/transport"
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/transport/hub/kcpv"
 | 
	
		
			
				|  |  |  	"github.com/xtaci/kcp-go"
 | 
	
		
			
				|  |  |  )
 | 
	
	
		
			
				|  | @@ -109,3 +110,19 @@ func (kcpvc *KCPVconn) SetReadDeadline(t time.Time) error {
 | 
	
		
			
				|  |  |  func (kcpvc *KCPVconn) SetWriteDeadline(t time.Time) error {
 | 
	
		
			
				|  |  |  	return kcpvc.hc.SetWriteDeadline(t)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func DialKCP(dest v2net.Destination) (*KCPVconn, error) {
 | 
	
		
			
				|  |  | +	kcpconf := transport.KcpConfig
 | 
	
		
			
				|  |  | +	cpip, _ := kcpv.GetChipher(kcpconf.Key)
 | 
	
		
			
				|  |  | +	kcv, err := kcp.DialWithOptions(kcpconf.AdvancedConfigs.Fec, dest.NetAddr(), cpip)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return nil, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	kcvn := &KCPVconn{hc: kcv}
 | 
	
		
			
				|  |  | +	kcvn.conf = kcpconf
 | 
	
		
			
				|  |  | +	err = kcvn.ApplyConf()
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return nil, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return kcvn, nil
 | 
	
		
			
				|  |  | +}
 |