111Sigor@sysoev.ru 211Sigor@sysoev.ru /* 311Sigor@sysoev.ru * Copyright (C) Igor Sysoev 411Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 511Sigor@sysoev.ru */ 611Sigor@sysoev.ru 711Sigor@sysoev.ru #ifndef _NXT_PORT_H_INCLUDED_ 811Sigor@sysoev.ru #define _NXT_PORT_H_INCLUDED_ 911Sigor@sysoev.ru 1011Sigor@sysoev.ru 1114Sigor@sysoev.ru typedef struct { 1214Sigor@sysoev.ru uint32_t stream; 1314Sigor@sysoev.ru 1414Sigor@sysoev.ru uint16_t type; 1514Sigor@sysoev.ru uint8_t last; /* 1 bit */ 1614Sigor@sysoev.ru } nxt_port_msg_t; 1714Sigor@sysoev.ru 1814Sigor@sysoev.ru 1914Sigor@sysoev.ru typedef struct { 2014Sigor@sysoev.ru nxt_queue_link_t link; 2114Sigor@sysoev.ru nxt_buf_t *buf; 2214Sigor@sysoev.ru size_t share; 2314Sigor@sysoev.ru nxt_fd_t fd; 2414Sigor@sysoev.ru nxt_port_msg_t port_msg; 2514Sigor@sysoev.ru } nxt_port_send_msg_t; 2614Sigor@sysoev.ru 2714Sigor@sysoev.ru 28*20Sigor@sysoev.ru struct nxt_port_recv_msg_s { 2914Sigor@sysoev.ru uint32_t stream; 3014Sigor@sysoev.ru uint16_t type; 3114Sigor@sysoev.ru 3214Sigor@sysoev.ru nxt_fd_t fd; 3314Sigor@sysoev.ru nxt_buf_t *buf; 3414Sigor@sysoev.ru nxt_port_t *port; 35*20Sigor@sysoev.ru }; 3614Sigor@sysoev.ru 3714Sigor@sysoev.ru 3814Sigor@sysoev.ru struct nxt_port_s { 3914Sigor@sysoev.ru /* Must be the first field. */ 4014Sigor@sysoev.ru nxt_fd_event_t socket; 4114Sigor@sysoev.ru 4214Sigor@sysoev.ru nxt_queue_t messages; /* of nxt_port_send_msg_t */ 4314Sigor@sysoev.ru 4414Sigor@sysoev.ru /* Maximum size of message part. */ 4514Sigor@sysoev.ru uint32_t max_size; 4614Sigor@sysoev.ru /* Maximum interleave of message parts. */ 4714Sigor@sysoev.ru uint32_t max_share; 4814Sigor@sysoev.ru 4914Sigor@sysoev.ru nxt_port_handler_t handler; 5014Sigor@sysoev.ru void *data; 5114Sigor@sysoev.ru 5214Sigor@sysoev.ru nxt_mem_pool_t *mem_pool; 5314Sigor@sysoev.ru nxt_buf_t *free_bufs; 5414Sigor@sysoev.ru nxt_socket_t pair[2]; 5514Sigor@sysoev.ru 5614Sigor@sysoev.ru nxt_pid_t pid; 5714Sigor@sysoev.ru uint32_t engine; 5814Sigor@sysoev.ru }; 5914Sigor@sysoev.ru 6014Sigor@sysoev.ru 6111Sigor@sysoev.ru #define NXT_PORT_MSG_MAX NXT_PORT_MSG_DATA 6211Sigor@sysoev.ru 6311Sigor@sysoev.ru typedef enum { 6411Sigor@sysoev.ru NXT_PORT_MSG_QUIT = 0, 6511Sigor@sysoev.ru NXT_PORT_MSG_NEW_PORT, 6614Sigor@sysoev.ru NXT_PORT_MSG_CHANGE_FILE, 6711Sigor@sysoev.ru NXT_PORT_MSG_DATA, 6811Sigor@sysoev.ru } nxt_port_msg_type_e; 6911Sigor@sysoev.ru 7011Sigor@sysoev.ru 7111Sigor@sysoev.ru typedef struct { 7214Sigor@sysoev.ru nxt_pid_t pid; 7314Sigor@sysoev.ru uint32_t engine; 7414Sigor@sysoev.ru size_t max_size; 7514Sigor@sysoev.ru size_t max_share; 7614Sigor@sysoev.ru } nxt_port_msg_new_port_t; 7711Sigor@sysoev.ru 7811Sigor@sysoev.ru 7911Sigor@sysoev.ru /* 8014Sigor@sysoev.ru * nxt_port_data_t size is allocation size 8114Sigor@sysoev.ru * which enables effective reuse of memory pool cache. 8211Sigor@sysoev.ru */ 8311Sigor@sysoev.ru typedef union { 8411Sigor@sysoev.ru nxt_buf_t buf; 8514Sigor@sysoev.ru nxt_port_msg_new_port_t new_port; 8614Sigor@sysoev.ru } nxt_port_data_t; 8711Sigor@sysoev.ru 8811Sigor@sysoev.ru 8914Sigor@sysoev.ru nxt_int_t nxt_port_socket_init(nxt_task_t *task, nxt_port_t *port, 9014Sigor@sysoev.ru size_t max_size); 9114Sigor@sysoev.ru void nxt_port_destroy(nxt_port_t *port); 9214Sigor@sysoev.ru void nxt_port_write_enable(nxt_task_t *task, nxt_port_t *port); 9314Sigor@sysoev.ru void nxt_port_write_close(nxt_port_t *port); 9414Sigor@sysoev.ru void nxt_port_read_enable(nxt_task_t *task, nxt_port_t *port); 9514Sigor@sysoev.ru void nxt_port_read_close(nxt_port_t *port); 9614Sigor@sysoev.ru nxt_int_t nxt_port_socket_write(nxt_task_t *task, nxt_port_t *port, 9711Sigor@sysoev.ru nxt_uint_t type, nxt_fd_t fd, uint32_t stream, nxt_buf_t *b); 9814Sigor@sysoev.ru 9914Sigor@sysoev.ru void nxt_port_create(nxt_thread_t *thread, nxt_port_t *port, 10014Sigor@sysoev.ru nxt_port_handler_t *handlers); 101*20Sigor@sysoev.ru void nxt_port_write(nxt_task_t *task, nxt_runtime_t *rt, nxt_uint_t type, 10214Sigor@sysoev.ru nxt_fd_t fd, uint32_t stream, nxt_buf_t *b); 103*20Sigor@sysoev.ru void nxt_port_send_new_port(nxt_task_t *task, nxt_runtime_t *rt, 10414Sigor@sysoev.ru nxt_port_t *port); 105*20Sigor@sysoev.ru void nxt_port_change_log_file(nxt_task_t *task, nxt_runtime_t *rt, 10611Sigor@sysoev.ru nxt_uint_t slot, nxt_fd_t fd); 10711Sigor@sysoev.ru 10814Sigor@sysoev.ru void nxt_port_quit_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 10914Sigor@sysoev.ru void nxt_port_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 11014Sigor@sysoev.ru void nxt_port_change_log_file_handler(nxt_task_t *task, 11111Sigor@sysoev.ru nxt_port_recv_msg_t *msg); 11214Sigor@sysoev.ru void nxt_port_data_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 11314Sigor@sysoev.ru void nxt_port_empty_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 11411Sigor@sysoev.ru 11511Sigor@sysoev.ru 11611Sigor@sysoev.ru #endif /* _NXT_PORT_H_INCLUDED_ */ 117