1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Reduced packet data limit to 8192 bytes, the standard driver included with XP only supports 1467 anyway.

This commit is contained in:
Daniel Collins 2011-09-17 19:54:53 +00:00
parent f560fae7ad
commit 646ab3b011
5 changed files with 16 additions and 17 deletions

View File

@ -84,7 +84,7 @@ static BOOL recv_packet(int sockfd, char *buf, IDirectPlaySP *sp) {
struct sockaddr_ipx addr;
int addrlen = sizeof(addr);
int r = recvfrom(sockfd, buf, PACKET_BUF_SIZE, 0, (struct sockaddr*)&addr, &addrlen);
int r = recvfrom(sockfd, buf, MAX_DATA_SIZE, 0, (struct sockaddr*)&addr, &addrlen);
if(r == -1) {
if(WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAECONNRESET) {
return TRUE;
@ -106,7 +106,7 @@ static DWORD WINAPI worker_main(LPVOID sp) {
struct sp_data *sp_data = get_sp_data((IDirectPlaySP*)sp);
release_sp_data((IDirectPlaySP*)sp);
char *buf = malloc(PACKET_BUF_SIZE);
char *buf = malloc(MAX_DATA_SIZE);
if(!buf) {
abort();
}

View File

@ -27,11 +27,9 @@
#include "config.h"
#include "router.h"
/* Maximum UDP data size is 65467, we use a smaller value to ensure we have
* plenty of space to play with for headers, etc
*/
#define MAX_PACKET_SIZE 63487
#define PACKET_BUF_SIZE 65536
/* The standard Windows driver (in XP) only allows 1467 bytes anyway */
#define MAX_DATA_SIZE 8192
#define MAX_PKT_SIZE 8219
#define IPX_FILTER (int)(1<<0)
#define IPX_BOUND (int)(1<<1)

View File

@ -98,7 +98,7 @@ struct router_vars *router_init(BOOL global) {
return NULL;
}
if(!(router->recvbuf = malloc(ROUTER_BUF_SIZE))) {
if(!(router->recvbuf = malloc(sizeof(struct rpacket_header) + MAX_PKT_SIZE))) {
log_printf("Out of memory! Cannot allocate recv buffer");
router_destroy(router);
@ -257,9 +257,9 @@ DWORD router_main(void *arg) {
int addrlen = sizeof(addr);
struct rpacket_header *rp_header = (struct rpacket_header*)router->recvbuf;
ipx_packet *packet = (ipx_packet*)(router->recvbuf + sizeof(struct rpacket_header));
ipx_packet *packet = (ipx_packet*)(router->recvbuf + sizeof(*rp_header));
int len = recvfrom(router->udp_sock, (char*)packet, PACKET_BUF_SIZE, 0, (struct sockaddr*)&addr, &addrlen);
int len = recvfrom(router->udp_sock, (char*)packet, MAX_PKT_SIZE, 0, (struct sockaddr*)&addr, &addrlen);
if(len == -1) {
if(WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAECONNRESET) {
continue;
@ -273,7 +273,7 @@ DWORD router_main(void *arg) {
packet->size = ntohs(packet->size);
if(len < sizeof(ipx_packet) - 1 || packet->size > MAX_PACKET_SIZE || packet->size + sizeof(ipx_packet) - 1 != len) {
if(len < sizeof(ipx_packet) - 1 || packet->size > MAX_DATA_SIZE || packet->size + sizeof(ipx_packet) - 1 != len) {
LeaveCriticalSection(&(router->crit_sec));
continue;
}

View File

@ -24,7 +24,6 @@
#include <stdint.h>
#define MAX_ROUTER_CLIENTS 128
#define ROUTER_BUF_SIZE PACKET_BUF_SIZE + sizeof(struct rpacket_header)
struct router_call {
enum {

View File

@ -305,6 +305,8 @@ int WSAAPI getsockname(SOCKET fd, struct sockaddr *addr, int *addrlen) {
}
}
#define RECVBUF_SIZE (sizeof(struct rpacket_header) + MAX_PKT_SIZE)
/* Recieve a packet from an IPX socket
* addr must be NULL or a region of memory big enough for a sockaddr_ipx
*
@ -322,7 +324,7 @@ static int recv_packet(ipx_socket *sockptr, char *buf, int bufsize, int flags, s
return -1;
}
char *recvbuf = malloc(ROUTER_BUF_SIZE);
char *recvbuf = malloc(RECVBUF_SIZE);
if(!recvbuf) {
WSASetLastError(ERROR_OUTOFMEMORY);
return -1;
@ -331,7 +333,7 @@ static int recv_packet(ipx_socket *sockptr, char *buf, int bufsize, int flags, s
struct rpacket_header *rp_header = (struct rpacket_header*)recvbuf;
struct ipx_packet *packet = (struct ipx_packet*)(recvbuf + sizeof(*rp_header));
int rval = r_recv(fd, recvbuf, ROUTER_BUF_SIZE, flags);
int rval = r_recv(fd, recvbuf, RECVBUF_SIZE, flags);
if(rval == -1) {
free(recvbuf);
return -1;
@ -464,7 +466,7 @@ int WSAAPI getsockopt(SOCKET fd, int level, int optname, char FAR *optval, int F
if(optname == IPX_MAXSIZE) {
CHECK_OPTLEN(sizeof(int));
*intval = MAX_PACKET_SIZE;
*intval = MAX_DATA_SIZE;
RETURN(0);
}
@ -487,7 +489,7 @@ int WSAAPI getsockopt(SOCKET fd, int level, int optname, char FAR *optval, int F
/* TODO: LAN/WAN detection, link speed detection */
ipxdata->wan = FALSE;
ipxdata->status = FALSE;
ipxdata->maxpkt = MAX_PACKET_SIZE;
ipxdata->maxpkt = MAX_DATA_SIZE;
ipxdata->linkspeed = 100000; /* 10MBps */
free_interfaces(nic);
@ -638,7 +640,7 @@ int WSAAPI sendto(SOCKET fd, const char *buf, int len, int flags, const struct s
}
}
if(len > MAX_PACKET_SIZE) {
if(len > MAX_DATA_SIZE) {
RETURN_WSA(WSAEMSGSIZE, -1);
}