#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include "../../resolve.h"
#include "mi_datagram.h"
#include "datagram_fnc.h"
#include "mi_datagram_parser.h"
#include "mi_datagram_writer.h"

Go to the source code of this file.
Defines | |
| #define | AF_LOCAL AF_UNIX |
| #define | mi_create_dtgram_replysocket(_socketfd, _socket_domain, _err) |
| #define | SUN_LEN(sa) |
Functions | |
| static struct mi_handler * | build_async_handler (unsigned int sock_domain, struct sockaddr *reply_addr, unsigned int reply_addr_len) |
| static void | datagram_close_async (struct mi_root *mi_rpl, struct mi_handler *hdl, int done) |
| static void | free_async_handler (struct mi_handler *hdl) |
| static int | identify_command (datagram_stream *dtgram, struct mi_cmd **f) |
| void | mi_datagram_server (int rx_sock, int tx_sock) |
| int | mi_init_datagram_buffer (void) |
| int | mi_init_datagram_server (sockaddr_dtgram *addr, unsigned int socket_domain, rx_tx_sockets *socks, int mode, int uid, int gid) |
| static int | mi_send_dgram (int fd, char *buf, unsigned int len, const struct sockaddr *to, int tolen, int timeout) |
| static int | mi_sock_check (int fd, char *fname) |
| reply socket security checks: checks if fd is a socket, is not hardlinked and it's not a softlink opened file descriptor + file name (for soft link check) | |
Variables | |
| int | flags |
| static char * | mi_buf = 0 |
| static unsigned int | mi_socket_domain |
| int | mi_socket_timeout |
| union { | |
| struct sockaddr_in in | |
| struct sockaddr_un un | |
| } | reply_addr |
| static unsigned int | reply_addr_len |
Definition in file datagram_fnc.c.
| #define AF_LOCAL AF_UNIX |
Definition at line 63 of file datagram_fnc.c.
| #define mi_create_dtgram_replysocket | ( | _socketfd, | |||
| _socket_domain, | |||||
| _err | ) |
Definition at line 81 of file datagram_fnc.c.
Referenced by datagram_close_async(), and mi_init_datagram_server().
| #define SUN_LEN | ( | sa | ) |
Value:
( strlen((sa)->sun_path) + \
(size_t)(((struct sockaddr_un*)0)->sun_path) )
Definition at line 58 of file datagram_fnc.c.
Referenced by mi_init_datagram_server(), and write_to_unixsock().
| static struct mi_handler* build_async_handler | ( | unsigned int | sock_domain, | |
| struct sockaddr * | reply_addr, | |||
| unsigned int | reply_addr_len | |||
| ) | [static, read] |
Definition at line 381 of file datagram_fnc.c.
References my_socket_address::address, my_socket_address::address_len, AF_LOCAL, datagram_close_async(), my_socket_address::domain, mi_handler::handler_f, my_sock_address::inet_v4, my_sock_address::inet_v6, LM_CRIT, LM_DBG, LM_ERR, NULL, mi_handler::param, shm_free, shm_malloc(), and my_sock_address::unix_deb.
| static void datagram_close_async | ( | struct mi_root * | mi_rpl, | |
| struct mi_handler * | hdl, | |||
| int | done | |||
| ) | [static] |
Definition at line 325 of file datagram_fnc.c.
References my_socket_address::address, my_socket_address::address_len, AF_LOCAL, datagram_str::current, DATAGRAM_SOCK_BUF_SIZE, my_socket_address::domain, free_async_handler(), free_mi_tree(), LM_DBG, LM_ERR, MI_COMMAND_FAILED, MI_COMMAND_FAILED_LEN, mi_create_dtgram_replysocket, mi_datagram_write_tree(), mi_send_dgram(), mi_socket_timeout, mi_handler::param, pkg_free, pkg_malloc, reply_addr, reply_addr_len, and datagram_str::start.
Referenced by build_async_handler().
| static void free_async_handler | ( | struct mi_handler * | hdl | ) | [inline, static] |
| static int identify_command | ( | datagram_stream * | dtgram, | |
| struct mi_cmd ** | f | |||
| ) | [static] |
Definition at line 263 of file datagram_fnc.c.
References datagram_str::current, datagram_str::len, LM_DBG, LM_ERR, lookup_mi_cmd(), MI_CMD_SEPARATOR, and datagram_str::start.
Referenced by mi_datagram_server().
| void mi_datagram_server | ( | int | rx_sock, | |
| int | tx_sock | |||
| ) |
Definition at line 423 of file datagram_fnc.c.
References mi_root::async_hdl, build_async_handler(), datagram_str::current, DATAGRAM_SOCK_BUF_SIZE, mi_cmd::f, mi_cmd::flags, free_async_handler(), free_mi_tree(), identify_command(), datagram_str::len, len, LM_DBG, LM_ERR, MI_ASYNC_RPL_FLAG, mi_buf, MI_COMMAND_AVAILABLE_LEN, MI_COMMAND_FAILED, MI_COMMAND_FAILED_LEN, MI_COMMAND_NOT_AVAILABLE, mi_datagram_parse_tree(), mi_datagram_write_tree(), MI_INTERNAL_ERROR, MI_INTERNAL_ERROR_LEN, MI_NO_INPUT_FLAG, MI_PARSE_ERROR, MI_PARSE_ERROR_LEN, MI_ROOT_ASYNC_RPL, mi_send_dgram(), mi_socket_domain, mi_socket_timeout, mi_cmd::name, NULL, reply_addr, reply_addr_len, run_mi_cmd(), _str::s, and datagram_str::start.
Referenced by datagram_process().
| int mi_init_datagram_buffer | ( | void | ) |
Definition at line 175 of file datagram_fnc.c.
References DATAGRAM_SOCK_BUF_SIZE, LM_ERR, mi_buf, NULL, and pkg_malloc.
Referenced by datagram_process().
| int mi_init_datagram_server | ( | sockaddr_dtgram * | addr, | |
| unsigned int | socket_domain, | |||
| rx_tx_sockets * | socks, | |||
| int | mode, | |||
| int | uid, | |||
| int | gid | |||
| ) |
Definition at line 99 of file datagram_fnc.c.
References AF_LOCAL, LM_DBG, LM_ERR, mi_create_dtgram_replysocket, mi_sock_check(), mi_socket_domain, rx_tx::rx_sock, sockaddr_union::s, sockaddru_len, SUN_LEN, rx_tx::tx_sock, sockaddr_dtgram::udp_addr, and sockaddr_dtgram::unix_addr.
Referenced by pre_datagram_process().
| static int mi_send_dgram | ( | int | fd, | |
| char * | buf, | |||
| unsigned int | len, | |||
| const struct sockaddr * | to, | |||
| int | tolen, | |||
| int | timeout | |||
| ) | [static] |
Definition at line 237 of file datagram_fnc.c.
References DATAGRAM_SOCK_BUF_SIZE, and LM_DBG.
Referenced by datagram_close_async(), and mi_datagram_server().
| int mi_sock_check | ( | int | fd, | |
| char * | fname | |||
| ) | [static] |
reply socket security checks: checks if fd is a socket, is not hardlinked and it's not a softlink opened file descriptor + file name (for soft link check)
Definition at line 189 of file datagram_fnc.c.
References LM_ERR.
Referenced by mi_init_datagram_server().
| int flags |
Definition at line 66 of file datagram_fnc.c.
| struct sockaddr_in in |
char* mi_buf = 0 [static] |
Definition at line 67 of file datagram_fnc.c.
unsigned int mi_socket_domain [static] |
Definition at line 77 of file datagram_fnc.c.
Referenced by mi_datagram_server(), mi_destroy(), mi_init_datagram_server(), mi_mod_init(), and pre_datagram_process().
Timeout for sending replies in milliseconds
Definition at line 90 of file mi_datagram.c.
Referenced by datagram_close_async(), and mi_datagram_server().
union { ... } reply_addr [static] |
Referenced by datagram_close_async(), and mi_datagram_server().
unsigned int reply_addr_len [static] |
Definition at line 74 of file datagram_fnc.c.
Referenced by datagram_close_async(), and mi_datagram_server().
| struct sockaddr_un un |
Definition at line 70 of file datagram_fnc.c.
1.5.6