base/packet
This commit is contained in:
parent
f65a3179ac
commit
0286bd63f1
3 changed files with 25 additions and 3 deletions
|
|
@ -21,7 +21,7 @@ GSDECL GSBool GSNetBaseHasData(int fd);
|
|||
GSDECL int GSNetBaseServer(int port);
|
||||
GSDECL int GSNetBaseClient(const char* hostname, int port);
|
||||
GSDECL void GSNetBaseClose(int fd);
|
||||
GSDECL void GSNetBaseRead(int fd, void* data, int size, GSNetAddress* address); /* always read 508 bytes! */
|
||||
GSDECL int GSNetBaseRead(int fd, void* data, int size, GSNetAddress* address); /* always read 508 bytes! */
|
||||
GSDECL void GSNetBaseWrite(int fd, void* data, int size, GSNetAddress* address);
|
||||
|
||||
/* net_packet.c */
|
||||
|
|
|
|||
|
|
@ -89,14 +89,17 @@ void GSNetBaseClose(int fd) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void GSNetBaseRead(int fd, void* data, int size, GSNetAddress* address) {
|
||||
int GSNetBaseRead(int fd, void* data, int size, GSNetAddress* address) {
|
||||
struct sockaddr_in addr;
|
||||
int len = sizeof(addr);
|
||||
int n;
|
||||
|
||||
recvfrom(fd, data, size, 0, (struct sockaddr*)&addr, &len);
|
||||
n = recvfrom(fd, data, size, 0, (struct sockaddr*)&addr, &len);
|
||||
|
||||
address->address = addr.sin_addr.s_addr;
|
||||
address->port = addr.sin_port;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
void GSNetBaseWrite(int fd, void* data, int size, GSNetAddress* address) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,26 @@
|
|||
#include <GearSrc/Endian.h>
|
||||
|
||||
void GSNetPacketRead(int fd, GSNetPacket* packet, GSNetAddress* address) {
|
||||
unsigned char buf[508];
|
||||
|
||||
packet->size = GSNetBaseRead(fd, buf, 508, address) - sizeof(packet->header);
|
||||
|
||||
memcpy(&packet->header, buf, sizeof(packet->header));
|
||||
memcpy(packet->data, buf + sizeof(packet->header), packet->size);
|
||||
|
||||
packet->header.index = GSEndianSwapU32BE(packet->header.index);
|
||||
packet->header.sequence = GSEndianSwapU32BE(packet->header.sequence);
|
||||
}
|
||||
|
||||
void GSNetPacketWrite(int fd, GSNetPacket* packet, GSNetAddress* address) {
|
||||
GSNetPacketHeader header = packet->header;
|
||||
unsigned char buf[508];
|
||||
|
||||
header.index = GSEndianSwapU32BE(header.index);
|
||||
header.sequence = GSEndianSwapU32BE(header.sequence);
|
||||
|
||||
memcpy(buf, &header, sizeof(header));
|
||||
memcpy(buf + sizeof(header), packet->data, packet->size);
|
||||
|
||||
GSNetBaseWrite(fd, buf, sizeof(header) + packet->size, address);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue