src/core/ngx_module.h - nginx source code

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Maxim Dounin
  4. * Copyright (C) Nginx, Inc.
  5. */


  6. #ifndef _NGX_MODULE_H_INCLUDED_
  7. #define _NGX_MODULE_H_INCLUDED_


  8. #include <ngx_config.h>
  9. #include <ngx_core.h>
  10. #include <nginx.h>


  11. #define NGX_MODULE_UNSET_INDEX  (ngx_uint_t) -1


  12. #define NGX_MODULE_SIGNATURE_0                                                \
  13.     ngx_value(NGX_PTR_SIZE) ","                                               \
  14.     ngx_value(NGX_SIG_ATOMIC_T_SIZE) ","                                      \
  15.     ngx_value(NGX_TIME_T_SIZE) ","

  16. #if (NGX_HAVE_KQUEUE)
  17. #define NGX_MODULE_SIGNATURE_1   "1"
  18. #else
  19. #define NGX_MODULE_SIGNATURE_1   "0"
  20. #endif

  21. #if (NGX_HAVE_IOCP)
  22. #define NGX_MODULE_SIGNATURE_2   "1"
  23. #else
  24. #define NGX_MODULE_SIGNATURE_2   "0"
  25. #endif

  26. #if (NGX_HAVE_FILE_AIO || NGX_COMPAT)
  27. #define NGX_MODULE_SIGNATURE_3   "1"
  28. #else
  29. #define NGX_MODULE_SIGNATURE_3   "0"
  30. #endif

  31. #if (NGX_HAVE_SENDFILE_NODISKIO || NGX_COMPAT)
  32. #define NGX_MODULE_SIGNATURE_4   "1"
  33. #else
  34. #define NGX_MODULE_SIGNATURE_4   "0"
  35. #endif

  36. #if (NGX_HAVE_EVENTFD)
  37. #define NGX_MODULE_SIGNATURE_5   "1"
  38. #else
  39. #define NGX_MODULE_SIGNATURE_5   "0"
  40. #endif

  41. #if (NGX_HAVE_EPOLL)
  42. #define NGX_MODULE_SIGNATURE_6   "1"
  43. #else
  44. #define NGX_MODULE_SIGNATURE_6   "0"
  45. #endif

  46. #if (NGX_HAVE_KEEPALIVE_TUNABLE)
  47. #define NGX_MODULE_SIGNATURE_7   "1"
  48. #else
  49. #define NGX_MODULE_SIGNATURE_7   "0"
  50. #endif

  51. #if (NGX_HAVE_INET6)
  52. #define NGX_MODULE_SIGNATURE_8   "1"
  53. #else
  54. #define NGX_MODULE_SIGNATURE_8   "0"
  55. #endif

  56. #define NGX_MODULE_SIGNATURE_9   "1"
  57. #define NGX_MODULE_SIGNATURE_10  "1"

  58. #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
  59. #define NGX_MODULE_SIGNATURE_11  "1"
  60. #else
  61. #define NGX_MODULE_SIGNATURE_11  "0"
  62. #endif

  63. #define NGX_MODULE_SIGNATURE_12  "1"

  64. #if (NGX_HAVE_SETFIB)
  65. #define NGX_MODULE_SIGNATURE_13  "1"
  66. #else
  67. #define NGX_MODULE_SIGNATURE_13  "0"
  68. #endif

  69. #if (NGX_HAVE_TCP_FASTOPEN)
  70. #define NGX_MODULE_SIGNATURE_14  "1"
  71. #else
  72. #define NGX_MODULE_SIGNATURE_14  "0"
  73. #endif

  74. #if (NGX_HAVE_UNIX_DOMAIN)
  75. #define NGX_MODULE_SIGNATURE_15  "1"
  76. #else
  77. #define NGX_MODULE_SIGNATURE_15  "0"
  78. #endif

  79. #if (NGX_HAVE_VARIADIC_MACROS)
  80. #define NGX_MODULE_SIGNATURE_16  "1"
  81. #else
  82. #define NGX_MODULE_SIGNATURE_16  "0"
  83. #endif

  84. #define NGX_MODULE_SIGNATURE_17  "0"

  85. #if (NGX_QUIC || NGX_COMPAT)
  86. #define NGX_MODULE_SIGNATURE_18  "1"
  87. #else
  88. #define NGX_MODULE_SIGNATURE_18  "0"
  89. #endif

  90. #if (NGX_HAVE_OPENAT)
  91. #define NGX_MODULE_SIGNATURE_19  "1"
  92. #else
  93. #define NGX_MODULE_SIGNATURE_19  "0"
  94. #endif

  95. #if (NGX_HAVE_ATOMIC_OPS)
  96. #define NGX_MODULE_SIGNATURE_20  "1"
  97. #else
  98. #define NGX_MODULE_SIGNATURE_20  "0"
  99. #endif

  100. #if (NGX_HAVE_POSIX_SEM)
  101. #define NGX_MODULE_SIGNATURE_21  "1"
  102. #else
  103. #define NGX_MODULE_SIGNATURE_21  "0"
  104. #endif

  105. #if (NGX_THREADS || NGX_COMPAT)
  106. #define NGX_MODULE_SIGNATURE_22  "1"
  107. #else
  108. #define NGX_MODULE_SIGNATURE_22  "0"
  109. #endif

  110. #if (NGX_PCRE)
  111. #define NGX_MODULE_SIGNATURE_23  "1"
  112. #else
  113. #define NGX_MODULE_SIGNATURE_23  "0"
  114. #endif

  115. #if (NGX_HTTP_SSL || NGX_COMPAT)
  116. #define NGX_MODULE_SIGNATURE_24  "1"
  117. #else
  118. #define NGX_MODULE_SIGNATURE_24  "0"
  119. #endif

  120. #define NGX_MODULE_SIGNATURE_25  "1"

  121. #if (NGX_HTTP_GZIP)
  122. #define NGX_MODULE_SIGNATURE_26  "1"
  123. #else
  124. #define NGX_MODULE_SIGNATURE_26  "0"
  125. #endif

  126. #define NGX_MODULE_SIGNATURE_27  "1"

  127. #if (NGX_HTTP_X_FORWARDED_FOR)
  128. #define NGX_MODULE_SIGNATURE_28  "1"
  129. #else
  130. #define NGX_MODULE_SIGNATURE_28  "0"
  131. #endif

  132. #if (NGX_HTTP_REALIP)
  133. #define NGX_MODULE_SIGNATURE_29  "1"
  134. #else
  135. #define NGX_MODULE_SIGNATURE_29  "0"
  136. #endif

  137. #if (NGX_HTTP_HEADERS)
  138. #define NGX_MODULE_SIGNATURE_30  "1"
  139. #else
  140. #define NGX_MODULE_SIGNATURE_30  "0"
  141. #endif

  142. #if (NGX_HTTP_DAV)
  143. #define NGX_MODULE_SIGNATURE_31  "1"
  144. #else
  145. #define NGX_MODULE_SIGNATURE_31  "0"
  146. #endif

  147. #if (NGX_HTTP_CACHE)
  148. #define NGX_MODULE_SIGNATURE_32  "1"
  149. #else
  150. #define NGX_MODULE_SIGNATURE_32  "0"
  151. #endif

  152. #if (NGX_HTTP_UPSTREAM_ZONE)
  153. #define NGX_MODULE_SIGNATURE_33  "1"
  154. #else
  155. #define NGX_MODULE_SIGNATURE_33  "0"
  156. #endif

  157. #if (NGX_COMPAT)
  158. #define NGX_MODULE_SIGNATURE_34  "1"
  159. #else
  160. #define NGX_MODULE_SIGNATURE_34  "0"
  161. #endif

  162. #define NGX_MODULE_SIGNATURE                                                  \
  163.     NGX_MODULE_SIGNATURE_0 NGX_MODULE_SIGNATURE_1 NGX_MODULE_SIGNATURE_2      \
  164.     NGX_MODULE_SIGNATURE_3 NGX_MODULE_SIGNATURE_4 NGX_MODULE_SIGNATURE_5      \
  165.     NGX_MODULE_SIGNATURE_6 NGX_MODULE_SIGNATURE_7 NGX_MODULE_SIGNATURE_8      \
  166.     NGX_MODULE_SIGNATURE_9 NGX_MODULE_SIGNATURE_10 NGX_MODULE_SIGNATURE_11    \
  167.     NGX_MODULE_SIGNATURE_12 NGX_MODULE_SIGNATURE_13 NGX_MODULE_SIGNATURE_14   \
  168.     NGX_MODULE_SIGNATURE_15 NGX_MODULE_SIGNATURE_16 NGX_MODULE_SIGNATURE_17   \
  169.     NGX_MODULE_SIGNATURE_18 NGX_MODULE_SIGNATURE_19 NGX_MODULE_SIGNATURE_20   \
  170.     NGX_MODULE_SIGNATURE_21 NGX_MODULE_SIGNATURE_22 NGX_MODULE_SIGNATURE_23   \
  171.     NGX_MODULE_SIGNATURE_24 NGX_MODULE_SIGNATURE_25 NGX_MODULE_SIGNATURE_26   \
  172.     NGX_MODULE_SIGNATURE_27 NGX_MODULE_SIGNATURE_28 NGX_MODULE_SIGNATURE_29   \
  173.     NGX_MODULE_SIGNATURE_30 NGX_MODULE_SIGNATURE_31 NGX_MODULE_SIGNATURE_32   \
  174.     NGX_MODULE_SIGNATURE_33 NGX_MODULE_SIGNATURE_34


  175. #define NGX_MODULE_V1                                                         \
  176.     NGX_MODULE_UNSET_INDEX, NGX_MODULE_UNSET_INDEX,                           \
  177.     NULL, 0, 0, nginx_version, NGX_MODULE_SIGNATURE

  178. #define NGX_MODULE_V1_PADDING  0, 0, 0, 0, 0, 0, 0, 0


  179. struct ngx_module_s {
  180.     ngx_uint_t            ctx_index;
  181.     ngx_uint_t            index;

  182.     char                 *name;

  183.     ngx_uint_t            spare0;
  184.     ngx_uint_t            spare1;

  185.     ngx_uint_t            version;
  186.     const char           *signature;

  187.     void                 *ctx;
  188.     ngx_command_t        *commands;
  189.     ngx_uint_t            type;

  190.     ngx_int_t           (*init_master)(ngx_log_t *log);

  191.     ngx_int_t           (*init_module)(ngx_cycle_t *cycle);

  192.     ngx_int_t           (*init_process)(ngx_cycle_t *cycle);
  193.     ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);
  194.     void                (*exit_thread)(ngx_cycle_t *cycle);
  195.     void                (*exit_process)(ngx_cycle_t *cycle);

  196.     void                (*exit_master)(ngx_cycle_t *cycle);

  197.     uintptr_t             spare_hook0;
  198.     uintptr_t             spare_hook1;
  199.     uintptr_t             spare_hook2;
  200.     uintptr_t             spare_hook3;
  201.     uintptr_t             spare_hook4;
  202.     uintptr_t             spare_hook5;
  203.     uintptr_t             spare_hook6;
  204.     uintptr_t             spare_hook7;
  205. };


  206. typedef struct {
  207.     ngx_str_t             name;
  208.     void               *(*create_conf)(ngx_cycle_t *cycle);
  209.     char               *(*init_conf)(ngx_cycle_t *cycle, void *conf);
  210. } ngx_core_module_t;


  211. ngx_int_t ngx_preinit_modules(void);
  212. ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);
  213. ngx_int_t ngx_init_modules(ngx_cycle_t *cycle);
  214. ngx_int_t ngx_count_modules(ngx_cycle_t *cycle, ngx_uint_t type);


  215. ngx_int_t ngx_add_module(ngx_conf_t *cf, ngx_str_t *file,
  216.     ngx_module_t *module, char **order);


  217. extern ngx_module_t  *ngx_modules[];
  218. extern ngx_uint_t     ngx_max_module;

  219. extern char          *ngx_module_names[];


  220. #endif /* _NGX_MODULE_H_INCLUDED_ */