
migrating talk/base to webrtc/base. BUG=N/A R=niklas.enbom@webrtc.org Review URL: https://webrtc-codereview.appspot.com/17479005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6129 4adac7df-926f-26a2-2b94-8c16560cd09d
78 lines
2.3 KiB
C++
78 lines
2.3 KiB
C++
/*
|
|
* Copyright 2004 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_BASE_SCHANNELADAPTER_H__
|
|
#define WEBRTC_BASE_SCHANNELADAPTER_H__
|
|
|
|
#include <string>
|
|
#include "webrtc/base/ssladapter.h"
|
|
#include "webrtc/base/messagequeue.h"
|
|
struct _SecBufferDesc;
|
|
|
|
namespace rtc {
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class SChannelAdapter : public SSLAdapter, public MessageHandler {
|
|
public:
|
|
SChannelAdapter(AsyncSocket* socket);
|
|
virtual ~SChannelAdapter();
|
|
|
|
virtual int StartSSL(const char* hostname, bool restartable);
|
|
virtual int Send(const void* pv, size_t cb);
|
|
virtual int Recv(void* pv, size_t cb);
|
|
virtual int Close();
|
|
|
|
// Note that the socket returns ST_CONNECTING while SSL is being negotiated.
|
|
virtual ConnState GetState() const;
|
|
|
|
protected:
|
|
enum SSLState {
|
|
SSL_NONE, SSL_WAIT, SSL_CONNECTING, SSL_CONNECTED, SSL_ERROR
|
|
};
|
|
struct SSLImpl;
|
|
|
|
virtual void OnConnectEvent(AsyncSocket* socket);
|
|
virtual void OnReadEvent(AsyncSocket* socket);
|
|
virtual void OnWriteEvent(AsyncSocket* socket);
|
|
virtual void OnCloseEvent(AsyncSocket* socket, int err);
|
|
virtual void OnMessage(Message* pmsg);
|
|
|
|
int BeginSSL();
|
|
int ContinueSSL();
|
|
int ProcessContext(long int status, _SecBufferDesc* sbd_in,
|
|
_SecBufferDesc* sbd_out);
|
|
int DecryptData();
|
|
|
|
int Read();
|
|
int Flush();
|
|
void Error(const char* context, int err, bool signal = true);
|
|
void Cleanup();
|
|
|
|
void PostEvent();
|
|
|
|
private:
|
|
SSLState state_;
|
|
std::string ssl_host_name_;
|
|
// If true, socket will retain SSL configuration after Close.
|
|
bool restartable_;
|
|
// If true, we are delaying signalling close until all data is read.
|
|
bool signal_close_;
|
|
// If true, we are waiting to be woken up to signal readability or closure.
|
|
bool message_pending_;
|
|
SSLImpl* impl_;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
} // namespace rtc
|
|
|
|
#endif // WEBRTC_BASE_SCHANNELADAPTER_H__
|