Cryptography Reference
In-Depth Information
{
read_pos = read_buffer( ( void * ) &type, ( void * ) read_pos, 2 );
read_pos = read_buffer( ( void * ) &extension_data_size,
( void * ) read_pos, 2 );
type = ntohs( type );
extension_data_size = ntohs( extension_data_size );
switch ( type )
{
case server_name:
parse_server_name_extension( read_pos, extension_data_size,
parameters );
printf( “Got server name extension\n” );
break;
default:
printf( “warning, skipping unsupported client hello extension %d\n”,
type );
break;
}
read_pos += extension_data_size;
}
return read_pos;
}
Listing 8-3:
“tls.c” parse_server_name_extension
typedef enum
{
host_name = 0
}
NameType;
static void parse_server_name_extension( unsigned char *data,
unsigned short data_len,
TLSParameters *parameters )
{
unsigned short server_name_list_len;
unsigned char name_type;
unsigned char *data_start;
data = read_buffer( ( void * ) &server_name_list_len, ( void * ) data, 2 );
server_name_list_len = ntohs( server_name_list_len );
data_start = data;
data = read_buffer( ( void * ) &name_type, ( void * ) data, 1 );
switch ( name_type )
{
case host_name:
Search WWH ::
Custom Search