Lines Matching defs:imsgbuf
39 imsgbuf_init(struct imsgbuf *imsgbuf, int fd)
41 imsgbuf->w = msgbuf_new_reader(IMSG_HEADER_SIZE, imsg_parse_hdr,
42 imsgbuf);
43 if (imsgbuf->w == NULL)
45 imsgbuf->pid = getpid();
46 imsgbuf->maxsize = MAX_IMSGSIZE;
47 imsgbuf->fd = fd;
48 imsgbuf->flags = 0;
53 imsgbuf_allow_fdpass(struct imsgbuf *imsgbuf)
55 imsgbuf->flags |= IMSG_ALLOW_FDPASS;
59 imsgbuf_set_maxsize(struct imsgbuf *imsgbuf, uint32_t maxsize)
65 imsgbuf->maxsize = maxsize;
70 imsgbuf_read(struct imsgbuf *imsgbuf)
72 if (imsgbuf->flags & IMSG_ALLOW_FDPASS)
73 return msgbuf_read(imsgbuf->fd, imsgbuf->w);
75 return ibuf_read(imsgbuf->fd, imsgbuf->w);
79 imsgbuf_write(struct imsgbuf *imsgbuf)
81 if (imsgbuf->flags & IMSG_ALLOW_FDPASS)
82 return msgbuf_write(imsgbuf->fd, imsgbuf->w);
84 return ibuf_write(imsgbuf->fd, imsgbuf->w);
88 imsgbuf_flush(struct imsgbuf *imsgbuf)
90 while (imsgbuf_queuelen(imsgbuf) > 0) {
91 if (imsgbuf_write(imsgbuf) == -1)
98 imsgbuf_clear(struct imsgbuf *imsgbuf)
100 msgbuf_free(imsgbuf->w);
101 imsgbuf->w = NULL;
105 imsgbuf_queuelen(struct imsgbuf *imsgbuf)
107 return msgbuf_queuelen(imsgbuf->w);
111 imsg_get(struct imsgbuf *imsgbuf, struct imsg *imsg)
116 if ((buf = msgbuf_get(imsgbuf->w)) == NULL)
188 imsg_compose(struct imsgbuf *imsgbuf, uint32_t type, uint32_t id, pid_t pid,
193 if ((wbuf = imsg_create(imsgbuf, type, id, pid, datalen)) == NULL)
200 imsg_close(imsgbuf, wbuf);
206 imsg_composev(struct imsgbuf *imsgbuf, uint32_t type, uint32_t id, pid_t pid,
216 if ((wbuf = imsg_create(imsgbuf, type, id, pid, datalen)) == NULL)
224 imsg_close(imsgbuf, wbuf);
234 imsg_compose_ibuf(struct imsgbuf *imsgbuf, uint32_t type, uint32_t id,
241 if (ibuf_size(buf) + IMSG_HEADER_SIZE > imsgbuf->maxsize) {
250 hdr.pid = imsgbuf->pid;
257 ibuf_close(imsgbuf->w, hdrbuf);
258 ibuf_close(imsgbuf->w, buf);
273 imsg_forward(struct imsgbuf *imsgbuf, struct imsg *msg)
282 if ((wbuf = imsg_create(imsgbuf, msg->hdr.type, msg->hdr.peerid,
293 imsg_close(imsgbuf, wbuf);
298 imsg_create(struct imsgbuf *imsgbuf, uint32_t type, uint32_t id, pid_t pid,
305 if (datalen > imsgbuf->maxsize) {
313 hdr.pid = imsgbuf->pid;
314 if ((wbuf = ibuf_dynamic(datalen, imsgbuf->maxsize)) == NULL) {
335 imsg_close(struct imsgbuf *imsgbuf, struct ibuf *msg)
343 ibuf_close(imsgbuf->w, msg);
355 struct imsgbuf *imsgbuf = arg;
365 if (len < IMSG_HEADER_SIZE || len > imsgbuf->maxsize) {