-
Notifications
You must be signed in to change notification settings - Fork 3.2k
/
Copy pathdtls.h
87 lines (74 loc) · 2.35 KB
/
dtls.h
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
+----------------------------------------------------------------------+
| Swoole |
+----------------------------------------------------------------------+
| This source file is subject to version 2.0 of the Apache license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.apache.org/licenses/LICENSE-2.0.html |
| If you did not receive a copy of the Apache2.0 license and are unable|
| to obtain it through the world-wide-web, please send a note to |
| [email protected] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Tianfeng Han <[email protected]> |
+----------------------------------------------------------------------+
*/
#pragma once
#include "swoole_api.h"
#ifdef SW_SUPPORT_DTLS
#include <deque>
namespace swoole { namespace dtls {
//-------------------------------------------------------------------------------
int BIO_write(BIO *b, const char *data, int dlen);
int BIO_read(BIO *b, char *data, int dlen);
long BIO_ctrl(BIO *b, int cmd, long larg, void *pargs);
int BIO_create(BIO *b);
int BIO_destroy(BIO *b);
BIO_METHOD *BIO_get_methods(void);
void BIO_meth_free(void);
struct Buffer
{
uint16_t length;
uchar data[0];
};
struct Session
{
SSL_CTX *ctx;
bool listened = false;
swSocket *socket;
std::deque<Buffer*> rxqueue;
bool peek_mode = false;
Session(swSocket *_sock, SSL_CTX *_ctx)
{
socket = _sock;
ctx = _ctx;
}
~Session()
{
while(!rxqueue.empty())
{
Buffer *buffer = rxqueue.front();
rxqueue.pop_front();
delete buffer;
}
}
bool init();
bool listen();
void append(const char* data, ssize_t len);
inline void append(Buffer *buffer)
{
rxqueue.push_back(buffer);
}
inline size_t get_buffer_length()
{
size_t total_length = 0;
for (auto i : rxqueue)
{
total_length += i->length;
}
return total_length;
}
};
//-------------------------------------------------------------------------------
}}
#endif