Annotation of embedaddon/tmux/compat/imsg.h, revision 1.1.1.1
1.1 misho 1: /* $OpenBSD: imsg.h,v 1.4 2017/03/24 09:34:12 nicm Exp $ */
2:
3: /*
4: * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org>
5: * Copyright (c) 2006, 2007, 2008 Reyk Floeter <reyk@openbsd.org>
6: * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
7: *
8: * Permission to use, copy, modify, and distribute this software for any
9: * purpose with or without fee is hereby granted, provided that the above
10: * copyright notice and this permission notice appear in all copies.
11: *
12: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19: */
20:
21: #ifndef _IMSG_H_
22: #define _IMSG_H_
23:
24: #define IBUF_READ_SIZE 65535
25: #define IMSG_HEADER_SIZE sizeof(struct imsg_hdr)
26: #define MAX_IMSGSIZE 16384
27:
28: struct ibuf {
29: TAILQ_ENTRY(ibuf) entry;
30: u_char *buf;
31: size_t size;
32: size_t max;
33: size_t wpos;
34: size_t rpos;
35: int fd;
36: };
37:
38: struct msgbuf {
39: TAILQ_HEAD(, ibuf) bufs;
40: uint32_t queued;
41: int fd;
42: };
43:
44: struct ibuf_read {
45: u_char buf[IBUF_READ_SIZE];
46: u_char *rptr;
47: size_t wpos;
48: };
49:
50: struct imsg_fd {
51: TAILQ_ENTRY(imsg_fd) entry;
52: int fd;
53: };
54:
55: struct imsgbuf {
56: TAILQ_HEAD(, imsg_fd) fds;
57: struct ibuf_read r;
58: struct msgbuf w;
59: int fd;
60: pid_t pid;
61: };
62:
63: #define IMSGF_HASFD 1
64:
65: struct imsg_hdr {
66: uint32_t type;
67: uint16_t len;
68: uint16_t flags;
69: uint32_t peerid;
70: uint32_t pid;
71: };
72:
73: struct imsg {
74: struct imsg_hdr hdr;
75: int fd;
76: void *data;
77: };
78:
79:
80: /* buffer.c */
81: struct ibuf *ibuf_open(size_t);
82: struct ibuf *ibuf_dynamic(size_t, size_t);
83: int ibuf_add(struct ibuf *, const void *, size_t);
84: void *ibuf_reserve(struct ibuf *, size_t);
85: void *ibuf_seek(struct ibuf *, size_t, size_t);
86: size_t ibuf_size(struct ibuf *);
87: size_t ibuf_left(struct ibuf *);
88: void ibuf_close(struct msgbuf *, struct ibuf *);
89: int ibuf_write(struct msgbuf *);
90: void ibuf_free(struct ibuf *);
91: void msgbuf_init(struct msgbuf *);
92: void msgbuf_clear(struct msgbuf *);
93: int msgbuf_write(struct msgbuf *);
94: void msgbuf_drain(struct msgbuf *, size_t);
95:
96: /* imsg.c */
97: void imsg_init(struct imsgbuf *, int);
98: ssize_t imsg_read(struct imsgbuf *);
99: ssize_t imsg_get(struct imsgbuf *, struct imsg *);
100: int imsg_compose(struct imsgbuf *, uint32_t, uint32_t, pid_t, int,
101: const void *, uint16_t);
102: int imsg_composev(struct imsgbuf *, uint32_t, uint32_t, pid_t, int,
103: const struct iovec *, int);
104: struct ibuf *imsg_create(struct imsgbuf *, uint32_t, uint32_t, pid_t, uint16_t);
105: int imsg_add(struct ibuf *, const void *, uint16_t);
106: void imsg_close(struct imsgbuf *, struct ibuf *);
107: void imsg_free(struct imsg *);
108: int imsg_flush(struct imsgbuf *);
109: void imsg_clear(struct imsgbuf *);
110:
111: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>