added flags to socket_recv

This commit is contained in:
2025-10-25 19:08:37 +05:00
parent eea36ec2a3
commit 42702ffbe7
7 changed files with 49 additions and 24 deletions

View File

@@ -12,7 +12,7 @@ Result(void) EncryptedSocket_send(EncryptedSocket* ptr,
Array(u8) decrypted_buf, Array(u8) encrypted_buf)
{
Deferral(4);
EncryptorAES_encrypt(&ptr->enc, decrypted_buf, encrypted_buf);
try_void(EncryptorAES_encrypt(&ptr->enc, decrypted_buf, encrypted_buf));
try_void(socket_send(ptr->sock, encrypted_buf));
Return RESULT_VOID;
}
@@ -22,28 +22,29 @@ Result(void) EncryptedSocket_sendto(EncryptedSocket* ptr,
EndpointIPv4 remote_end)
{
Deferral(4);
EncryptorAES_encrypt(&ptr->enc, decrypted_buf, encrypted_buf);
try_void(EncryptorAES_encrypt(&ptr->enc, decrypted_buf, encrypted_buf));
try_void(socket_sendto(ptr->sock, encrypted_buf, remote_end));
Return RESULT_VOID;
}
Result(i32) EncryptedSocket_recv(EncryptedSocket* ptr,
Array(u8) encrypted_buf, Array(u8) decrypted_buf)
Array(u8) encrypted_buf, Array(u8) decrypted_buf,
SocketRecvFlag flags)
{
Deferral(4);
try(i32 r, i, socket_recv(ptr->sock, encrypted_buf));
try(i32 r, i, socket_recv(ptr->sock, encrypted_buf, flags));
encrypted_buf.size = r;
DecryptorAES_decrypt(&ptr->dec, encrypted_buf, decrypted_buf, (u32*)&r);
try_void(DecryptorAES_decrypt(&ptr->dec, encrypted_buf, decrypted_buf, (u32*)&r));
Return RESULT_VALUE(i, r);
}
Result(i32) EncryptedSocket_recvfrom(EncryptedSocket* ptr,
Array(u8) encrypted_buf, Array(u8) decrypted_buf,
NULLABLE(EndpointIPv4*) remote_end)
SocketRecvFlag flags, NULLABLE(EndpointIPv4*) remote_end)
{
Deferral(4);
try(i32 r, i, socket_recvfrom(ptr->sock, encrypted_buf, remote_end));
try(i32 r, i, socket_recvfrom(ptr->sock, encrypted_buf, flags, remote_end));
encrypted_buf.size = r;
DecryptorAES_decrypt(&ptr->dec, encrypted_buf, decrypted_buf, (u32*)&r);
try_void(DecryptorAES_decrypt(&ptr->dec, encrypted_buf, decrypted_buf, (u32*)&r));
Return RESULT_VALUE(i, r);
}

View File

@@ -18,8 +18,10 @@ Result(void) EncryptedSocket_sendto(EncryptedSocket* ptr,
EndpointIPv4 remote_end);
Result(i32) EncryptedSocket_recv(EncryptedSocket* ptr,
Array(u8) encrypted_buf, Array(u8) decrypted_buf);
Array(u8) encrypted_buf, Array(u8) decrypted_buf,
SocketRecvFlag flags);
Result(i32) EncryptedSocket_recvfrom(EncryptedSocket* ptr,
Array(u8) encrypted_buf, Array(u8) decrypted_buf,
SocketRecvFlag flags,
NULLABLE(EndpointIPv4*) remote_end);

View File

@@ -74,17 +74,26 @@ Result(void) socket_sendto(Socket s, Array(u8) buffer, EndpointIPv4 dst){
return RESULT_VOID;
}
Result(i32) socket_recv(Socket s, Array(u8) buffer){
i32 r = recv(s, buffer.data, buffer.size, 0);
static inline int SocketRecvFlags_toStd(SocketRecvFlag flags){
int f = 0;
if (flags & SocketRecvFlag_Peek)
f |= MSG_PEEK;
if (flags & SocketRecvFlag_WaitAll)
f |= MSG_WAITALL;
return f;
}
Result(i32) socket_recv(Socket s, Array(u8) buffer, SocketRecvFlag flags){
i32 r = recv(s, buffer.data, buffer.size, SocketRecvFlags_toStd(flags));
if(r < 0)
return RESULT_ERROR_SOCKET();
return RESULT_VALUE(i, r);
}
Result(i32) socket_recvfrom(Socket s, Array(u8) buffer, NULLABLE(EndpointIPv4*) remote_end){
Result(i32) socket_recvfrom(Socket s, Array(u8) buffer, SocketRecvFlag flags, NULLABLE(EndpointIPv4*) remote_end){
struct sockaddr_in remote_addr = {0};
i32 sockaddr_size = sizeof(remote_addr);
i32 r = recvfrom(s, buffer.data, buffer.size, 0,
i32 r = recvfrom(s, buffer.data, buffer.size, SocketRecvFlags_toStd(flags),
(struct sockaddr*)&remote_addr, (void*)&sockaddr_size);
if(r < 0)
return RESULT_ERROR_SOCKET();

View File

@@ -2,6 +2,7 @@
#include "endpoint.h"
#include "tlibc/errors.h"
#include "tlibc/collections/Array.h"
#include "tlibc/time.h"
typedef enum SocketShutdownType {
SocketShutdownType_Receive = 0,
@@ -9,6 +10,12 @@ typedef enum SocketShutdownType {
SocketShutdownType_Both = 2,
} SocketShutdownType;
typedef enum SocketRecvFlag {
SocketRecvFlag_None = 0,
SocketRecvFlag_Peek = 0b1 /* next recv call will read the same data */,
SocketRecvFlag_WaitAll = 0b10 /* waits until buffer is full */,
} SocketRecvFlag;
typedef i64 Socket;
Result(Socket) socket_open_TCP();
@@ -20,5 +27,5 @@ Result(Socket) socket_accept(Socket s, NULLABLE(EndpointIPv4*) remote_end);
Result(void) socket_connect(Socket s, EndpointIPv4 remote_end);
Result(void) socket_send(Socket s, Array(u8) buffer);
Result(void) socket_sendto(Socket s, Array(u8) buffer, EndpointIPv4 dst);
Result(i32) socket_recv(Socket s, Array(u8) buffer);
Result(i32) socket_recvfrom(Socket s, Array(u8) buffer, NULLABLE(EndpointIPv4*) remote_end);
Result(i32) socket_recv(Socket s, Array(u8) buffer, SocketRecvFlag flags);
Result(i32) socket_recvfrom(Socket s, Array(u8) buffer, SocketRecvFlag flags, NULLABLE(EndpointIPv4*) remote_end);