sock.h revision 1.5
1/* $OpenBSD: sock.h,v 1.5 2018/06/26 07:13:54 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 file; 23struct slot; 24struct midi; 25 26struct sock { 27 struct sock *next; 28 int fd; 29 struct file *file; 30 struct amsg rmsg, wmsg; /* messages being sent/received */ 31 unsigned int wmax; /* max bytes we're allowed to write */ 32 unsigned int rmax; /* max bytes we're allowed to read */ 33 unsigned int rsize; /* input bytes to read (DATA msg) */ 34 unsigned int wsize; /* output bytes to write (DATA msg) */ 35 unsigned int rtodo; /* input bytes not read yet */ 36 unsigned int wtodo; /* output bytes not written yet */ 37#define SOCK_RIDLE 0 /* not expecting messages */ 38#define SOCK_RMSG 1 /* expecting a message */ 39#define SOCK_RDATA 2 /* data chunk being read */ 40#define SOCK_RRET 3 /* reply being returned */ 41 unsigned int rstate; /* state of the read-end FSM */ 42#define SOCK_WIDLE 0 /* nothing to do */ 43#define SOCK_WMSG 1 /* amsg being written */ 44#define SOCK_WDATA 2 /* data chunk being written */ 45 unsigned int wstate; /* state of the write-end FSM */ 46#define SOCK_AUTH 0 /* waiting for AUTH message */ 47#define SOCK_HELLO 1 /* waiting for HELLO message */ 48#define SOCK_INIT 2 /* parameter negotiation */ 49#define SOCK_START 3 /* filling play buffers */ 50#define SOCK_STOP 4 /* draining rec buffers */ 51 unsigned int pstate; /* one of the above */ 52 int tickpending; /* tick waiting to be transmitted */ 53 int fillpending; /* flowctl waiting to be transmitted */ 54 int stoppending; /* last STOP ack to be sent */ 55 unsigned int walign; /* align written data to this */ 56 unsigned int ralign; /* read data is aligned to this */ 57 int lastvol; /* last volume */ 58 struct slot *slot; /* audio device slot number */ 59 struct midi *midi; /* midi endpoint */ 60 struct port *port; /* midi port */ 61}; 62 63struct sock *sock_new(int fd); 64void sock_close(struct sock *); 65extern struct sock *sock_list; 66 67#endif /* !defined(SOCK_H) */ 68