|  | @@ -3,6 +3,7 @@ package internet
 | 
											
												
													
														|  |  import (
 |  |  import (
 | 
											
												
													
														|  |  	"context"
 |  |  	"context"
 | 
											
												
													
														|  |  	"errors"
 |  |  	"errors"
 | 
											
												
													
														|  | 
 |  | +	"net"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	"v2ray.com/core/common"
 |  |  	"v2ray.com/core/common"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
										
											
												
													
														|  | @@ -17,10 +18,24 @@ func CreatePacketHeader(config interface{}) (PacketHeader, error) {
 | 
											
												
													
														|  |  	if err != nil {
 |  |  	if err != nil {
 | 
											
												
													
														|  |  		return nil, err
 |  |  		return nil, err
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | -	switch h := header.(type) {
 |  | 
 | 
											
												
													
														|  | -	case PacketHeader:
 |  | 
 | 
											
												
													
														|  | 
 |  | +	if h, ok := header.(PacketHeader); ok {
 | 
											
												
													
														|  |  		return h, nil
 |  |  		return h, nil
 | 
											
												
													
														|  | -	default:
 |  | 
 | 
											
												
													
														|  | -		return nil, errors.New("Internet: Not a packet header.")
 |  | 
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | 
 |  | +	return nil, errors.New("Internet: Not a packet header.")
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +type ConnectionAuthenticator interface {
 | 
											
												
													
														|  | 
 |  | +	Client(net.Conn) net.Conn
 | 
											
												
													
														|  | 
 |  | +	Server(net.Conn) net.Conn
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func CreateConnectionAuthenticator(config interface{}) (ConnectionAuthenticator, error) {
 | 
											
												
													
														|  | 
 |  | +	auth, err := common.CreateObject(context.Background(), config)
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		return nil, err
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	if a, ok := auth.(ConnectionAuthenticator); ok {
 | 
											
												
													
														|  | 
 |  | +		return a, nil
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	return nil, errors.New("Internet: Not a ConnectionAuthenticator.")
 | 
											
												
													
														|  |  }
 |  |  }
 |