7 #include "curve25519.h"
10 #define UNETD_GLOBAL_PEX_PORT 51819
11 #define PEX_BUF_SIZE 1024
12 #define UNETD_NET_DATA_SIZE_MAX (128 * 1024)
20 PEX_MSG_UPDATE_REQUEST
,
21 PEX_MSG_UPDATE_RESPONSE
,
22 PEX_MSG_UPDATE_RESPONSE_DATA
,
23 PEX_MSG_UPDATE_RESPONSE_NO_DATA
,
32 uint8_t id
[PEX_ID_LEN
];
37 uint8_t auth_id
[PEX_ID_LEN
];
40 #define PEER_EP_F_IPV6 (1 << 0)
41 #define PEER_EP_F_LOCAL (1 << 1)
43 struct pex_peer_endpoint
{
46 uint8_t peer_id
[PEX_ID_LEN
];
52 uint8_t local_addr
[16];
55 struct pex_update_request
{
56 uint64_t req_id
; /* must be first */
60 struct pex_update_response
{
61 uint64_t req_id
; /* must be first */
63 uint8_t e_key
[CURVE25519_KEY_SIZE
];
66 struct pex_update_response_data
{
67 uint64_t req_id
; /* must be first */
71 struct pex_update_response_no_data
{
72 uint64_t req_id
; /* must be first */
76 struct pex_msg_update_send_ctx
{
77 const uint8_t *pubkey
;
78 const uint8_t *auth_key
;
87 typedef void (*pex_recv_cb_t
)(struct pex_hdr
*hdr
, struct sockaddr_in6
*addr
);
89 int pex_open(void *addr
, size_t addr_len
, pex_recv_cb_t cb
, bool server
);
92 uint64_t pex_network_hash(const uint8_t *auth_key
, uint64_t req_id
);
93 struct pex_hdr
*__pex_msg_init(const uint8_t *pubkey
, uint8_t opcode
);
94 struct pex_hdr
*__pex_msg_init_ext(const uint8_t *pubkey
, const uint8_t *auth_key
,
95 uint8_t opcode
, bool ext
);
96 int __pex_msg_send(int fd
, const void *addr
);
97 void *pex_msg_append(size_t len
);
99 struct pex_update_request
*
100 pex_msg_update_request_init(const uint8_t *pubkey
, const uint8_t *priv_key
,
101 const uint8_t *auth_key
, union network_endpoint
*addr
,
102 uint64_t cur_version
, bool ext
);
103 void *pex_msg_update_response_recv(const void *data
, int len
, enum pex_opcode op
,
104 int *data_len
, uint64_t *timestamp
);
106 void pex_msg_update_response_init(struct pex_msg_update_send_ctx
*ctx
,
107 const uint8_t *pubkey
, const uint8_t *auth_key
,
108 const uint8_t *peer_key
, bool ext
,
109 struct pex_update_request
*req
,
110 const void *data
, int len
);
111 bool pex_msg_update_response_continue(struct pex_msg_update_send_ctx
*ctx
);