static int serverinfo_srv_cb(SSL *s, unsigned short ext_type, const unsigned char **out, unsigned short *outlen, void *arg) { const unsigned char *serverinfo = NULL; size_t serverinfo_length = 0; /* Is there a serverinfo for the chosen server cert? */ if ((ssl_get_server_cert_serverinfo(s, &serverinfo, &serverinfo_length)) != 0) { /* Find the relevant extension from the serverinfo */ serverinfo_find_extension(serverinfo, serverinfo_length, ext_type, out, outlen); } return 1; }
static int serverinfo_srv_add_cb(SSL *s, unsigned int ext_type, const unsigned char **out, size_t *outlen, int *al, void *arg) { const unsigned char *serverinfo = NULL; size_t serverinfo_length = 0; /* Is there serverinfo data for the chosen server cert? */ if ((ssl_get_server_cert_serverinfo(s, &serverinfo, &serverinfo_length)) != 0) { /* Find the relevant extension from the serverinfo */ int retval = serverinfo_find_extension(serverinfo, serverinfo_length, ext_type, out, outlen); if (retval == 0) return 0; /* Error */ if (retval == -1) return -1; /* No extension found, don't send extension */ return 1; /* Send extension */ } return -1; /* No serverinfo data found, don't send extension */ }
static int serverinfo_srv_second_cb(SSL *s, unsigned short ext_type, const unsigned char **out, unsigned short *outlen, int *al, void *arg) { const unsigned char *serverinfo = NULL; size_t serverinfo_length = 0; size_t i = 0; unsigned int match = 0; /* Did the client send a TLS extension for this type? */ for (i = 0; i < s->s3->serverinfo_client_tlsext_custom_types_count; i++) { if (s->s3->serverinfo_client_tlsext_custom_types[i] == ext_type) { match = 1; break; } } if (!match) { /* extension not sent by client...don't send extension */ return -1; } /* Is there serverinfo data for the chosen server cert? */ if ((ssl_get_server_cert_serverinfo(s, &serverinfo, &serverinfo_length)) != 0) { /* Find the relevant extension from the serverinfo */ int retval = serverinfo_find_extension(serverinfo, serverinfo_length, ext_type, out, outlen); if (retval == 0) return 0; /* Error */ if (retval == -1) return -1; /* No extension found, don't send extension */ return 1; /* Send extension */ } return -1; /* No serverinfo data found, don't send extension */ }