Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
TLS: Set ssl.receivedShutdown after each read
Closes nodejsGH-613.
  • Loading branch information
ry committed Feb 1, 2011
1 parent 2ff593a commit 807fca6
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
28 changes: 24 additions & 4 deletions src/node_crypto.cc
Expand Up @@ -336,6 +336,21 @@ void Connection::ClearError() {
}


void Connection::SetShutdownFlags() {
HandleScope scope;

int flags = SSL_get_shutdown(ssl_);

if (flags & SSL_SENT_SHUTDOWN) {
handle_->Set(String::New("sentShutdown"), True());
}

if (flags & SSL_RECEIVED_SHUTDOWN) {
handle_->Set(String::New("receivedShutdown"), True());
}
}


void Connection::Initialize(Handle<Object> target) {
HandleScope scope;

Expand Down Expand Up @@ -496,8 +511,8 @@ Handle<Value> Connection::EncIn(const Arguments& args) {
}

int bytes_written = BIO_write(ss->bio_read_, (char*)buffer_data + off, len);

ss->HandleError("BIO_write", bytes_written);
ss->SetShutdownFlags();

return scope.Close(Integer::New(bytes_written));
}
Expand Down Expand Up @@ -534,7 +549,6 @@ Handle<Value> Connection::ClearOut(const Arguments& args) {
String::New("Length is extends beyond buffer")));
}


if (!SSL_is_init_finished(ss->ssl_)) {
int rv;

Expand All @@ -551,6 +565,7 @@ Handle<Value> Connection::ClearOut(const Arguments& args) {

int bytes_read = SSL_read(ss->ssl_, (char*)buffer_data + off, len);
ss->HandleError("SSL_read:ClearOut", bytes_read);
ss->SetShutdownFlags();

return scope.Close(Integer::New(bytes_read));
}
Expand Down Expand Up @@ -610,6 +625,7 @@ Handle<Value> Connection::EncOut(const Arguments& args) {
int bytes_read = BIO_read(ss->bio_write_, (char*)buffer_data + off, len);

ss->HandleError("BIO_read:EncOut", bytes_read, true);
ss->SetShutdownFlags();

return scope.Close(Integer::New(bytes_read));
}
Expand Down Expand Up @@ -662,6 +678,7 @@ Handle<Value> Connection::ClearIn(const Arguments& args) {
int bytes_written = SSL_write(ss->ssl_, (char*)buffer_data + off, len);

ss->HandleError("SSL_write:ClearIn", bytes_written);
ss->SetShutdownFlags();

return scope.Close(Integer::New(bytes_written));
}
Expand Down Expand Up @@ -768,9 +785,12 @@ Handle<Value> Connection::Shutdown(const Arguments& args) {
Connection *ss = Connection::Unwrap(args);

if (ss->ssl_ == NULL) return False();
int r = SSL_shutdown(ss->ssl_);
int rv = SSL_shutdown(ss->ssl_);

ss->HandleError("SSL_shutdown", rv);
ss->SetShutdownFlags();

return scope.Close(Integer::New(r));
return scope.Close(Integer::New(rv));
}


Expand Down
1 change: 1 addition & 0 deletions src/node_crypto.h
Expand Up @@ -76,6 +76,7 @@ class Connection : ObjectWrap {

int HandleError(const char* func, int rv, bool ignore_error=false);
void ClearError();
void SetShutdownFlags();

static Connection* Unwrap(const v8::Arguments& args) {
Connection* ss = ObjectWrap::Unwrap<Connection>(args.Holder());
Expand Down

0 comments on commit 807fca6

Please sign in to comment.