diff --git a/include/re_tls.h b/include/re_tls.h index 5d03ba0..42ff35f 100644 --- a/include/re_tls.h +++ b/include/re_tls.h @@ -44,6 +44,7 @@ int tls_srtp_keyinfo(const struct tls_conn *tc, enum srtp_suite *suite, uint8_t *srv_key, size_t srv_key_size); const char *tls_cipher_name(const struct tls_conn *tc); int tls_set_ciphers(struct tls *tls, const char *cipherv[], size_t count); +int tls_set_servername(struct tls_conn *tc, const char *servername); /* TCP */ diff --git a/src/tls/openssl/tls.c b/src/tls/openssl/tls.c index a199b58..c1737cd 100644 --- a/src/tls/openssl/tls.c +++ b/src/tls/openssl/tls.c @@ -707,3 +707,26 @@ int tls_set_ciphers(struct tls *tls, const char *cipherv[], size_t count) return err; } + + +/** + * Set the server name on a TLS Connection, using TLS SNI extension. + * + * @param tc TLS Connection + * @param servername Server name + * + * @return 0 if success, otherwise errorcode + */ +int tls_set_servername(struct tls_conn *tc, const char *servername) +{ + if (!tc || !servername) + return EINVAL; + + if (1 != SSL_set_tlsext_host_name(tc->ssl, servername)) { + DEBUG_WARNING("tls: SSL_set_tlsext_host_name error\n"); + ERR_clear_error(); + return EPROTO; + } + + return 0; +}