A library for a decentralised peer-to-peer chat over IPv6 only.
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
5 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #ifndef LC6_COMMON_H
  2. #define LC6_COMMON_H
  3. #include <sys/param.h>
  4. #include <arpa/inet.h>
  5. #include <sodium.h>
  6. #include "../inc/libchat6.h"
  7. #include "../inc/lc6_helpers.h"
  8. #ifdef LC6_DEBUG
  9. #include "../inc/lc6_debug.h"
  10. #endif
  11. #define LC6_CRYPTO_HASHLEN crypto_generichash_BYTES
  12. #define LC6_CRYPTO_HASHSIGNLEN (crypto_secretbox_NONCEBYTES+crypto_box_MACBYTES+crypto_generichash_BYTES)
  13. #define LC6_CRYPTO_PUBLEN crypto_kx_PUBLICKEYBYTES
  14. #define LC6_CRYPTO_PRIVLEN crypto_kx_SECRETKEYBYTES
  15. #define LC6_CRYPTO_RXLEN crypto_kx_SESSIONKEYBYTES
  16. #define LC6_CRYPTO_TXLEN crypto_kx_SESSIONKEYBYTES
  17. typedef struct LC6_NODE {
  18. unsigned char *pub_key;
  19. unsigned char *priv_key;
  20. } LC6_NODE;
  21. typedef struct LC6_PEER {
  22. int sock;
  23. LC6_NODE keys;
  24. unsigned char bufi[65536];
  25. unsigned char bufo[65536];
  26. } LC6_PEER;
  27. typedef struct LC6_USER {
  28. struct LC6_USER *prev;
  29. struct LC6_USER *next;
  30. unsigned char nickname[256];
  31. unsigned char pub_key[LC6_CRYPTO_PUBLEN];
  32. unsigned char priv_key[LC6_CRYPTO_PRIVLEN];
  33. uint8_t status;
  34. } LC6_USER;
  35. typedef struct LC6_FRIEND {
  36. struct LC6_FRIEND *prev;
  37. struct LC6_FRIEND *next;
  38. unsigned char nickname[256];
  39. unsigned char pub_key[LC6_CRYPTO_PUBLEN];
  40. unsigned char key_rx[LC6_CRYPTO_RXLEN];
  41. unsigned char key_tx[LC6_CRYPTO_TXLEN];
  42. uint8_t status;
  43. } LC6_FRIEND;
  44. typedef struct LC6_MSG_TLV {
  45. int type;
  46. int length;
  47. unsigned char *value;
  48. } LC6_MSG_TLV;
  49. typedef struct LC6_MSG {
  50. uint64_t timestamp;
  51. int type;
  52. LC6_MSG_TLV **tlv;
  53. } LC6_MSG;
  54. enum LC6_MSG_TYPE_ENUM {
  55. LC6_MSG_TYPE_CLIENT_ONLINE,
  56. LC6_MSG_TYPE_CLIENT_UPDATE,
  57. LC6_MSG_TYPE_CLIENT_OFFLINE,
  58. LC6_MSG_TYPE_KEEPALIVE_REQUEST,
  59. LC6_MSG_TYPE_KEEPALIVE_RESPONSE,
  60. LC6_MSG_TYPE_FRIEND_REQUEST,
  61. LC6_MSG_TYPE_FRIEND_RESPONSE,
  62. LC6_MSG_TYPE_MESSAGE_SEND,
  63. LC6_MSG_TYPE_MESSAGE_RECV,
  64. LC6_MSG_TYPE_MESSAGE_READ,
  65. LC6_MSG_TYPE_NEIGHBOURS_REQUEST,
  66. LC6_MSG_TYPE_NEIGHBOURS_RESPONSE
  67. };
  68. enum LC6_MSG_TLV_ENUM {
  69. LC6_MSG_TLV_NICKNAME,
  70. LC6_MSG_TLV_KEY,
  71. LC6_MSG_TLV_NONCE,
  72. LC6_MSG_TLV_ICON,
  73. LC6_MSG_TLV_METRIC,
  74. LC6_MSG_TLV_MSGID,
  75. LC6_MSG_TLV_CHATID,
  76. LC6_MSG_TLV_NEIGHBOUR
  77. };
  78. enum LC6_MSG_TLV_TYPE_ENUM {
  79. LC6_MSG_TLV_TYPE_UTF8,
  80. LC6_MSG_TLV_TYPE_BINARY,
  81. LC6_MSG_TLV_TYPE_INTEGER,
  82. LC6_MSG_TLV_TYPE_UUID,
  83. LC6_MSG_TLV_TYPE_IPPORT
  84. };
  85. #define LC6_CONFIG_BOOTSTRAP "bootstrap.bin"
  86. #define LC6_CONFIG_USER "user.bin"
  87. #define LC6_CONFIG_FRIEND "friends.bin"
  88. #define LC6_CONFIG_MAXLEN 50
  89. typedef struct LC6_IPADDR {
  90. uint8_t af;
  91. union addr {
  92. uint32_t inet;
  93. unsigned char inet6[16];
  94. } addr;
  95. } LC6_IPADDR;
  96. typedef struct LC6_BOOTSTRAP {
  97. struct LC6_BOOTSTRAP *prev;
  98. struct LC6_BOOTSTRAP *next;
  99. uint64_t last_contact;
  100. LC6_IPADDR ip;
  101. } LC6_BOOTSTRAP;
  102. typedef struct LC6_CTX {
  103. char path[MAXPATHLEN-LC6_CONFIG_MAXLEN];
  104. LIBCHAT_CB *callback;
  105. LC6_USER *user;
  106. LC6_NODE *node;
  107. LC6_FRIEND *friend;
  108. LC6_BOOTSTRAP *bootstrap;
  109. } LC6_CTX;
  110. extern int LC6_MSG_TLV_TYPE_INT[8];
  111. extern unsigned char LC6_MSG_TYPE_STR[13][30];
  112. extern unsigned char LC6_MSG_TLV_STR[8][20];
  113. #endif