diff options
author | Fedor Indutny <fedor.indutny@gmail.com> | 2013-06-11 12:59:10 +0200 |
---|---|---|
committer | Fedor Indutny <fedor.indutny@gmail.com> | 2013-06-16 09:30:14 +0200 |
commit | 03e008ddb8381b601dd42330ae57efedd5979ce4 (patch) | |
tree | ba4a068856a365e93648866b71591753b80fd4c3 /src/node_crypto_bio.cc | |
parent | 4c48a39c65c175c2f0b1ec5bf58456dd83e71d99 (diff) | |
download | android-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.cc | 29 |
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 && |