summaryrefslogtreecommitdiff
path: root/ecp/src/ecp/vconn/vconn.h
blob: f3438467942130060699405d8c6c43fe27b13240 (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
#define ECP_CTYPE_VCONN     (0x01 | ECP_CTYPE_FLAG_SYS)
#define ECP_CTYPE_VLINK     (0x02 | ECP_CTYPE_FLAG_SYS)

#define ECP_MTYPE_NEXT      0x00
#define ECP_MTYPE_EXEC      0x02
#define ECP_MTYPE_RELAY     0x01

#ifndef ECP_WITH_HTABLE
#define ecp_vconn_handle_close  NULL
#define ecp_vlink_handle_open   NULL
#define ecp_vlink_handle_close  NULL
#endif

typedef struct ECPVConnInb {
    ECPConnection b;
    ECPDHPub vlink_next;
    ECPDHPub vconn_next[ECP_MAX_NODE_KEY];
    unsigned char vconn_next_curr;
} ECPVConnInb;

typedef struct ECPVConnOutb {
    ECPConnection b;
    ECPConnection *next;
} ECPVConnOutb;

ssize_t ecp_vconn_pack_parent(ECPConnection *conn, ECPBuffer *payload, ECPBuffer *packet, size_t pkt_size, ecp_tr_addr_t *addr);

void ecp_vconn_init(ECPVConnOutb vconn[], ecp_ecdh_public_t keys[], size_t vconn_size, ECPSocket *sock);
#ifdef ECP_WITH_HTABLE
void ecp_vconn_init_inb(ECPVConnInb *vconn, ECPSocket *sock);
#endif
int ecp_vconn_open(ECPVConnOutb *vconn, ECPConnection *conn, ECPNode *node);
int ecp_vconn_handle_open(ECPConnection *conn, ECP2Buffer *bufs);
#ifdef ECP_WITH_HTABLE
void ecp_vconn_handle_close(ECPConnection *conn);
#endif
ssize_t ecp_vconn_handle_msg(ECPConnection *conn, ecp_seq_t seq, unsigned char mtype, unsigned char *msg, size_t msg_size, ECP2Buffer *bufs);
ssize_t ecp_vconn_send_open_req(ECPConnection *conn, unsigned char *cookie);


void ecp_vlink_init(ECPConnection *conn, ECPSocket *sock);
#ifdef ECP_WITH_HTABLE
int ecp_vlink_handle_open(ECPConnection *conn, ECP2Buffer *bufs);
void ecp_vlink_handle_close(ECPConnection *conn);
#endif
ssize_t ecp_vlink_handle_msg(ECPConnection *conn, ecp_seq_t seq, unsigned char mtype, unsigned char *msg, size_t msg_size, ECP2Buffer *bufs);

int ecp_vconn_sock_create(ECPSocket *sock);
void ecp_vconn_sock_destroy(ECPSocket *sock);
int ecp_vconn_handler_init(ECPContext *ctx, ECPConnHandler *vconn_handler);
int ecp_vlink_handler_init(ECPContext *ctx, ECPConnHandler *vlink_handler);