summaryrefslogtreecommitdiff
path: root/src/node_crypto_bio.cc
diff options
context:
space:
mode:
authorFedor Indutny <fedor.indutny@gmail.com>2013-06-11 12:59:10 +0200
committerFedor Indutny <fedor.indutny@gmail.com>2013-06-16 09:30:14 +0200
commit03e008ddb8381b601dd42330ae57efedd5979ce4 (patch)
treeba4a068856a365e93648866b71591753b80fd4c3 /src/node_crypto_bio.cc
parent4c48a39c65c175c2f0b1ec5bf58456dd83e71d99 (diff)
downloadandroid-node-v8-03e008ddb8381b601dd42330ae57efedd5979ce4.tar.gz
android-node-v8-03e008ddb8381b601dd42330ae57efedd5979ce4.tar.bz2
android-node-v8-03e008ddb8381b601dd42330ae57efedd5979ce4.zip
tls_wrap: embed TLS encryption into streamwrap
Diffstat (limited to 'src/node_crypto_bio.cc')
-rw-r--r--src/node_crypto_bio.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/node_crypto_bio.cc b/src/node_crypto_bio.cc
index 547c711488..adb1e336e9 100644
--- a/src/node_crypto_bio.cc
+++ b/src/node_crypto_bio.cc
@@ -82,6 +82,12 @@ int NodeBIO::Read(BIO* bio, char* out, int len) {
}
+char* NodeBIO::Peek(size_t* size) {
+ *size = read_head_->write_pos_ - read_head_->read_pos_;
+ return read_head_->data_ + read_head_->read_pos_;
+}
+
+
int NodeBIO::Write(BIO* bio, const char* data, int len) {
BIO_clear_retry_flags(bio);
@@ -318,6 +324,29 @@ void NodeBIO::Write(const char* data, size_t size) {
}
+char* NodeBIO::PeekWritable(size_t* size) {
+ size_t available = kBufferLength - write_head_->write_pos_;
+ if (*size != 0 && available > *size)
+ available = *size;
+ else
+ *size = available;
+
+ return write_head_->data_ + write_head_->write_pos_;
+}
+
+
+void NodeBIO::Commit(size_t size) {
+ write_head_->write_pos_ += size;
+ length_ += size;
+ assert(write_head_->write_pos_ <= kBufferLength);
+
+ // Allocate new buffer if write head is full,
+ // and there're no other place to go
+ TryAllocateForWrite();
+ write_head_ = write_head_->next_;
+}
+
+
void NodeBIO::TryAllocateForWrite() {
// If write head is full, next buffer is either read head or not empty.
if (write_head_->write_pos_ == kBufferLength &&