@ -322,29 +322,19 @@ static grpc_security_context_vtable ssl_server_vtable = {
grpc_security_status grpc_ssl_channel_security_context_create (
grpc_credentials * request_metadata_creds , const grpc_ssl_config * config ,
const char * secure_peer_name , grpc_channel_security_context * * ctx ) {
size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions ( ) ;
const unsigned char * * alpn_protocol_strings =
gpr_malloc ( sizeof ( const char * ) * num_alpn_protocols ) ;
unsigned char * alpn_protocol_string_lengths =
gpr_malloc ( sizeof ( unsigned char ) * num_alpn_protocols ) ;
const char * alpn_protocol_string = GRPC_CHTTP2_ALPN_VERSION ;
unsigned char alpn_protocol_string_len =
( unsigned char ) strlen ( alpn_protocol_string ) ;
tsi_result result = TSI_OK ;
grpc_ssl_channel_security_context * c ;
size_t i ;
for ( i = 0 ; i < num_alpn_protocols ; i + + ) {
alpn_protocol_strings [ i ] =
( const unsigned char * ) grpc_chttp2_get_alpn_version_index ( i ) ;
alpn_protocol_string_lengths [ i ] =
strlen ( grpc_chttp2_get_alpn_version_index ( i ) ) ;
}
if ( config = = NULL | | secure_peer_name = = NULL | |
config - > pem_root_certs = = NULL ) {
gpr_log ( GPR_ERROR , " An ssl channel needs a secure name and root certs. " ) ;
goto error ;
return GRPC_SECURITY_ERROR ;
}
if ( ! check_request_metadata_creds ( request_metadata_creds ) ) {
goto error ;
return GRPC_SECURITY_ERROR ;
}
c = gpr_malloc ( sizeof ( grpc_ssl_channel_security_context ) ) ;
@ -361,48 +351,31 @@ grpc_security_status grpc_ssl_channel_security_context_create(
config - > pem_private_key , config - > pem_private_key_size ,
config - > pem_cert_chain , config - > pem_cert_chain_size ,
config - > pem_root_certs , config - > pem_root_certs_size ,
GRPC_SSL_CIPHER_SUITES , alpn_protocol_strings ,
alpn_protocol_string_lengths , 1 , & c - > handshaker_factory ) ;
GRPC_SSL_CIPHER_SUITES , ( const unsigned char * * ) & alpn_protocol_string ,
& alpn_protocol_string_len , 1 , & c - > handshaker_factory ) ;
if ( result ! = TSI_OK ) {
gpr_log ( GPR_ERROR , " Handshaker factory creation failed with %s. " ,
tsi_result_to_string ( result ) ) ;
ssl_channel_destroy ( & c - > base . base ) ;
* ctx = NULL ;
goto error ;
return GRPC_SECURITY_ERROR ;
}
* ctx = & c - > base ;
gpr_free ( alpn_protocol_strings ) ;
gpr_free ( alpn_protocol_string_lengths ) ;
return GRPC_SECURITY_OK ;
error :
gpr_free ( alpn_protocol_strings ) ;
gpr_free ( alpn_protocol_string_lengths ) ;
return GRPC_SECURITY_ERROR ;
}
grpc_security_status grpc_ssl_server_security_context_create (
const grpc_ssl_config * config , grpc_security_context * * ctx ) {
size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions ( ) ;
const unsigned char * * alpn_protocol_strings =
gpr_malloc ( sizeof ( const char * ) * num_alpn_protocols ) ;
unsigned char * alpn_protocol_string_lengths =
gpr_malloc ( sizeof ( unsigned char ) * num_alpn_protocols ) ;
const char * alpn_protocol_string = GRPC_CHTTP2_ALPN_VERSION ;
unsigned char alpn_protocol_string_len =
( unsigned char ) strlen ( alpn_protocol_string ) ;
tsi_result result = TSI_OK ;
grpc_ssl_server_security_context * c ;
size_t i ;
for ( i = 0 ; i < num_alpn_protocols ; i + + ) {
alpn_protocol_strings [ i ] =
( const unsigned char * ) grpc_chttp2_get_alpn_version_index ( i ) ;
alpn_protocol_string_lengths [ i ] =
strlen ( grpc_chttp2_get_alpn_version_index ( i ) ) ;
}
if ( config = = NULL | | config - > pem_private_key = = NULL | |
config - > pem_cert_chain = = NULL ) {
gpr_log ( GPR_ERROR , " An SSL server needs a key and a cert. " ) ;
goto error ;
return GRPC_SECURITY_ERROR ;
}
c = gpr_malloc ( sizeof ( grpc_ssl_server_security_context ) ) ;
memset ( c , 0 , sizeof ( grpc_ssl_server_security_context ) ) ;
@ -415,24 +388,17 @@ grpc_security_status grpc_ssl_server_security_context_create(
( const unsigned char * * ) & config - > pem_cert_chain ,
( const gpr_uint32 * ) & config - > pem_cert_chain_size , 1 ,
config - > pem_root_certs , config - > pem_root_certs_size ,
GRPC_SSL_CIPHER_SUITES , alpn_protocol_strings ,
alpn_protocol_string_lengths , 1 , & c - > handshaker_factory ) ;
GRPC_SSL_CIPHER_SUITES , ( const unsigned char * * ) & alpn_protocol_string ,
& alpn_protocol_string_len , 1 , & c - > handshaker_factory ) ;
if ( result ! = TSI_OK ) {
gpr_log ( GPR_ERROR , " Handshaker factory creation failed with %s. " ,
tsi_result_to_string ( result ) ) ;
ssl_server_destroy ( & c - > base ) ;
* ctx = NULL ;
goto error ;
return GRPC_SECURITY_ERROR ;
}
* ctx = & c - > base ;
gpr_free ( alpn_protocol_strings ) ;
gpr_free ( alpn_protocol_string_lengths ) ;
return GRPC_SECURITY_OK ;
error :
gpr_free ( alpn_protocol_strings ) ;
gpr_free ( alpn_protocol_string_lengths ) ;
return GRPC_SECURITY_ERROR ;
}