aboutsummaryrefslogtreecommitdiff
path: root/src/pdesc.h
blob: af79364c5e57677d2139d59b56d6debdc542b184 (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
#ifndef PDESC_H
#define PDESC_H

#include <netinet/in.h>
#include <stdint.h>

struct psock;

enum pdesc_remote_errno {
    REMOTE_EXISTS,
    REMOTE_NOT_FOUND,
    REMOTE_PACKET_INVALID,
    REMOTE_ADDR_INVALID,
    REMOTE_ICMP_ECHO_CLIENT,
    REMOTE_ICMP_REPLY_SERVER,
    REMOTE_MAX_DESCRIPTORS,
};

enum pdesc_state { PDESC_STATE_INVALID = 0, PDESC_STATE_AUTH, PDESC_STATE_DATA };

struct paddr {
    struct sockaddr_storage sockaddr;
    char str[INET6_ADDRSTRLEN];
};

struct pdesc {
    enum pdesc_state state;
    struct paddr peer;
    uint16_t identifier;
    uint16_t sequence;
};

void pdesc_init(struct pdesc *, uint16_t identifier);

enum pdesc_remote_errno pdesc_find_current_remote(struct psock *, struct pdesc ** const);

int pdesc_set_addr(struct paddr *, struct sockaddr_storage const *);

#endif