reactos/lib/drivers/oskittcp/include/oskittcp.h

216 lines
5.6 KiB
C
Raw Normal View History

#ifndef OSKITTCP_H
#define OSKITTCP_H
#ifdef linux
#include <netinet/in.h>
#endif
#ifdef KERNEL
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/protosw.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/errno.h>
#include <sys/queue.h>
#include <sys/kernel.h>
#include <net/if.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/in_pcb.h>
#include <netinet/ip_var.h>
#include <netinet/tcp.h>
#include <netinet/tcp_fsm.h>
#include <netinet/tcp_seq.h>
#include <netinet/tcp_timer.h>
#include <netinet/tcp_var.h>
#include <netinet/tcpip.h>
struct connect_args {
int s;
caddr_t name;
int namelen;
};
#endif
#include <oskittypes.h>
#define IPHDR_SIZE 20
#define SEL_CONNECT 1
#define SEL_FIN 2
#define SEL_RST 4
#define SEL_ABRT 8
#define SEL_READ 16
#define SEL_WRITE 32
#define SEL_ACCEPT 64
#define SEL_OOB 128
#define SEL_ERROR 256
#define SEL_FINOUT 512
typedef int (*OSKITTCP_SOCKET_STATE)
( void *ClientData,
void *WhichSocket,
void *WhichConnection,
OSK_UINT NewState );
typedef int (*OSKITTCP_SEND_PACKET)
( void *ClientData,
OSK_PCHAR Data,
OSK_UINT Len );
typedef struct ifaddr *(*OSKITTCP_FIND_INTERFACE)
( void *ClientData,
OSK_UINT AddrType,
OSK_UINT FindType,
struct sockaddr *ReqAddr );
typedef void *(*OSKITTCP_MALLOC)
( void *ClientData,
OSK_UINT Bytes,
OSK_PCHAR File,
OSK_UINT Line );
typedef void (*OSKITTCP_FREE)
( void *ClientData,
void *data,
OSK_PCHAR File,
OSK_UINT Line );
typedef int (*OSKITTCP_SLEEP)
( void *ClientData, void *token, int priority, char *msg, int tmio );
typedef void (*OSKITTCP_WAKEUP)( void *ClientData, void *token );
typedef struct _OSKITTCP_EVENT_HANDLERS {
void *ClientData;
OSKITTCP_SOCKET_STATE SocketState;
OSKITTCP_SEND_PACKET PacketSend;
OSKITTCP_FIND_INTERFACE FindInterface;
OSKITTCP_MALLOC TCPMalloc;
OSKITTCP_FREE TCPFree;
OSKITTCP_SLEEP Sleep;
OSKITTCP_WAKEUP Wakeup;
} OSKITTCP_EVENT_HANDLERS, *POSKITTCP_EVENT_HANDLERS;
extern OSKITTCP_EVENT_HANDLERS OtcpEvent;
extern void InitOskitTCP();
extern void DeinitOskitTCP();
extern void TimerOskitTCP( int FastTimer, int SlowTimer );
extern void OskitDumpBuffer( OSK_PCHAR Data, OSK_UINT Len );
extern int OskitTCPShutdown( void *socket, int disconn_type );
extern int OskitTCPSocket( void *Connection, void **ConnectionContext,
int Af, int Type, int Proto );
extern void RegisterOskitTCPEventHandlers
( POSKITTCP_EVENT_HANDLERS EventHandlers );
extern void OskitTCPReceiveDatagram( OSK_PCHAR Data, OSK_UINT Len,
OSK_UINT IpHeaderLen );
extern int OskitTCPReceive( void *socket,
void *Addr,
OSK_PCHAR Data,
OSK_UINT Len,
OSK_UINT *OutLen,
OSK_UINT Flags );
extern int OskitTCPSend( void *socket,
OSK_PCHAR Data,
OSK_UINT Len,
OSK_UINT *OutLen,
OSK_UINT Flags );
extern int OskitTCPConnect( void *socket,
void *nam, OSK_UINT namelen );
extern int OskitTCPClose( void *socket );
extern int OskitTCPBind( void *socket,
void *nam, OSK_UINT namelen );
extern int OskitTCPAccept( void *socket, void **new_socket,
void *context, void *addr_out,
OSK_UINT addr_len,
OSK_UINT *out_addr_len,
OSK_UINT finish_accept );
extern int OskitTCPListen( void *socket, int backlog );
extern int OskitTCPRecv( void *connection,
OSK_PCHAR Data,
OSK_UINT Len,
OSK_UINT *OutLen,
OSK_UINT Flags );
int OskitTCPGetAddress( void *socket,
OSK_UINT *LocalAddress,
OSK_UI16 *LocalPort,
OSK_UINT *RemoteAddress,
OSK_UI16 *RemotePort );
int OskitTCPGetSockOpt(void *socket,
int level,
int optname,
char *buffer,
int *size);
int OskitTCPSetSockOpt(void *socket,
int level,
int optname,
char *buffer,
int size);
int OskitTCPDisconnect(void *socket);
int OskitTCPGetSocketError(void *socket);
#undef errno
void *fbsd_malloc( unsigned int bytes, char *file, unsigned line, ... );
void fbsd_free( void *data, char *file, unsigned line, ... );
#if 0
#define malloc(x) fbsd_malloc(x,__FILE__,__LINE__)
#define free(x) fbsd_free(x,__FILE__,__LINE__)
#endif
#define kern_malloc(x,y,z) kern_malloc_needs_definition(x,y,z)
#define kern_free(x,y,z) kern_free_needs_definition(x,w,z)
/* Error codes */
#include <oskiterrno.h>
#define SOCK_MAXADDRLEN 255
#define OSK_MSG_OOB 0x01
#define OSK_MSG_PEEK 0x02
#define OSK_MSG_DONTWAIT 0x80
#define FREAD 0x0001
#define FWRITE 0x0002
/* Don't define this unless your are insane or aicom */
//#define LOCK_SPAM
#ifdef LOCK_SPAM
#define OSKLock() if (!KeTryToAcquireSpinLockAtDpcLevel(&OSKLock)) \
{ \
DbgPrint("OSKLock WAIT (%s)\n", __FUNCTION__); \
KeAcquireSpinLockAtDpcLevel(&OSKLock); \
} \
DbgPrint("OSKLock >>>> (%s)\n", __FUNCTION__)
#define OSKUnlock() KeReleaseSpinLockFromDpcLevel(&OSKLock); \
DbgPrint("OSKLock <<<< (%s)\n", __FUNCTION__)
#else
#define OSKLock() KeAcquireSpinLockAtDpcLevel(&OSKLock)
#define OSKUnlock() KeReleaseSpinLockFromDpcLevel(&OSKLock)
#endif
#define OSKLockAndRaise(x) KeRaiseIrql(DISPATCH_LEVEL, x); \
OSKLock()
#define OSKUnlockAndLower(x) OSKUnlock(); \
KeLowerIrql(x)
#endif/*OSKITTCP_H*/