2 * Dolda Connect - Modular multiuser Direct Connect-style client
3 * Copyright (C) 2004 Fredrik Tolf <fredrik@dolda2000.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <sys/socket.h>
25 #define SOCK_SYN 0 /* Connecting */
26 #define SOCK_EST 1 /* Established */
27 #define SOCK_STL 2 /* Stale, dead */
28 #define SOCK_TOS_MINDELAY 4
29 #define SOCK_TOS_MAXTP 3
30 #define SOCK_TOS_MAXREL 2
31 #define SOCK_TOS_MINCOST 1
35 struct dgrambuf *next;
36 struct sockaddr *addr;
49 struct socket *back, *pnext;
54 struct dgrambuf *f, *l;
63 void (*conncb)(struct socket *sk, int err, void *data);
64 void (*errcb)(struct socket *sk, int err, void *data);
65 void (*readcb)(struct socket *sk, void *data);
66 void (*writecb)(struct socket *sk, void *data);
75 void (*acceptcb)(struct lport *lp, struct socket *newsk, void *data);
76 void (*errcb)(struct lport *lp, int err, void *data);
80 void putsock(struct socket *sk);
81 void getsock(struct socket *sk);
82 struct socket *netsockpipe(void);
83 struct lport *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct lport *, struct socket *, void *), void *data);
84 struct lport *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct lport *, struct socket *, void *), void *data);
85 struct lport *netcstcplisten(int port, int local, void (*func)(struct lport *, struct socket *, void *), void *data);
86 struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)(struct socket *, int, void *), void *data);
87 int pollsocks(int timeout);
88 void freedgbuf(struct dgrambuf *dg);
89 void sockqueue(struct socket *sk, void *data, size_t size);
90 void sockerror(struct socket *sk, int en);
91 /* size_t sockqueuesize(struct socket *sk); */
92 size_t socktqueuesize(struct socket *sk);
93 ssize_t sockqueueleft(struct socket *sk);
94 int netresolve(char *addr, void (*callback)(struct sockaddr *addr, int addrlen, void *data), void *data);
95 struct socket *netcsdgram(struct sockaddr *name, socklen_t namelen);
96 struct socket *netdgramconn(struct socket *sk, struct sockaddr *addr, socklen_t addrlen);
97 int sockgetremotename(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
98 int sockgetremotename2(struct socket *sk, struct socket *sk2, struct sockaddr **namebuf, socklen_t *lenbuf);
99 int lstgetremotename(struct lport *lp, struct sockaddr **namebuf, socklen_t *lenbuf);
100 int lstgetremotename2(struct lport *lp, struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
101 void closesock(struct socket *sk);
102 void closelport(struct lport *lp);
103 void *sockgetinbuf(struct socket *sk, size_t *size);
104 struct socket *wrapsock(int fd);
105 size_t sockgetdatalen(struct socket *sk);
106 int socksettos(struct socket *sk, int tos);
107 int addreq(struct sockaddr *x, struct sockaddr *y);
108 char *formataddress(struct sockaddr *arg, socklen_t arglen);
109 char *formatsockpeer(struct socket *sk);
110 void sockpushdata(struct socket *sk, void *buf, size_t size);
111 /* void sockblock(struct socket *sk, int block); */
112 int sockpeeraddr(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
113 int getucred(struct socket *sk, uid_t *uid, gid_t *gid);
114 int sockfamily(struct socket *sk);
115 void quitsock(struct socket *sk);
116 void socksetdebug(struct socket *sk, int level, char *nm, ...);
117 void sockread(struct socket *sk);