1 2 /* 3 * Copyright (C) NGINX, Inc. 4 */ 5 6 #ifndef _NXT_NODEJS_UNIT_H_INCLUDED_ 7 #define _NXT_NODEJS_UNIT_H_INCLUDED_ 8 9 10 #include <node_api.h> 11 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #include <nxt_unit.h> 18 #include <nxt_unit_response.h> 19 #include <nxt_unit_request.h> 20 21 #ifdef __cplusplus 22 } /* extern "C" */ 23 #endif 24 25 26 class Unit { 27 public: 28 static napi_value init(napi_env env, napi_value exports); 29 30 private: 31 Unit(napi_env env); 32 ~Unit(); 33 34 static napi_value create(napi_env env, napi_callback_info info); 35 static void destroy(napi_env env, void *nativeObject, void *finalize_hint); 36 37 static napi_value create_server(napi_env env, napi_callback_info info); 38 static napi_value listen(napi_env env, napi_callback_info info); 39 static void request_handler(nxt_unit_request_info_t *req); 40 41 napi_value get_server_object(); 42 43 napi_value emit(napi_value obj, const char *name, size_t name_len, 44 size_t argc, napi_value *argv); 45 46 napi_value create_socket(napi_value server_obj, 47 nxt_unit_request_info_t *req); 48 49 napi_value create_request(napi_value server_obj, napi_value socket); 50 51 napi_value create_response(napi_value server_obj, napi_value socket, 52 napi_value request, 53 nxt_unit_request_info_t *req, Unit *obj); 54 55 void emit_post_data(napi_value request, nxt_unit_request_info_t *req); 56 57 static napi_value response_send_headers(napi_env env, 58 napi_callback_info info); 59 60 static napi_value response_write(napi_env env, napi_callback_info info); 61 static napi_value response_end(napi_env env, napi_callback_info info); 62 63 napi_status create_headers(nxt_unit_request_info_t *req, 64 napi_value request); 65 66 inline napi_status append_header(nxt_unit_field_t *f, napi_value headers, 67 napi_value raw_headers, uint32_t idx); 68 69 static napi_ref constructor_; 70 71 napi_env env_; 72 napi_ref wrapper_; 73 nxt_unit_ctx_t *unit_ctx_; 74 }; 75 76 77 #endif /* _NXT_NODEJS_H_INCLUDED_ */ 78