asfur/network.h
2026-01-08 19:18:33 +01:00

116 lines
2 KiB
C

#ifndef NETWORK_H
#define NETWORK_H
#include <stdint.h>
struct client;
typedef enum {
PACKET_ERROR = 0,
PACKET_REGISTER = 1,
PACKET_AUTHENTICATE = 2,
PACKET_JOIN = 3,
PACKET_TEXT = 4,
PACKET_LEAVE = 5,
PACKET_OK = 6,
PACKET_DM_OPEN = 7,
PACKET_DM_ROOM = 8,
PACKET_CREATE_ROOM = 9,
PACKET_DELETE_ROOM = 10,
PACKET_ROOM_CREATED = 11,
PACKET_LIST_ROOMS = 12,
PACKET_ROOM_LIST = 13
} packet_type;
typedef enum {
ERR_UNKNOWN = 0,
ERR_INVALID_PACKET = 1,
ERR_NOT_AUTHENTICATED = 2,
ERR_ALREADY_REGISTERED = 3,
ERR_INVALID_CREDENTIALS = 4,
ERR_REGISTRATION_DISABLED = 5,
ERR_DATABASE = 5,
ERR_USER_NOT_FOUND = 7,
ERR_ACCESS_DENIED = 8,
ERR_ROOM_NOT_FOUND = 9,
ERR_ROOM_NAME_TAKEN = 10,
ERR_NOT_ROOM_OWNER = 11
} error_code;
struct packet_header {
uint16_t size;
uint8_t type;
} __attribute__((packed));
struct packet_register {
char username[20];
char password[100];
};
struct packet_auth {
char username[20];
char password[100];
};
struct packet_join {
uint64_t room_id;
};
struct packet_leave {
uint64_t room_id;
};
struct packet_text {
uint64_t room_id;
char message[];
};
struct packet_error {
uint8_t code;
};
struct packet_text_broadcast {
uint64_t room_id;
char username[32];
char message[];
};
struct packet_dm_open {
char username[20];
};
struct packet_dm_room {
uint64_t room_id;
};
struct packet_create_room {
char name[32];
};
struct packet_delete_room {
uint64_t room_id;
};
struct packet_room_created {
uint64_t room_id;
char name[32];
};
struct room_list_entry {
uint64_t room_id;
char name[32];
char owner[20];
};
struct packet_room_list {
uint32_t count;
struct room_list_entry rooms[];
};
int network_init(void);
void network_shutdown(void);
void network_handle_data(struct client *client, const char *data, size_t len);
void network_client_add(struct client *client);
void network_client_remove(struct client *client);
#endif