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
|
#pragma once
#include <al/array.h>
#include "util/packet.h"
#include "socket/socket.h"
#include "loop.h"
struct nn_packet_stream {
struct nn_event_loop *loop;
struct nn_socket sock;
ev_io revent;
ev_io wevent;
u8 id; // multiplex
u8 connect;
bool corked;
struct {
struct nn_packet *packet;
size_t index;
bool have_header;
} in;
struct {
array(struct nn_packet *) queue;
struct nn_packet *packet;
size_t index;
bool running;
} out;
struct nn_packet_stream *direct;
bool (*connection_callback)(void *, struct nn_packet_stream *);
void (*connection_closed_callback)(void *, struct nn_packet_stream *);
void (*packet_callback)(void *, struct nn_packet_stream *, struct nn_packet *);
void (*packet_sent_callback)(void *, struct nn_packet *);
void (*packets_sent_callback)(void *, struct nn_packet **, u32);
void *userdata;
};
void nn_packet_stream_init(struct nn_packet_stream *stream,
bool (*connection_callback)(void *, struct nn_packet_stream *),
void (*connection_closed_callback)(void *, struct nn_packet_stream *), void *userdata);
void nn_packet_stream_set_nodelay(struct nn_packet_stream *stream, s32 no_delay);
void nn_packet_stream_from_socket(struct nn_packet_stream *stream, struct nn_event_loop *loop, struct nn_socket *sock);
void nn_packet_stream_connect(struct nn_packet_stream *stream, struct nn_event_loop *loop,
u8 id, u8 type, str *addr, u16 port);
void nn_packet_stream_reconnect(struct nn_packet_stream *stream, str *addr, u16 port);
bool nn_packet_stream_set_connected(struct nn_packet_stream *stream);
void nn_packet_stream_cork(struct nn_packet_stream *stream, bool cork);
bool nn_packet_stream_send_packet(struct nn_packet_stream *stream, struct nn_packet *packet);
void nn_packet_stream_discard_queue(struct nn_packet_stream *stream);
void nn_packet_stream_return_packet(struct nn_packet_stream *stream, struct nn_packet *packet);
void nn_packet_stream_return_packets(struct nn_packet_stream *stream, struct nn_packet **packets, u32 count);
void nn_packet_stream_disconnect(struct nn_packet_stream *stream);
void nn_packet_stream_free(struct nn_packet_stream *stream);
|