hssl.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef HV_SSL_H_
  2. #define HV_SSL_H_
  3. #include "hexport.h"
  4. #include "hplatform.h"
  5. #if !defined(WITH_OPENSSL) && \
  6. !defined(WITH_GNUTLS) && \
  7. !defined(WITH_MBEDTLS)
  8. #ifdef OS_WIN
  9. #define WITH_WINTLS
  10. #ifdef _MSC_VER
  11. #pragma comment(lib, "secur32.lib")
  12. #pragma comment(lib, "crypt32.lib")
  13. #endif
  14. #elif defined(OS_DARWIN)
  15. #define WITH_APPLETLS
  16. #else
  17. #define HV_WITHOUT_SSL
  18. #endif
  19. #endif
  20. typedef void* hssl_ctx_t; ///> SSL_CTX
  21. typedef void* hssl_t; ///> SSL
  22. enum {
  23. HSSL_SERVER = 0,
  24. HSSL_CLIENT = 1,
  25. };
  26. enum {
  27. HSSL_OK = 0,
  28. HSSL_ERROR = -1,
  29. HSSL_WANT_READ = -2,
  30. HSSL_WANT_WRITE = -3,
  31. HSSL_WOULD_BLOCK = -4,
  32. };
  33. typedef struct {
  34. const char* crt_file;
  35. const char* key_file;
  36. const char* ca_file;
  37. const char* ca_path;
  38. short verify_peer;
  39. short endpoint; // HSSL_SERVER / HSSL_CLIENT
  40. } hssl_ctx_opt_t, hssl_ctx_init_param_t;
  41. BEGIN_EXTERN_C
  42. /*
  43. const char* hssl_backend() {
  44. #ifdef WITH_OPENSSL
  45. return "openssl";
  46. #elif defined(WITH_GNUTLS)
  47. return "gnutls";
  48. #elif defined(WITH_MBEDTLS)
  49. return "mbedtls";
  50. #else
  51. return "nossl";
  52. #endif
  53. }
  54. */
  55. HV_EXPORT const char* hssl_backend();
  56. #define HV_WITH_SSL (strcmp(hssl_backend(), "nossl") != 0)
  57. HV_EXPORT extern hssl_ctx_t g_ssl_ctx;
  58. HV_EXPORT hssl_ctx_t hssl_ctx_init(hssl_ctx_init_param_t* param);
  59. HV_EXPORT void hssl_ctx_cleanup(hssl_ctx_t ssl_ctx);
  60. HV_EXPORT hssl_ctx_t hssl_ctx_instance();
  61. HV_EXPORT hssl_ctx_t hssl_ctx_new(hssl_ctx_opt_t* opt);
  62. HV_EXPORT void hssl_ctx_free(hssl_ctx_t ssl_ctx);
  63. HV_EXPORT hssl_t hssl_new(hssl_ctx_t ssl_ctx, int fd);
  64. HV_EXPORT void hssl_free(hssl_t ssl);
  65. HV_EXPORT int hssl_accept(hssl_t ssl);
  66. HV_EXPORT int hssl_connect(hssl_t ssl);
  67. HV_EXPORT int hssl_read(hssl_t ssl, void* buf, int len);
  68. HV_EXPORT int hssl_write(hssl_t ssl, const void* buf, int len);
  69. HV_EXPORT int hssl_close(hssl_t ssl);
  70. HV_EXPORT int hssl_set_sni_hostname(hssl_t ssl, const char* hostname);
  71. #ifdef WITH_OPENSSL
  72. HV_EXPORT int hssl_ctx_set_alpn_protos(hssl_ctx_t ssl_ctx, const unsigned char* protos, unsigned int protos_len);
  73. #endif
  74. END_EXTERN_C
  75. #endif // HV_SSL_H_