sock.h revision 1.4
1/*	$OpenBSD: sock.h,v 1.4 2015/11/25 18:46:21 ratchov Exp $	*/
2/*
3 * Copyright (c) 2008-2012 Alexandre Ratchov <alex@caoua.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17#ifndef SOCK_H
18#define SOCK_H
19
20#include "amsg.h"
21
22struct opt;
23struct file;
24struct slot;
25struct midi;
26
27struct sock {
28	struct sock *next;
29	int fd;
30	struct file *file;
31	struct amsg rmsg, wmsg;		/* messages being sent/received */
32	unsigned int wmax;		/* max bytes we're allowed to write */
33	unsigned int rmax;		/* max bytes we're allowed to read */
34	unsigned int rsize;		/* input bytes to read (DATA msg) */
35	unsigned int wsize;		/* output bytes to write (DATA msg) */
36	unsigned int rtodo;		/* input bytes not read yet */
37	unsigned int wtodo;		/* output bytes not written yet */
38#define SOCK_RIDLE	0		/* not expecting messages */
39#define SOCK_RMSG	1		/* expecting a message */
40#define SOCK_RDATA	2		/* data chunk being read */
41#define SOCK_RRET	3		/* reply being returned */
42	unsigned int rstate;		/* state of the read-end FSM */
43#define SOCK_WIDLE	0		/* nothing to do */
44#define SOCK_WMSG	1		/* amsg being written */
45#define SOCK_WDATA	2		/* data chunk being written */
46	unsigned int wstate;		/* state of the write-end FSM */
47#define SOCK_AUTH	0		/* waiting for AUTH message */
48#define SOCK_HELLO	1		/* waiting for HELLO message */
49#define SOCK_INIT	2		/* parameter negotiation */
50#define SOCK_START	3		/* filling play buffers */
51#define SOCK_STOP	4		/* draining rec buffers */
52	unsigned int pstate;		/* one of the above */
53	int tickpending;		/* tick waiting to be transmitted */
54	int fillpending;		/* flowctl waiting to be transmitted */
55	int stoppending;		/* last STOP ack to be sent */
56	unsigned int walign;		/* align written data to this */
57	unsigned int ralign;		/* read data is aligned to this */
58	int lastvol;			/* last volume */
59	struct opt *opt;		/* "subdevice" definition */
60	struct slot *slot;		/* audio device slot number */
61	struct midi *midi;		/* midi endpoint */
62	struct port *port;		/* midi port */
63};
64
65struct sock *sock_new(int fd);
66void sock_close(struct sock *);
67extern struct sock *sock_list;
68
69#endif /* !defined(SOCK_H) */
70