You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

async.h 2.8 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License 2.0 (the "License"). You may not use
  5. * this file except in compliance with the License. You can obtain a copy
  6. * in the file LICENSE in the source distribution or at
  7. * https://www.openssl.org/source/license.html
  8. */
  9. #include <stdlib.h>
  10. #ifndef OPENSSL_ASYNC_H
  11. #define OPENSSL_ASYNC_H
  12. #pragma once
  13. #include <openssl/macros.h>
  14. #ifndef OPENSSL_NO_DEPRECATED_3_0
  15. #define HEADER_ASYNC_H
  16. #endif
  17. #if defined(_WIN32)
  18. #if defined(BASETYPES) || defined(_WINDEF_H)
  19. /* application has to include <windows.h> to use this */
  20. #define OSSL_ASYNC_FD HANDLE
  21. #define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE
  22. #endif
  23. #else
  24. #define OSSL_ASYNC_FD int
  25. #define OSSL_BAD_ASYNC_FD -1
  26. #endif
  27. #include <openssl/asyncerr.h>
  28. #ifdef __cplusplus
  29. extern "C"
  30. {
  31. #endif
  32. typedef struct async_job_st ASYNC_JOB;
  33. typedef struct async_wait_ctx_st ASYNC_WAIT_CTX;
  34. typedef int (*ASYNC_callback_fn)(void* arg);
  35. #define ASYNC_ERR 0
  36. #define ASYNC_NO_JOBS 1
  37. #define ASYNC_PAUSE 2
  38. #define ASYNC_FINISH 3
  39. #define ASYNC_STATUS_UNSUPPORTED 0
  40. #define ASYNC_STATUS_ERR 1
  41. #define ASYNC_STATUS_OK 2
  42. #define ASYNC_STATUS_EAGAIN 3
  43. int ASYNC_init_thread(size_t max_size, size_t init_size);
  44. void ASYNC_cleanup_thread(void);
  45. #ifdef OSSL_ASYNC_FD
  46. ASYNC_WAIT_CTX* ASYNC_WAIT_CTX_new(void);
  47. void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX* ctx);
  48. int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX* ctx, const void* key, OSSL_ASYNC_FD fd, void* custom_data, void (*cleanup)(ASYNC_WAIT_CTX*, const void*, OSSL_ASYNC_FD, void*));
  49. int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX* ctx, const void* key, OSSL_ASYNC_FD* fd, void** custom_data);
  50. int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX* ctx, OSSL_ASYNC_FD* fd, size_t* numfds);
  51. int ASYNC_WAIT_CTX_get_callback(ASYNC_WAIT_CTX* ctx, ASYNC_callback_fn* callback, void** callback_arg);
  52. int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX* ctx, ASYNC_callback_fn callback, void* callback_arg);
  53. int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX* ctx, int status);
  54. int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX* ctx);
  55. int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX* ctx, OSSL_ASYNC_FD* addfd, size_t* numaddfds, OSSL_ASYNC_FD* delfd, size_t* numdelfds);
  56. int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX* ctx, const void* key);
  57. #endif
  58. int ASYNC_is_capable(void);
  59. int ASYNC_start_job(ASYNC_JOB** job, ASYNC_WAIT_CTX* ctx, int* ret, int (*func)(void*), void* args, size_t size);
  60. int ASYNC_pause_job(void);
  61. ASYNC_JOB* ASYNC_get_current_job(void);
  62. ASYNC_WAIT_CTX* ASYNC_get_wait_ctx(ASYNC_JOB* job);
  63. void ASYNC_block_pause(void);
  64. void ASYNC_unblock_pause(void);
  65. #ifdef __cplusplus
  66. }
  67. #endif
  68. #endif