aboutsummaryrefslogtreecommitdiff
path: root/src/messages/messages.h
blob: dfc0df361788e017ff429da2e66e467af9b03bd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef FSCORD_MESSAGES_H
#define FSCORD_MESSAGES_H

// Todo: Currently every user is identified via his name. Can we change it to an id?

#include <basic/basic.h>
#include <basic/string32.h>
#include <os/os.h>
#include <crypto/aes_gcm.h>


#define MESSAGES_MAX_USER_COUNT 128
#define MESSAGES_MAX_USERNAME_LEN 32
#define MESSAGES_MAX_PASSWORD_LEN 32
#define MESSAGES_MAX_MESSAGE_LEN 1024
#define MESSAGES_MAX_PACKAGE_SIZE 1408

typedef struct {
    u32 size;
    u32 type;
} MessageHeader;

enum {
    C2S_LOGIN,
    C2S_CHAT_MESSAGE,
};

enum {
    S2C_LOGIN,
    S2C_USER_UPDATE,
    S2C_CHAT_MESSAGE,
};

enum {
    S2C_LOGIN_ERROR,
    S2C_LOGIN_SUCCESS
};

enum {
    S2C_USER_UPDATE_OFFLINE,
    S2C_USER_UPDATE_ONLINE,
};

typedef struct {
    MessageHeader header;
    String32 *username;
    String32 *password;
} C2S_Login;

typedef struct {
    MessageHeader header;
    String32 *content;
} C2S_ChatMessage;

typedef struct {
    MessageHeader header;
    u32 login_result;
} S2C_Login;

typedef struct {
    MessageHeader header;
    u32 status;
    String32 *username;
} S2C_UserUpdate;

typedef struct {
    MessageHeader header;
    i64 epoch_time_seconds;
    i64 epoch_time_nanoseconds;
    String32 *username;
    String32 *content;
} S2C_ChatMessage;


#endif // FSCORD_MESSAGES_H