/* ----------------------------------------------------------------------------
NSTX -- tunneling network-packets over DNS
(C) 2000 by Florian Heinz and Julien Oster
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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-------------------------------------------------------------------------- */
#ifndef _NSTXHDR_H
#define _NSTXHDR_H
/* constants */
#define NSTX_TIMEOUT 30
#define NSTX_MAGIC 0xb4 /* Huh? [sky] */
/* Well, that seems really like a */
/* *magic* number ;-) [frodo] */
/* nstx header */
struct nstxhdr {
unsigned char magic;
unsigned char seq:4;
unsigned char chan:4; /* Unused yet... */
unsigned short id:12;
unsigned short flags:4;
};
/* flags... more to come ?! */
#define NSTX_LF 0x1 /* last fragment of this packet */
#define NSTX_CTL 0x2 /* for control-messages, not yet implemented */
#define DEBUG(x) syslog(LOG_DEBUG, x)
/* encoding */
const char *nstx_encode(const unsigned char *, int);
const char *nstx_decode(const unsigned char *, int*);
/* DNS */
void open_tuntap (const char *device);
void open_ns (const char *ip);
void open_ns_bind(in_addr_t ip);
void sendtun (const char*, size_t);
void sendns (const char*, size_t, const struct sockaddr*);
#define MAXPKT 2000
#define FROMNS 0
#define FROMTUN 1
struct nstxmsg
{
char data[MAXPKT];
int len;
int src;
struct sockaddr_in peer;
};
struct nstxmsg *nstx_select (int);
/* Queue-handling functions */
#define QUEUETIMEOUT 5
struct nstxqueue
{
unsigned short id;
time_t timeout;
char name[257];
struct sockaddr peer;
struct nstxqueue *next;
};
struct nstxqueue *finditem (unsigned short);
void queueitem (unsigned short, const char *, const struct sockaddr_in *);
void queueid (unsigned short);
int queuelen (void);
void qsettimeout (int);
struct nstxqueue *dequeueitem (int);
void timeoutqueue (void (*)(struct nstxqueue *));
#ifdef WITH_PKTDUMP
void pktdump (const char *, unsigned short, const char *, size_t, int);
#endif
#endif /* _NSTXHDR_H */
syntax highlighted by Code2HTML, v. 0.9.1