Browse Source

Use 'h2' for ALPN in TCP

pull/861/head
Darien Raymond 7 years ago
parent
commit
30f27706e0
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
  1. 2
      transport/internet/tcp/dialer.go
  2. 2
      transport/internet/tcp/hub.go
  3. 11
      transport/internet/tls/config.go
  4. 45
      transport/internet/tls/config.pb.go
  5. 3
      transport/internet/tls/config.proto

2
transport/internet/tcp/dialer.go

@ -26,7 +26,7 @@ func Dial(ctx context.Context, dest net.Destination) (internet.Connection, error
return nil, err
}
if config := tls.ConfigFromContext(ctx, tls.WithDestination(dest)); config != nil {
if config := tls.ConfigFromContext(ctx, tls.WithDestination(dest), tls.WithNextProto("h2")); config != nil {
conn = tls.Client(conn, config.GetTLSConfig())
}

2
transport/internet/tcp/hub.go

@ -37,7 +37,7 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, addConn
addConn: addConn,
}
if config := tls.ConfigFromContext(ctx); config != nil {
if config := tls.ConfigFromContext(ctx, tls.WithNextProto("h2")); config != nil {
l.tlsConfig = config.GetTLSConfig()
}

11
transport/internet/tls/config.go

@ -40,6 +40,9 @@ func (c *Config) GetTLSConfig() *tls.Config {
if len(c.ServerName) > 0 {
config.ServerName = c.ServerName
}
if len(c.NextProtocol) > 0 {
config.NextProtos = c.NextProtocol
}
return config
}
@ -54,6 +57,14 @@ func WithDestination(dest net.Destination) Option {
}
}
func WithNextProto(protocol ...string) Option {
return func(config *Config) {
if len(config.NextProtocol) == 0 {
config.NextProtocol = protocol
}
}
}
func ConfigFromContext(ctx context.Context, opts ...Option) *Config {
securitySettings := internet.SecuritySettingsFromContext(ctx)
if securitySettings == nil {

45
transport/internet/tls/config.pb.go

@ -48,6 +48,8 @@ type Config struct {
Certificate []*Certificate `protobuf:"bytes,2,rep,name=certificate" json:"certificate,omitempty"`
// Override server name.
ServerName string `protobuf:"bytes,3,opt,name=server_name,json=serverName" json:"server_name,omitempty"`
// Lists of string as ALPN values.
NextProtocol []string `protobuf:"bytes,4,rep,name=next_protocol,json=nextProtocol" json:"next_protocol,omitempty"`
}
func (m *Config) Reset() { *m = Config{} }
@ -76,6 +78,13 @@ func (m *Config) GetServerName() string {
return ""
}
func (m *Config) GetNextProtocol() []string {
if m != nil {
return m.NextProtocol
}
return nil
}
func init() {
proto.RegisterType((*Certificate)(nil), "v2ray.core.transport.internet.tls.Certificate")
proto.RegisterType((*Config)(nil), "v2ray.core.transport.internet.tls.Config")
@ -84,21 +93,23 @@ func init() {
func init() { proto.RegisterFile("v2ray.com/core/transport/internet/tls/config.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 255 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0x41, 0x4b, 0x03, 0x31,
0x10, 0x85, 0x49, 0x17, 0x8a, 0x66, 0x55, 0x24, 0xa7, 0xbd, 0xb9, 0x2d, 0x14, 0xf6, 0x94, 0xc0,
0xfa, 0x0b, 0x74, 0x4f, 0x45, 0x90, 0x12, 0x8a, 0x07, 0x2f, 0x25, 0x86, 0xa9, 0x04, 0xb2, 0x49,
0x99, 0x8c, 0x95, 0xfd, 0x3b, 0x1e, 0xfd, 0x95, 0xd2, 0xad, 0x5b, 0xb6, 0xa7, 0xde, 0x92, 0x37,
0xdf, 0xbc, 0xf7, 0x18, 0x5e, 0xef, 0x6b, 0x34, 0x9d, 0xb4, 0xb1, 0x55, 0x36, 0x22, 0x28, 0x42,
0x13, 0xd2, 0x2e, 0x22, 0x29, 0x17, 0x08, 0x30, 0x00, 0x29, 0xf2, 0x49, 0xd9, 0x18, 0xb6, 0xee,
0x53, 0xee, 0x30, 0x52, 0x14, 0xb3, 0x61, 0x07, 0x41, 0x9e, 0x78, 0x39, 0xf0, 0x92, 0x7c, 0x9a,
0x3f, 0xf1, 0xbc, 0x01, 0x24, 0xb7, 0x75, 0xd6, 0x10, 0x88, 0xf2, 0xec, 0x5b, 0xb0, 0x92, 0x55,
0x37, 0xfa, 0x8c, 0xb8, 0xe7, 0xd9, 0x0b, 0x74, 0xc5, 0xa4, 0x9f, 0x1c, 0x9e, 0xf3, 0x1f, 0xc6,
0xa7, 0x4d, 0x1f, 0x2b, 0x16, 0xfc, 0xce, 0x78, 0x1f, 0xbf, 0x37, 0x2e, 0x24, 0xb0, 0x5f, 0x78,
0x74, 0xb8, 0xd2, 0xb7, 0xbd, 0xba, 0xfc, 0x17, 0xc5, 0x8a, 0xe7, 0x76, 0x94, 0x32, 0x29, 0xb3,
0x2a, 0xaf, 0xa5, 0xbc, 0xd8, 0x56, 0x8e, 0x8a, 0xe8, 0xb1, 0x85, 0x78, 0xe0, 0x79, 0x02, 0xdc,
0x03, 0x6e, 0x82, 0x69, 0xa1, 0xc8, 0x4a, 0x56, 0x5d, 0x6b, 0x7e, 0x94, 0x5e, 0x4d, 0x0b, 0xcf,
0x9a, 0x2f, 0x6c, 0x6c, 0x2f, 0x47, 0xac, 0xd8, 0x7b, 0x46, 0x3e, 0xfd, 0x4e, 0x66, 0x6f, 0xb5,
0x36, 0x9d, 0x6c, 0x0e, 0xe8, 0xfa, 0x84, 0x2e, 0x07, 0x74, 0xed, 0xd3, 0xc7, 0xb4, 0xbf, 0xf2,
0xe3, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0x0b, 0x8b, 0x74, 0x9b, 0x01, 0x00, 0x00,
// 278 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0x41, 0x6a, 0xeb, 0x30,
0x10, 0x86, 0x71, 0xfc, 0x08, 0x2f, 0x72, 0x52, 0x8a, 0x56, 0xde, 0xd5, 0x49, 0x09, 0x78, 0x25,
0x83, 0x7b, 0x82, 0xd6, 0xab, 0x50, 0x28, 0x46, 0x84, 0x2e, 0xba, 0x31, 0xaa, 0x98, 0x14, 0x83,
0x2c, 0x85, 0xd1, 0x34, 0xad, 0xaf, 0xd4, 0x8b, 0xf4, 0x5a, 0xc5, 0x4e, 0x1c, 0x9c, 0x55, 0x76,
0xd2, 0xa7, 0x4f, 0xf3, 0xff, 0x0c, 0xcb, 0x0f, 0x39, 0xaa, 0x56, 0x68, 0xd7, 0x64, 0xda, 0x21,
0x64, 0x84, 0xca, 0xfa, 0xbd, 0x43, 0xca, 0x6a, 0x4b, 0x80, 0x16, 0x28, 0x23, 0xe3, 0x33, 0xed,
0xec, 0xae, 0xfe, 0x10, 0x7b, 0x74, 0xe4, 0xf8, 0x72, 0xf8, 0x83, 0x20, 0xce, 0xbe, 0x18, 0x7c,
0x41, 0xc6, 0xaf, 0x1e, 0x59, 0x54, 0x00, 0x52, 0xbd, 0xab, 0xb5, 0x22, 0xe0, 0xc9, 0xc5, 0x35,
0x0e, 0x92, 0x20, 0x9d, 0xcb, 0x0b, 0xe3, 0x96, 0x85, 0xcf, 0xd0, 0xc6, 0x93, 0xfe, 0xa5, 0x3b,
0xae, 0x7e, 0x03, 0x36, 0x2d, 0xfa, 0x58, 0xbe, 0x66, 0x37, 0xca, 0x18, 0xf7, 0x55, 0xd5, 0xd6,
0x83, 0xfe, 0xc4, 0xe3, 0x84, 0xff, 0x72, 0xd1, 0xd3, 0xcd, 0x09, 0xf2, 0x92, 0x45, 0x7a, 0x94,
0x32, 0x49, 0xc2, 0x34, 0xca, 0x85, 0xb8, 0xda, 0x56, 0x8c, 0x8a, 0xc8, 0xf1, 0x08, 0x7e, 0xc7,
0x22, 0x0f, 0x78, 0x00, 0xac, 0xac, 0x6a, 0x20, 0x0e, 0x93, 0x20, 0x9d, 0x49, 0x76, 0x44, 0x2f,
0xaa, 0x01, 0x7e, 0xcf, 0x16, 0x16, 0xbe, 0xa9, 0xea, 0x17, 0xa3, 0x9d, 0x89, 0xff, 0x25, 0x61,
0x3a, 0x93, 0xf3, 0x0e, 0x96, 0x27, 0xf6, 0x24, 0xd9, 0x5a, 0xbb, 0xe6, 0x7a, 0x8f, 0x32, 0x78,
0x0b, 0xc9, 0xf8, 0x9f, 0xc9, 0xf2, 0x35, 0x97, 0xaa, 0x15, 0x45, 0xa7, 0x6e, 0xcf, 0xea, 0x66,
0x50, 0xb7, 0xc6, 0xbf, 0x4f, 0xfb, 0xc4, 0x87, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x84,
0xfb, 0x07, 0xc0, 0x01, 0x00, 0x00,
}

3
transport/internet/tls/config.proto

@ -23,4 +23,7 @@ message Config {
// Override server name.
string server_name = 3;
// Lists of string as ALPN values.
repeated string next_protocol = 4;
}
Loading…
Cancel
Save