summaryrefslogtreecommitdiff
path: root/src/tls_wrap.h
diff options
context:
space:
mode:
authorFedor Indutny <fedor.indutny@gmail.com>2013-06-17 12:11:13 +0200
committerFedor Indutny <fedor.indutny@gmail.com>2013-06-17 14:00:26 +0200
commit212e9cd8c9b10da3c471638ca9b0f8ebef2a67bb (patch)
treed4ebca0c270b8b332a0b7da427453edf59198932 /src/tls_wrap.h
parent0a4260c8c0deff518d0586c6b0484d459f9a79f4 (diff)
downloadandroid-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.h41
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_;