TheNetNode-CB/include/l3sock.h

176 lines
7.2 KiB
C
Executable File

#ifdef TCP_STACK
#define TCP_SOCKET 1 /* Status: Socket erstellen */
#define TCP_BIND 2 /* Status: Socket binden. */
#define TCP_LISTEN 3 /* Status: Socket auf Listen setzen.*/
#define TCP_CONNECTED 4 /* Status: Es gibt eine Verbindung. */
#define TCP_CLOSED 0 /* Socket leeren/entsorgen. */
#define TCP_SYNCON 1 /* Verbindungsaufbau bestaetigen. */
#define TCP_ESTABLISHED 2 /* Status Stabil . */
#define TCP_ACKSENT 3 /* ACK-Bestaetigung senden. */
#define TCP_PSHSENT 4 /* Frame an den Nachbarn schicken. */
#define TCP_ACKWAIT 5 /* Warte auf ACK-Bestaetigung. */
#define TCP_CLOSE 6 /* Status schliessen. (7 bis 15) */
#define TCP_FINSENT 7 /* Socket sofort schliessen. */
#define TCP_FINWAIT 8 /* Warte auf FIN & ACK-Bestaetigung. */
#define TCP_FINACKWAIT 9 /* Warte auf ACK-Bestaetigung. */
#define TCP_ACKWAITFIN 10 /* Warte auf ACK, danach FIN senden. */
#define TCP_PSHWAITFIN 11 /* Sende alle offenstehende Packete. */
#define TCP_PSHSENTFIN 12 /* Naechstes Packet senden. */
#define TCP_FINSENTCLOSED 13 /* Nach ACK-Bestaetigung, FIN & ACK-Senden.*/
#define TCP_ACKWAITCLOSED 14 /* Warte auf ACK-Bestaetigung, Socket entf.*/
#define TCP_RSTSENT 15 /* Verbindung zuruecksetzen. */
#ifndef SOCK_STREAM
#define SOCK_STREAM 1 /* stream socket */
#endif
#ifndef AF_INET
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
#endif
#ifndef INADDR_ANY
#define INADDR_ANY (ULONG)0x00000000
#endif
#define NUM_SOCKETS 32 /* Max. Socket's */
typedef unsigned int Socklen_t;
typedef struct _fd_set
{
unsigned int fd_count; /* how many are SET? */
Socklen_t fd_array[FD_SETSIZE]; /* an array of SOCKETs */
} Fd_set;
#define FD_SET_T(fd, set) do { \
Socklen_t __i; \
for (__i = 0; __i < ((Fd_set *)(set))->fd_count; __i++) { \
if (((Fd_set *)(set))->fd_array[__i] == (fd)) { \
break; \
} \
} \
if (__i == ((Fd_set *)(set))->fd_count) { \
if (((Fd_set *)(set))->fd_count < FD_SETSIZE) { \
((Fd_set *)(set))->fd_array[__i] = (fd); \
((Fd_set *)(set))->fd_count++; \
} \
} \
} while(0)
#define FD_ZERO_T(set) (((Fd_set *)(set))->fd_count=0)
extern BOOLEAN GetSocket(Socklen_t, Fd_set *);
#define FD_ISSET_T(fd, set) GetSocket((Socklen_t)(fd), (Fd_set *)(set))
struct In_addr {
union {
struct { UBYTE s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { UWORD s_w1,s_w2; } S_un_w;
ULONG _S_addr;
} _S_un;
#define _S_addr _S_un._S_addr
/* can be used for most tcp & ip code */
};
struct Sockaddr_in
{
short sin_family;
UWORD sin_port;
struct In_addr sin_addr;
char sin_zero[8];
};
struct Sockaddr
{
UWORD sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
struct Timeval
{
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
typedef struct tsocket /* Struktur Socketliste */
{
struct tsocket *next;
struct tsocket *prev;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
ACK RecvNext; /* Naechstes Frame Empfangen. */
SEQ SendNext; /* Naechstes Frame Senden. */
ACK SendUnacked; /* Noch nicht gesende Frames. */
unsigned long IpDest; /* IP-Adresse vom Nachbarn. */
int Socket; /* Socket. */
int Domain; /* Domain. */
int Type; /* Protokoll-Typ (TCP oder UDP). */
int PacNum; /* Frame-Zaehler. */
/* TCP-Header. */
unsigned DestPort; /* Destination-Port */
unsigned LocalPort; /* Local-Port setzen. */
unsigned short MaxListen; /* Groesse der Warteschlange. */
unsigned short Listen; /* Momentan in der Warteschlange. */
unsigned char UrgPointer; /* Urgent Pointer */
UBYTE State; /* Socket-Status. */
UBYTE TState; /* Socket-Status. */
UBYTE tos; /* Type of service */
BOOLEAN RecvEvent; /* Select markieren, Empfang. */
BOOLEAN SendEvent; /* Select markieren, Senden. */
} TSOCKET;
extern TSOCKET sockets[NUM_SOCKETS];
extern int Socket(int, /* Ein socket anlegen. */
int,
int);
extern int Bind (int, /* Socket binden. */
struct Sockaddr *,
Socklen_t);
extern int Listen(int, /* Lausche auf Socket. */
int);
extern int Select(int, /* Den Socket auf Aktivitaet pruefen. */
Fd_set *,
Fd_set *,
Fd_set *,
struct Timeval *);
extern int Accept(int , /* Verbindungsbau annehmen/ablehnen. */
struct Sockaddr *,
Socklen_t *);
extern int Recv (int , /* Daten Empfangen. */
char *,
int ,
int);
extern int Send (int , /* Daten Senden. */
char *,
int,
int);
extern void Close (int); /* Socket schliessen. */
extern int SearchSock(int); /* Den Socket aus der Socketliste suchen. */
extern void DelSocket(int); /* Socket als unbenutzt markieren. */
/* konvertiert die Kurzganzzahl hostshort Rechner- nach Netzwerk-Byteordnung. */
extern unsigned short Htons(unsigned short);
/* konvertiert die Kurzganzzahl netshort von Netzwerk-nach Rechner-Byteordnung*/
extern unsigned short Ntohs(unsigned short);
/* konvertiert die Langganzzahl hostlong von Rechner-nach Netzwerk-Byteordnung*/
extern unsigned long Htonl(unsigned long);
/* konvertiert die Langganzzahl netlong von Netzwerk- nach Rechner-Byteordnung*/
extern unsigned long Ntohl(unsigned long);
#endif /* TCP_STACK. */
/* End of include/l3sock.h. */