FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/src/node_crypto_bio.h at master · CombatCode/node · GitHub
CombatCode
/
node
Public
forked from
nodejs/node-v0.x-archive
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
src
/
node_crypto_bio.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
113 lines (90 loc) · 3.29 KB
Breadcrumbs
node
/
src
/
node_crypto_bio.h
Copy path
File metadata and controls
113 lines (90 loc) · 3.29 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//
Copyright Joyent, Inc. and other Node contributors.
//
//
Permission is hereby granted, free of charge, to any person obtaining a
//
copy of this software and associated documentation files (the
//
"Software"), to deal in the Software without restriction, including
//
without limitation the rights to use, copy, modify, merge, publish,
//
distribute, sublicense, and/or sell copies of the Software, and to permit
//
persons to whom the Software is furnished to do so, subject to the
//
following conditions:
//
//
The above copyright notice and this permission notice shall be included
//
in all copies or substantial portions of the Software.
//
//
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
//
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
//
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
//
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
//
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
//
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
//
USE OR OTHER DEALINGS IN THE SOFTWARE.
#
include
"
openssl/bio.h
"
#
include
<
assert.h
>
namespace
node
{
class
NodeBIO
{
public:
static
inline
BIO_METHOD
*
GetMethod
() {
return
&method_;
}
NodeBIO
() : length_(
0
), read_head_(&head_), write_head_(&head_) {
//
Loop head
head_.
next_
= &head_;
}
~NodeBIO
();
static
int
New
(
BIO
* bio);
static
int
Free
(
BIO
* bio);
static
int
Read
(
BIO
* bio,
char
* out,
int
len);
static
int
Write
(
BIO
* bio,
const
char
* data,
int
len);
static
int
Puts
(
BIO
* bio,
const
char
* str);
static
int
Gets
(
BIO
* bio,
char
* out,
int
size);
static
long
Ctrl
(
BIO
* bio,
int
cmd,
long
num,
void
* ptr);
//
Allocate new buffer for write if needed
void
TryAllocateForWrite
();
//
Read `len` bytes maximum into `out`, return actual number of read bytes
size_t
Read
(
char
* out,
size_t
size);
//
Memory optimization:
//
Deallocate children of write head's child if they're empty
void
FreeEmpty
();
//
Return pointer to internal data and amount of
//
contiguous data available to read
char
*
Peek
(
size_t
* size);
//
Find first appearance of `delim` in buffer or `limit` if `delim`
//
wasn't found.
size_t
IndexOf
(
char
delim,
size_t
limit);
//
Discard all available data
void
Reset
();
//
Put `len` bytes from `data` into buffer
void
Write
(
const
char
* data,
size_t
size);
//
Return pointer to internal data and amount of
//
contiguous data available for future writes
char
*
PeekWritable
(
size_t
* size);
//
Commit reserved data
void
Commit
(
size_t
size);
//
Return size of buffer in bytes
size_t
inline
Length
() {
return
length_;
}
static
inline
NodeBIO*
FromBIO
(
BIO
* bio) {
assert
(bio->
ptr
!=
NULL
);
return
static_cast
<NodeBIO*>(bio->
ptr
);
}
protected:
//
NOTE: Size is maximum TLS frame length, this is required if we want
//
to fit whole ClientHello into one Buffer of NodeBIO.
static
const
size_t
kBufferLength
=
16
*
1024
+
5
;
class
Buffer
{
public:
Buffer
() : read_pos_(
0
), write_pos_(
0
), next_(
NULL
) {
}
size_t
read_pos_;
size_t
write_pos_;
Buffer* next_;
char
data_[
kBufferLength
];
};
size_t
length_;
Buffer head_;
Buffer* read_head_;
Buffer* write_head_;
static
BIO_METHOD
method_;
};
}
//
namespace node
Back
|
FazBrowse Home
|
New Git URL