xref: /unit/src/python/nxt_python_asgi.h (revision 1980:43553aa72111)
1 
2 /*
3  * Copyright (C) NGINX, Inc.
4  */
5 
6 #ifndef _NXT_PYTHON_ASGI_H_INCLUDED_
7 #define _NXT_PYTHON_ASGI_H_INCLUDED_
8 
9 
10 typedef PyObject * (*nxt_py_asgi_enum_header_cb)(void *ctx, int i,
11     PyObject *name, PyObject *val);
12 
13 void nxt_py_asgi_drain_wait(nxt_unit_request_info_t *req,
14     nxt_queue_link_t *link);
15 
16 typedef struct {
17     uint32_t       fields_count;
18     uint32_t       fields_size;
19 } nxt_py_asgi_calc_size_ctx_t;
20 
21 typedef struct {
22     nxt_unit_request_info_t  *req;
23     uint64_t                 content_length;
24 } nxt_py_asgi_add_field_ctx_t;
25 
26 typedef struct {
27     nxt_queue_t      drain_queue;
28     PyObject         *loop_run_until_complete;
29     PyObject         *loop_create_future;
30     PyObject         *loop_create_task;
31     PyObject         *loop_call_soon;
32     PyObject         *loop_add_reader;
33     PyObject         *loop_remove_reader;
34     PyObject         *quit_future;
35     PyObject         *quit_future_set_result;
36     PyObject         **target_lifespans;
37 } nxt_py_asgi_ctx_data_t;
38 
39 PyObject *nxt_py_asgi_enum_headers(PyObject *headers,
40     nxt_py_asgi_enum_header_cb cb, void *data);
41 
42 PyObject *nxt_py_asgi_calc_size(void *data, int i, PyObject *n, PyObject *v);
43 PyObject *nxt_py_asgi_add_field(void *data, int i, PyObject *n, PyObject *v);
44 
45 PyObject *nxt_py_asgi_set_result_soon(nxt_unit_request_info_t *req,
46     nxt_py_asgi_ctx_data_t *ctx_data, PyObject *future, PyObject *result);
47 PyObject *nxt_py_asgi_new_msg(nxt_unit_request_info_t *req, PyObject *type);
48 PyObject *nxt_py_asgi_new_scope(nxt_unit_request_info_t *req, PyObject *type,
49     PyObject *spec_version);
50 
51 void nxt_py_asgi_dealloc(PyObject *self);
52 PyObject *nxt_py_asgi_await(PyObject *self);
53 PyObject *nxt_py_asgi_iter(PyObject *self);
54 PyObject *nxt_py_asgi_next(PyObject *self);
55 
56 int nxt_py_asgi_http_init(void);
57 PyObject *nxt_py_asgi_http_create(nxt_unit_request_info_t *req);
58 void nxt_py_asgi_http_data_handler(nxt_unit_request_info_t *req);
59 int nxt_py_asgi_http_drain(nxt_queue_link_t *lnk);
60 void nxt_py_asgi_http_close_handler(nxt_unit_request_info_t *req);
61 
62 int nxt_py_asgi_websocket_init(void);
63 PyObject *nxt_py_asgi_websocket_create(nxt_unit_request_info_t *req);
64 void nxt_py_asgi_websocket_handler(nxt_unit_websocket_frame_t *ws);
65 void nxt_py_asgi_websocket_close_handler(nxt_unit_request_info_t *req);
66 
67 int nxt_py_asgi_lifespan_startup(nxt_py_asgi_ctx_data_t *ctx_data);
68 int nxt_py_asgi_lifespan_shutdown(nxt_unit_ctx_t *ctx);
69 
70 
71 #endif  /* _NXT_PYTHON_ASGI_H_INCLUDED_ */
72