5 #include <netinet/in.h>
10 #include <sys/systm.h>
11 #include <sys/malloc.h>
13 #include <sys/protosw.h>
14 #include <sys/socket.h>
15 #include <sys/socketvar.h>
16 #include <sys/errno.h>
17 #include <sys/queue.h>
18 #include <sys/kernel.h>
21 #include <net/route.h>
23 #include <netinet/in.h>
24 #include <netinet/in_systm.h>
25 #include <netinet/ip.h>
26 #include <netinet/in_pcb.h>
27 #include <netinet/ip_var.h>
28 #include <netinet/tcp.h>
29 #include <netinet/tcp_fsm.h>
30 #include <netinet/tcp_seq.h>
31 #include <netinet/tcp_timer.h>
32 #include <netinet/tcp_var.h>
33 #include <netinet/tcpip.h>
42 #include <oskittypes.h>
54 #define SEL_FINOUT 512
56 typedef int (*OSKITTCP_SOCKET_STATE
)
59 void *WhichConnection
,
62 typedef int (*OSKITTCP_SEND_PACKET
)
67 typedef struct ifaddr
*(*OSKITTCP_FIND_INTERFACE
)
71 struct sockaddr
*ReqAddr
);
73 typedef void *(*OSKITTCP_MALLOC
)
79 typedef void (*OSKITTCP_FREE
)
85 typedef int (*OSKITTCP_SLEEP
)
86 ( void *ClientData
, void *token
, int priority
, char *msg
, int tmio
);
88 typedef void (*OSKITTCP_WAKEUP
)( void *ClientData
, void *token
);
90 typedef struct _OSKITTCP_EVENT_HANDLERS
{
92 OSKITTCP_SOCKET_STATE SocketState
;
93 OSKITTCP_SEND_PACKET PacketSend
;
94 OSKITTCP_FIND_INTERFACE FindInterface
;
95 OSKITTCP_MALLOC TCPMalloc
;
96 OSKITTCP_FREE TCPFree
;
98 OSKITTCP_WAKEUP Wakeup
;
99 } OSKITTCP_EVENT_HANDLERS
, *POSKITTCP_EVENT_HANDLERS
;
101 extern OSKITTCP_EVENT_HANDLERS OtcpEvent
;
103 extern void InitOskitTCP();
104 extern void DeinitOskitTCP();
105 extern void TimerOskitTCP( int FastTimer
, int SlowTimer
);
106 extern void OskitDumpBuffer( OSK_PCHAR Data
, OSK_UINT Len
);
107 extern int OskitTCPShutdown( void *socket
, int disconn_type
);
108 extern int OskitTCPSocket( void *Connection
, void **ConnectionContext
,
109 int Af
, int Type
, int Proto
);
110 extern void RegisterOskitTCPEventHandlers
111 ( POSKITTCP_EVENT_HANDLERS EventHandlers
);
112 extern void OskitTCPReceiveDatagram( OSK_PCHAR Data
, OSK_UINT Len
,
113 OSK_UINT IpHeaderLen
);
114 extern int OskitTCPReceive( void *socket
,
120 extern int OskitTCPSend( void *socket
,
126 extern int OskitTCPConnect( void *socket
,
127 void *nam
, OSK_UINT namelen
);
128 extern int OskitTCPClose( void *socket
);
130 extern int OskitTCPBind( void *socket
,
131 void *nam
, OSK_UINT namelen
);
133 extern int OskitTCPAccept( void *socket
, void **new_socket
,
134 void *context
, void *addr_out
,
136 OSK_UINT
*out_addr_len
,
137 OSK_UINT finish_accept
);
139 extern int OskitTCPListen( void *socket
, int backlog
);
141 extern int OskitTCPRecv( void *connection
,
147 int OskitTCPGetAddress( void *socket
,
148 OSK_UINT
*LocalAddress
,
150 OSK_UINT
*RemoteAddress
,
151 OSK_UI16
*RemotePort
);
153 int OskitTCPGetSockOpt(void *socket
,
159 int OskitTCPSetSockOpt(void *socket
,
165 int OskitTCPDisconnect(void *socket
);
167 int OskitTCPGetSocketError(void *socket
);
171 void *fbsd_malloc( unsigned int bytes
, char *file
, unsigned line
, ... );
172 void fbsd_free( void *data
, char *file
, unsigned line
, ... );
174 #define malloc(x) fbsd_malloc(x,__FILE__,__LINE__)
175 #define free(x) fbsd_free(x,__FILE__,__LINE__)
177 #define kern_malloc(x,y,z) kern_malloc_needs_definition(x,y,z)
178 #define kern_free(x,y,z) kern_free_needs_definition(x,w,z)
181 #include <oskiterrno.h>
183 #define SOCK_MAXADDRLEN 255
185 #define OSK_MSG_OOB 0x01
186 #define OSK_MSG_PEEK 0x02
187 #define OSK_MSG_DONTWAIT 0x80
190 #define FWRITE 0x0002
192 /* Don't define this unless your are insane or aicom */
196 #define OSKLock() if (!KeTryToAcquireSpinLockAtDpcLevel(&OSKLock)) \
198 DbgPrint("OSKLock WAIT (%s)\n", __FUNCTION__); \
199 KeAcquireSpinLockAtDpcLevel(&OSKLock); \
201 DbgPrint("OSKLock >>>> (%s)\n", __FUNCTION__)
203 #define OSKUnlock() KeReleaseSpinLockFromDpcLevel(&OSKLock); \
204 DbgPrint("OSKLock <<<< (%s)\n", __FUNCTION__)
206 #define OSKLock() KeAcquireSpinLockAtDpcLevel(&OSKLock)
207 #define OSKUnlock() KeReleaseSpinLockFromDpcLevel(&OSKLock)
210 #define OSKLockAndRaise(x) KeRaiseIrql(DISPATCH_LEVEL, x); \
212 #define OSKUnlockAndLower(x) OSKUnlock(); \