[BACK]Return to imsg.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Annotation of src/usr.bin/tmux/imsg.h, Revision 1.3

1.3     ! nicm        1: /*     $OpenBSD: imsg.h,v 1.2 2009/09/15 18:12:51 jacekm Exp $ */
1.1       nicm        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: #define READ_BUF_SIZE          65535
                     22: #define IMSG_HEADER_SIZE       sizeof(struct imsg_hdr)
                     23: #define MAX_IMSGSIZE           16384
                     24:
                     25: struct buf {
                     26:        TAILQ_ENTRY(buf)         entry;
                     27:        u_char                  *buf;
                     28:        size_t                   size;
                     29:        size_t                   max;
                     30:        size_t                   wpos;
                     31:        size_t                   rpos;
                     32:        int                      fd;
                     33: };
                     34:
                     35: struct msgbuf {
                     36:        TAILQ_HEAD(, buf)        bufs;
                     37:        u_int32_t                queued;
                     38:        int                      fd;
                     39: };
                     40:
                     41: struct buf_read {
                     42:        u_char                   buf[READ_BUF_SIZE];
                     43:        u_char                  *rptr;
                     44:        size_t                   wpos;
                     45: };
                     46:
                     47: struct imsg_fd {
                     48:        TAILQ_ENTRY(imsg_fd)    entry;
                     49:        int                     fd;
                     50: };
                     51:
                     52: struct imsgbuf {
                     53:        TAILQ_HEAD(, imsg_fd)    fds;
                     54:        struct buf_read          r;
                     55:        struct msgbuf            w;
                     56:        int                      fd;
                     57:        pid_t                    pid;
                     58: };
                     59:
                     60: #define IMSGF_HASFD    1
                     61:
                     62: struct imsg_hdr {
                     63:        u_int32_t        type;
                     64:        u_int16_t        len;
                     65:        u_int16_t        flags;
                     66:        u_int32_t        peerid;
                     67:        u_int32_t        pid;
                     68: };
                     69:
                     70: struct imsg {
                     71:        struct imsg_hdr  hdr;
                     72:        int              fd;
                     73:        void            *data;
                     74: };
                     75:
                     76:
                     77: /* buffer.c */
                     78: struct buf     *buf_open(size_t);
                     79: struct buf     *buf_dynamic(size_t, size_t);
                     80: int             buf_add(struct buf *, const void *, size_t);
                     81: void           *buf_reserve(struct buf *, size_t);
                     82: void           *buf_seek(struct buf *, size_t, size_t);
                     83: size_t          buf_size(struct buf *);
                     84: size_t          buf_left(struct buf *);
                     85: void            buf_close(struct msgbuf *, struct buf *);
                     86: int             buf_write(struct msgbuf *);
                     87: void            buf_free(struct buf *);
                     88: void            msgbuf_init(struct msgbuf *);
                     89: void            msgbuf_clear(struct msgbuf *);
                     90: int             msgbuf_write(struct msgbuf *);
1.2       jacekm     91: void            msgbuf_drain(struct msgbuf *, size_t);
1.1       nicm       92:
                     93: /* imsg.c */
                     94: void    imsg_init(struct imsgbuf *, int);
                     95: ssize_t         imsg_read(struct imsgbuf *);
                     96: ssize_t         imsg_get(struct imsgbuf *, struct imsg *);
                     97: int     imsg_compose(struct imsgbuf *, u_int32_t, u_int32_t, pid_t,
                     98:            int, void *, u_int16_t);
                     99: int     imsg_composev(struct imsgbuf *, u_int32_t, u_int32_t,  pid_t,
                    100:            int, const struct iovec *, int);
                    101: struct buf *imsg_create(struct imsgbuf *, u_int32_t, u_int32_t, pid_t,
                    102:            u_int16_t);
                    103: int     imsg_add(struct buf *, void *, u_int16_t);
                    104: void    imsg_close(struct imsgbuf *, struct buf *);
                    105: void    imsg_free(struct imsg *);
                    106: int     imsg_flush(struct imsgbuf *);
                    107: void    imsg_clear(struct imsgbuf *);