X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=daemon%2Fnet.h;h=9ae9650d100fd50248d86472ff2e45fc078bc3c7;hp=582d9aab9cad31fd4afe631720e6707b475aff20;hb=1ce5968e27a19937a0e54f118d91e1a22438a0eb;hpb=e6252febcd942fc0eb0a0079376f824a8b1bb4de diff --git a/daemon/net.h b/daemon/net.h index 582d9aa..9ae9650 100644 --- a/daemon/net.h +++ b/daemon/net.h @@ -1,6 +1,6 @@ /* * Dolda Connect - Modular multiuser Direct Connect-style client - * Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com) + * Copyright (C) 2004 Fredrik Tolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,11 +20,11 @@ #define _NET_H #include +#include -#define SOCK_LST 0 /* Listening */ -#define SOCK_SYN 1 /* Connecting */ -#define SOCK_EST 2 /* Established */ -#define SOCK_STL 3 /* Stale, dead */ +#define SOCK_SYN 0 /* Connecting */ +#define SOCK_EST 1 /* Established */ +#define SOCK_STL 2 /* Stale, dead */ #define SOCK_TOS_MINDELAY 4 #define SOCK_TOS_MAXTP 3 #define SOCK_TOS_MAXREL 2 @@ -41,19 +41,12 @@ struct dgrambuf struct socket { - struct socket *next, *prev; int refcount; - int fd; - int isrealsocket; /* Bleh... */ - int family; - int tos; - int type; int state; - int ignread; - int events; - int close; - struct sockaddr *remote; - socklen_t remotelen; + int dgram; + int eos; + size_t maxbuf; + struct socket *back, *pnext; union { struct @@ -66,49 +59,55 @@ struct socket size_t bufsize; size_t datasize; } s; - } outbuf; - union - { - struct - { - struct dgrambuf *f, *l; - } d; - struct - { - void *buf; - size_t bufsize; - size_t datasize; - } s; - } inbuf; + } buf; void (*conncb)(struct socket *sk, int err, void *data); void (*errcb)(struct socket *sk, int err, void *data); void (*readcb)(struct socket *sk, void *data); void (*writecb)(struct socket *sk, void *data); - void (*acceptcb)(struct socket *sk, struct socket *newsk, void *data); + struct ufd *ufd; + void *data; +}; + +struct lport { + struct ufd *ufd; + void (*acceptcb)(struct lport *lp, struct socket *newsk, void *data); + void (*errcb)(struct lport *lp, int err, void *data); void *data; }; void putsock(struct socket *sk); void getsock(struct socket *sk); -struct socket *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data); -struct socket *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data); +struct socket *netsockpipe(void); +struct lport *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct lport *, struct socket *, void *), void *data); +struct lport *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct lport *, struct socket *, void *), void *data); +struct lport *netcstcplisten(int port, int local, void (*func)(struct lport *, struct socket *, void *), void *data); struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)(struct socket *, int, void *), void *data); int pollsocks(int timeout); +void freedgbuf(struct dgrambuf *dg); void sockqueue(struct socket *sk, void *data, size_t size); -size_t sockqueuesize(struct socket *sk); +void sockerror(struct socket *sk, int en); +/* size_t sockqueuesize(struct socket *sk); */ +ssize_t sockqueueleft(struct socket *sk); int netresolve(char *addr, void (*callback)(struct sockaddr *addr, int addrlen, void *data), void *data); struct socket *netcsdgram(struct sockaddr *name, socklen_t namelen); -struct socket *netdupsock(struct socket *sk); -void netdgramconn(struct socket *sk, struct sockaddr *addr, socklen_t addrlen); -int sockgetlocalname(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf); +struct socket *netdgramconn(struct socket *sk, struct sockaddr *addr, socklen_t addrlen); int sockgetremotename(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf); +int sockgetremotename2(struct socket *sk, struct socket *sk2, struct sockaddr **namebuf, socklen_t *lenbuf); +int lstgetremotename(struct lport *lp, struct sockaddr **namebuf, socklen_t *lenbuf); +int lstgetremotename2(struct lport *lp, struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf); void closesock(struct socket *sk); +void closelport(struct lport *lp); void *sockgetinbuf(struct socket *sk, size_t *size); struct socket *wrapsock(int fd); size_t sockgetdatalen(struct socket *sk); -int getpublicaddr(int af, struct sockaddr **addr, socklen_t *lenbuf); int socksettos(struct socket *sk, int tos); +int addreq(struct sockaddr *x, struct sockaddr *y); char *formataddress(struct sockaddr *arg, socklen_t arglen); +char *formatsockpeer(struct socket *sk); void sockpushdata(struct socket *sk, void *buf, size_t size); +/* void sockblock(struct socket *sk, int block); */ +int sockpeeraddr(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf); +int getucred(struct socket *sk, uid_t *uid, gid_t *gid); +int sockfamily(struct socket *sk); #endif