mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Add a safer way of setting socket addresses
This commit is contained in:
parent
77e1786d29
commit
98f7d2126d
34
src/Core.h
34
src/Core.h
@ -117,22 +117,26 @@ typedef cc_uint8 cc_bool;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define CC_WIN_BACKEND_TERMINAL 0x01
|
||||
#define CC_WIN_BACKEND_SDL2 0x11
|
||||
#define CC_WIN_BACKEND_SDL3 0x12
|
||||
#define CC_WIN_BACKEND_X11 0x21
|
||||
#define CC_WIN_BACKEND_WIN32 0x31
|
||||
#define CC_WIN_BACKEND_COCOA 0x41
|
||||
#define CC_WIN_BACKEND_BEOS 0x51
|
||||
#define CC_WIN_BACKEND_ANDROID 0x61
|
||||
/* Lowest 4 bits are for backends in same group */
|
||||
/* Rest of the bits indicate the unique group type */
|
||||
|
||||
#define CC_GFX_BACKEND_SOFTGPU 0x01
|
||||
#define CC_GFX_BACKEND_GL_MASK 0x10
|
||||
#define CC_GFX_BACKEND_GL1 0x11
|
||||
#define CC_GFX_BACKEND_GL2 0x12
|
||||
#define CC_GFX_BACKEND_D3D9 0x21
|
||||
#define CC_GFX_BACKEND_D3D11 0x31
|
||||
#define CC_GFX_BACKEND_VULKAN 0x41
|
||||
#define CC_WIN_BACKEND_TERMINAL 0x0001
|
||||
#define CC_WIN_BACKEND_SDL_MASK 0x0010
|
||||
#define CC_WIN_BACKEND_SDL2 0x0011
|
||||
#define CC_WIN_BACKEND_SDL3 0x0012
|
||||
#define CC_WIN_BACKEND_X11 0x0021
|
||||
#define CC_WIN_BACKEND_WIN32 0x0041
|
||||
#define CC_WIN_BACKEND_COCOA 0x0081
|
||||
#define CC_WIN_BACKEND_BEOS 0x0101
|
||||
#define CC_WIN_BACKEND_ANDROID 0x0201
|
||||
|
||||
#define CC_GFX_BACKEND_SOFTGPU 0x0001
|
||||
#define CC_GFX_BACKEND_GL_MASK 0x0010
|
||||
#define CC_GFX_BACKEND_GL1 0x0011
|
||||
#define CC_GFX_BACKEND_GL2 0x0012
|
||||
#define CC_GFX_BACKEND_D3D9 0x0021
|
||||
#define CC_GFX_BACKEND_D3D11 0x0041
|
||||
#define CC_GFX_BACKEND_VULKAN 0x0081
|
||||
|
||||
#define CC_BUILD_NETWORKING
|
||||
#define CC_BUILD_FREETYPE
|
||||
|
@ -311,8 +311,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
|
||||
if (!cur->ai_addrlen) break;
|
||||
// TODO citra returns empty addresses past first one? does that happen on real hardware too?
|
||||
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen);
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -368,8 +368,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++)
|
||||
{
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen);
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -474,8 +474,7 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int*
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++)
|
||||
{
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen);
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -595,15 +595,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int*
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family != AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family == AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -384,15 +384,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int*
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family != AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family == AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -331,15 +331,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int*
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family != AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family == AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
|
@ -556,15 +556,13 @@ static cc_result ParseHostNew(char* host, int port, cc_sockaddr* addrs, int* num
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family != AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family == AF_INET) continue;
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen; i++;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
_freeaddrinfo(result);
|
||||
|
@ -336,8 +336,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++)
|
||||
{
|
||||
Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen);
|
||||
addrs[i].size = cur->ai_addrlen;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen);
|
||||
}
|
||||
|
||||
lwip_freeaddrinfo(result);
|
||||
|
@ -13,14 +13,16 @@ void Queue_Init(struct Queue* queue, cc_uint32 structSize) {
|
||||
queue->head = 0;
|
||||
queue->tail = 0;
|
||||
}
|
||||
|
||||
void Queue_Clear(struct Queue* queue) {
|
||||
if (!queue->entries) return;
|
||||
Mem_Free(queue->entries);
|
||||
Queue_Init(queue, queue->structSize);
|
||||
}
|
||||
|
||||
static void Queue_Resize(struct Queue* queue) {
|
||||
cc_uint8* entries;
|
||||
int idx, capacity, headToEndSize, byteOffsetToHead;
|
||||
int capacity, headToEndSize, byteOffsetToHead;
|
||||
|
||||
if (queue->capacity >= (Int32_MaxValue / 4)) {
|
||||
Chat_AddRaw("&cToo many generic queue entries, clearing");
|
||||
@ -49,6 +51,7 @@ static void Queue_Resize(struct Queue* queue) {
|
||||
queue->head = 0;
|
||||
queue->tail = queue->count;
|
||||
}
|
||||
|
||||
/* Appends an entry to the end of the queue, resizing if necessary. */
|
||||
void Queue_Enqueue(struct Queue* queue, void* item) {
|
||||
if (queue->count == queue->capacity)
|
||||
@ -59,6 +62,7 @@ void Queue_Enqueue(struct Queue* queue, void* item) {
|
||||
queue->tail = (queue->tail + 1) & queue->mask;
|
||||
queue->count++;
|
||||
}
|
||||
|
||||
/* Retrieves the entry from the front of the queue. */
|
||||
void* Queue_Dequeue(struct Queue* queue) {
|
||||
void* result = queue->entries + queue->head * queue->structSize;
|
||||
|
@ -90,6 +90,13 @@ int Stopwatch_ElapsedMS(cc_uint64 beg, cc_uint64 end) {
|
||||
return (int)raw / 1000;
|
||||
}
|
||||
|
||||
static CC_INLINE void SocketAddr_Set(cc_sockaddr* addr, const void* src, unsigned srcLen) {
|
||||
if (srcLen > CC_SOCKETADDR_MAXSIZE) Logger_Abort("Attempted to copy too large socket");
|
||||
|
||||
Mem_Copy(addr->data, src, srcLen);
|
||||
addr->size = srcLen;
|
||||
}
|
||||
|
||||
cc_result Socket_WriteAll(cc_socket socket, const cc_uint8* data, cc_uint32 count) {
|
||||
cc_uint32 sent;
|
||||
cc_result res;
|
||||
|
Loading…
x
Reference in New Issue
Block a user