/* include unph */ /* Our own header. Tabs are set for 4 spaces, not 8 */ #ifndef __unp_h #define __unp_h #include /* basic system data types */ #include /* basic socket definitions */ #include /* timeval{} for select() */ #include /* timespec{} for pselect() */ #include /* includes unsafely */ #include /* sockaddr_in{} and other Internet defns */ #include /* inet(3) functions */ #include #include /* for nonblocking */ #include #include #include #include #include #include /* for S_xxx file mode constants */ #include /* for iovec{} and readv/writev */ #include #include #include /* for Unix domain sockets */ #include #include #include # include /* for convenience */ # include /* OpenBSD prereq for sysctl.h */ # include # include /* for convenience */ //# include /* for kqueue */ # include /* for convenience */ /* Three headers are normally needed for socket/file ioctl's: * , , and . */ # include //# include //# include # include //# include #ifndef __PROTOCOL_H__ #include "protocol.h" #endif #ifndef __GLOBAL_H__ #include "global.h" #endif #ifndef __PRE_THREAD_MODEL_H__ #include "pre_thread_model.h" #endif #include #include /* OSF/1 actually disables recv() and send() in */ #ifdef __osf__ #undef recv #undef send #define recv(a,b,c,d) recvfrom(a,b,c,d,0,0) #define send(a,b,c,d) sendto(a,b,c,d,0,0) #endif #ifndef INADDR_NONE /* $$.Ic INADDR_NONE$$ */ #define INADDR_NONE 0xffffffff /* should have been in */ #endif #ifndef SHUT_RD /* these three POSIX names are new */ #define SHUT_RD 0 /* shutdown for reading */ #define SHUT_WR 1 /* shutdown for writing */ #define SHUT_RDWR 2 /* shutdown for reading and writing */ /* $$.Ic SHUT_RD$$ */ /* $$.Ic SHUT_WR$$ */ /* $$.Ic SHUT_RDWR$$ */ #endif /* *INDENT-OFF* */ #ifndef INET_ADDRSTRLEN /* $$.Ic INET_ADDRSTRLEN$$ */ #define INET_ADDRSTRLEN 16 /* "ddd.ddd.ddd.ddd\0" 1234567890123456 */ #endif /* Define following even if IPv6 not supported, so we can always allocate an adequately sized buffer without #ifdefs in the code. */ #ifndef INET6_ADDRSTRLEN /* $$.Ic INET6_ADDRSTRLEN$$ */ #define INET6_ADDRSTRLEN 46 /* max size of IPv6 address string: "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0" 1234567890123456789012345678901234567890123456 */ #endif /* *INDENT-ON* */ /* Define bzero() as a macro if it's not in standard C library. */ #define bzero(ptr,n) memset(ptr, 0, n) /* $$.If bzero$$ */ /* $$.If memset$$ */ /* Older resolvers do not have gethostbyname2() */ #define gethostbyname2(host,family) gethostbyname((host)) /* The structure returned by recvfrom_flags() */ struct unp_in_pktinfo { struct in_addr ipi_addr; /* dst IPv4 address */ int ipi_ifindex;/* received interface index */ }; /* $$.It unp_in_pktinfo$$ */ /* $$.Ib ipi_addr$$ */ /* $$.Ib ipi_ifindex$$ */ /* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few implementations support them today. These two macros really need an ALIGN() macro, but each implementation does this differently. */ #ifndef CMSG_LEN /* $$.Im CMSG_LEN$$ */ #define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size)) #endif #ifndef CMSG_SPACE /* $$.Im CMSG_SPACE$$ */ #define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size)) #endif /* POSIX requires the SUN_LEN() macro, but not all implementations DefinE it (yet). Note that this 4.4BSD macro works regardless whether there is a length field or not. */ #ifndef SUN_LEN /* $$.Im SUN_LEN$$ */ # define SUN_LEN(su) \ (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path)) #endif /* POSIX renames "Unix domain" as "local IPC." Not all systems DefinE AF_LOCAL and PF_LOCAL (yet). */ #ifndef AF_LOCAL #define AF_LOCAL AF_UNIX #endif #ifndef PF_LOCAL #define PF_LOCAL PF_UNIX #endif /* POSIX requires that an #include of DefinE INFTIM, but many systems still DefinE it in . We don't want to include all the STREAMS stuff if it's not needed, so we just DefinE INFTIM here. This is the standard value, but there's no guarantee it is -1. */ #ifndef INFTIM #define INFTIM (-1) /* infinite poll timeout */ /* $$.Ic INFTIM$$ */ #define INFTIM_UNPH /* tell unpxti.h we defined it */ #endif /* Following could be derived from SOMAXCONN in , but many kernels still #define it as 5, while actually supporting many more */ #define LISTENQ 1024 /* 2nd argument to listen() */ /* Miscellaneous constants */ #define MAXLINE 4096 /* max text line length */ #define BUFFSIZE 8192 /* buffer size for reads and writes */ /* Define some port number that can be used for our examples */ #define SERV_PORT 9877 /* TCP and UDP */ #define SERV_PORT_STR "9877" /* TCP and UDP */ #define UNIXSTR_PATH "/tmp/unix.str" /* Unix domain stream */ #define UNIXDG_PATH "/tmp/unix.dg" /* Unix domain datagram */ /* $$.ix [LISTENQ]~constant,~definition~of$$ */ /* $$.ix [MAXLINE]~constant,~definition~of$$ */ /* $$.ix [BUFFSIZE]~constant,~definition~of$$ */ /* $$.ix [SERV_PORT]~constant,~definition~of$$ */ /* $$.ix [UNIXSTR_PATH]~constant,~definition~of$$ */ /* $$.ix [UNIXDG_PATH]~constant,~definition~of$$ */ /* Following shortens all the typecasts of pointer arguments: */ #define SA struct sockaddr #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) /* default file access permissions for new files */ #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH) /* default permissions for new directories */ typedef void Sigfunc(int); /* for signal handlers */ #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) > (b) ? (a) : (b)) /* end unph */ /* prototypes for our own library functions */ int connect_nonb(int, const SA *, socklen_t, int); int connect_timeo(int, const SA *, socklen_t, int); int daemon_init(const char *, int); void daemon_inetd(const char *, int); void dg_cli(FILE *, int, const SA *, socklen_t); void dg_echo(int, SA *, socklen_t); int family_to_level(int); char *gf_time(void); void heartbeat_cli(int, int, int); void heartbeat_serv(int, int, int); struct addrinfo *host_serv(const char *, const char *, int, int); int inet_srcrt_add(char *); u_char *inet_srcrt_init(int); void inet_srcrt_print(u_char *, int); void inet6_srcrt_print(void *); char **my_addrs(int *); int readable_timeo(int, int); ssize_t readline(int, void *, size_t); ssize_t readn(int, void *, size_t); ssize_t read_fd(int, void *, size_t, int *); ssize_t recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *, struct unp_in_pktinfo *); Sigfunc *signal_intr(int, Sigfunc *); int sock_bind_wild(int, int); int sock_cmp_addr(const SA *, const SA *, socklen_t); int sock_cmp_port(const SA *, const SA *, socklen_t); int sock_get_port(const SA *, socklen_t); void sock_set_addr(SA *, socklen_t, const void *); void sock_set_port(SA *, socklen_t, int); void sock_set_wild(SA *, socklen_t); char *sock_ntop(const SA *, socklen_t); char *sock_ntop_host(const SA *, socklen_t); int sockfd_to_family(int); void str_echo(int); void str_cli(FILE *, int); int tcp_connect(const char *, const char *); int tcp_listen(const char *, const char *, socklen_t *); void tv_sub(struct timeval *, struct timeval *); int udp_client(const char *, const char *, SA **, socklen_t *); int udp_connect(const char *, const char *); int udp_server(const char *, const char *, socklen_t *); int writable_timeo(int, int); ssize_t writen(int, const void *, size_t); ssize_t write_fd(int, void *, size_t, int); uint16_t in_cksum(uint16_t *, int); /* prototypes for our own library wrapper functions */ void Connect_timeo(int, const SA *, socklen_t, int); int Family_to_level(int); struct addrinfo *Host_serv(const char *, const char *, int, int); const char *Inet_ntop(int, const void *, char *, size_t); void Inet_pton(int, const char *, void *); char *If_indextoname(unsigned int, char *); unsigned int If_nametoindex(const char *); struct if_nameindex *If_nameindex(void); char **My_addrs(int *); ssize_t Read_fd(int, void *, size_t, int *); int Readable_timeo(int, int); ssize_t Recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *, struct unp_in_pktinfo *); Sigfunc *Signal(int, Sigfunc *); Sigfunc *Signal_intr(int, Sigfunc *); int Sock_bind_wild(int, int); char *Sock_ntop(const SA *, socklen_t); char *Sock_ntop_host(const SA *, socklen_t); int Sockfd_to_family(int); int Tcp_connect(const char *, const char *); int Tcp_listen(const char *, const char *, socklen_t *); int Udp_client(const char *, const char *, SA **, socklen_t *); int Udp_connect(const char *, const char *); int Udp_server(const char *, const char *, socklen_t *); ssize_t Write_fd(int, void *, size_t, int); int Writable_timeo(int, int); /* prototypes for our Unix wrapper functions: see {Sec errors} */ void *Calloc(size_t, size_t); void Close(int); void Dup2(int, int); int Fcntl(int, int, int); void Gettimeofday(struct timeval *, void *); int Ioctl(int, int, void *); pid_t Fork(void); void *Malloc(size_t); int Mkstemp(char *); void *Mmap(void *, size_t, int, int, int, off_t); int Open(const char *, int, mode_t); void Pipe(int *fds); ssize_t Read(int, void *, size_t); void Sigaddset(sigset_t *, int); void Sigdelset(sigset_t *, int); void Sigemptyset(sigset_t *); void Sigfillset(sigset_t *); int Sigismember(const sigset_t *, int); void Sigpending(sigset_t *); void Sigprocmask(int, const sigset_t *, sigset_t *); char *Strdup(const char *); long Sysconf(int); void Sysctl(int *, u_int, void *, size_t *, void *, size_t); void Unlink(const char *); pid_t Wait(int *); pid_t Waitpid(pid_t, int *, int); void Write(int, void *, size_t); /* prototypes for our stdio wrapper functions: see {Sec errors} */ void Fclose(FILE *); FILE *Fdopen(int, const char *); char *Fgets(char *, int, FILE *); FILE *Fopen(const char *, const char *); void Fputs(const char *, FILE *); /* prototypes for our socket wrapper functions: see {Sec errors} */ int Accept(int, SA *, socklen_t *); void Bind(int, const SA *, socklen_t); void Connect(int, const SA *, socklen_t); void Getpeername(int, SA *, socklen_t *); void Getsockname(int, SA *, socklen_t *); void Getsockopt(int, int, int, void *, socklen_t *); void Listen(int, int); ssize_t Readline(int, void *, size_t); ssize_t Readn(int, void *, size_t); ssize_t Recv(int, void *, size_t, int); ssize_t Recvfrom(int, void *, size_t, int, SA *, socklen_t *); ssize_t Recvmsg(int, struct msghdr *, int); int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *); void Send(int, const void *, size_t, int); void Sendto(int, const void *, size_t, int, const SA *, socklen_t); void Sendmsg(int, const struct msghdr *, int); void Setsockopt(int, int, int, const void *, socklen_t); void Shutdown(int, int); int Sockatmark(int); int Socket(int, int, int); void Socketpair(int, int, int, int *); void Writen(int, void *, size_t); int ConnectWait(int, struct sockaddr *, int, int); void err_dump(const char *, ...); void err_msg(const char *, ...); void err_quit(const char *, ...); void err_ret(const char *, ...); void err_sys(const char *, ...); /* Read configuration func */ extern int GetProfileInt(char *part, char *spart, int dval); extern char *GetProfile(char *part, char *spart, char *rval, char *dval ); extern int SetIniName(char * buf); /* roolu util func */ int devide(char **val, char *str, char delim); char * timeToString(struct tm *); char *makeLogString(); void WriteSHLog(char *, ...); void WriteSHLog_safe(char *, ...); /* new status inner func */ void addServerToList(servinfo_t *, MYSQL_ROW); void vrcd_thread_make(int); void report_thread_make(int); void chk_rtime_update_serv_status(); int rcacctFind(char **, char *); void processing_server_status(int, int, servinfo_t *); void UpdateStatus(unsigned int, unsigned int, char *); int timedCheck(char *, int, int); int socket_open_with_timeout(int, servinfo_t *); void HandleTimeOut(int); int increaseDeadCount(unsigned int, char *); void * report_thread_update_main(void *); int update_report_func(); void update_server_list(servinfo_t *, servinfo_t *); void * report_thread_send_main(void *); void * vrcd_thread_main(void *); void updateShm(struct svr_status *, int, int); char *make_status_string(int *); int get_sizeof_shm(); void SendToWebServ(const char *, char *); void view_header_packet(struct common_message_header *); void view_serv_status_packet(struct svr_status *); void view_rcmng_header_packet(rcmng_cheader_t *); void view_servinfo_t_packet(servinfo_t *); servinfo_t *get_shm_start_pointer(); servinfo_t *get_shm_start_pointer_readonly(); void makedaemon(int); void SafeProcessRunSpinWait(void); #endif /* __unp_h */