diff options
author | Fedor Indutny <fedor.indutny@gmail.com> | 2013-06-17 12:11:13 +0200 |
---|---|---|
committer | Fedor Indutny <fedor.indutny@gmail.com> | 2013-06-17 14:00:26 +0200 |
commit | 212e9cd8c9b10da3c471638ca9b0f8ebef2a67bb (patch) | |
tree | d4ebca0c270b8b332a0b7da427453edf59198932 /src/tls_wrap.h | |
parent | 0a4260c8c0deff518d0586c6b0484d459f9a79f4 (diff) | |
download | android-node-v8-212e9cd8c9b10da3c471638ca9b0f8ebef2a67bb.tar.gz android-node-v8-212e9cd8c9b10da3c471638ca9b0f8ebef2a67bb.tar.bz2 android-node-v8-212e9cd8c9b10da3c471638ca9b0f8ebef2a67bb.zip |
tls: session API returns
Diffstat (limited to 'src/tls_wrap.h')
-rw-r--r-- | src/tls_wrap.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/tls_wrap.h b/src/tls_wrap.h index 86507567b8..b36a5b8d4a 100644 --- a/src/tls_wrap.h +++ b/src/tls_wrap.h @@ -61,7 +61,24 @@ class TLSCallbacks : public StreamWrapCallbacks { protected: static const int kClearOutChunkSize = 1024; + static const size_t kMaxTLSFrameLen = 16 * 1024 + 5; + + // ClientHello parser types + enum ParseState { + kParseWaiting, + kParseTLSHeader, + kParseSSLHeader, + kParsePaused, + kParseEnded + }; + + struct HelloState { + ParseState state; + size_t frame_len; + size_t body_offset; + }; + // Write callback queue's item class WriteItem { public: WriteItem(WriteWrap* w, uv_write_cb cb) : w_(w), cb_(cb) { @@ -86,6 +103,18 @@ class TLSCallbacks : public StreamWrapCallbacks { bool ClearIn(); void ClearOut(); void InvokeQueued(int status); + void ParseClientHello(); + + inline void ParseFinish() { + hello_.state = kParseEnded; + Cycle(); + } + + inline void Cycle() { + ClearIn(); + ClearOut(); + EncOut(); + } v8::Handle<v8::Value> GetSSLError(int status, int* err); @@ -99,6 +128,14 @@ class TLSCallbacks : public StreamWrapCallbacks { static v8::Handle<v8::Value> VerifyError(const v8::Arguments& args); static v8::Handle<v8::Value> SetVerifyMode(const v8::Arguments& args); static v8::Handle<v8::Value> IsSessionReused(const v8::Arguments& args); + static v8::Handle<v8::Value> EnableSessionCallbacks(const v8::Arguments& args); + + // TLS Session API + static SSL_SESSION* GetSessionCallback(SSL* s, + unsigned char* key, + int len, + int* copy); + static int NewSessionCallback(SSL* s, SSL_SESSION* sess); #ifdef OPENSSL_NPN_NEGOTIATED static v8::Handle<v8::Value> GetNegotiatedProto(const v8::Arguments& args); @@ -134,9 +171,13 @@ class TLSCallbacks : public StreamWrapCallbacks { size_t write_queue_size_; QUEUE write_item_queue_; WriteItem* pending_write_item_; + HelloState hello_; + int hello_body_; bool started_; bool established_; bool shutdown_; + bool session_callbacks_; + SSL_SESSION* next_sess_; #ifdef OPENSSL_NPN_NEGOTIATED v8::Persistent<v8::Object> npn_protos_; |