72 lines
2 KiB
C++
72 lines
2 KiB
C++
// Copyright 2015 The Weave Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef LIBWEAVE_EXAMPLES_PROVIDER_SSL_STREAM_H_
|
|
#define LIBWEAVE_EXAMPLES_PROVIDER_SSL_STREAM_H_
|
|
|
|
#include <openssl/ssl.h>
|
|
|
|
#include <base/memory/weak_ptr.h>
|
|
#include <weave/provider/network.h>
|
|
#include <weave/stream.h>
|
|
|
|
namespace weave {
|
|
|
|
namespace provider {
|
|
class TaskRunner;
|
|
}
|
|
|
|
namespace examples {
|
|
|
|
class SSLStream : public Stream {
|
|
public:
|
|
~SSLStream() override;
|
|
|
|
void Read(void* buffer,
|
|
size_t size_to_read,
|
|
const ReadCallback& callback) override;
|
|
|
|
void Write(const void* buffer,
|
|
size_t size_to_write,
|
|
const WriteCallback& callback) override;
|
|
|
|
void CancelPendingOperations() override;
|
|
|
|
static void Connect(provider::TaskRunner* task_runner,
|
|
const std::string& host,
|
|
uint16_t port,
|
|
const provider::Network::OpenSslSocketCallback& callback);
|
|
|
|
private:
|
|
struct SslDeleter {
|
|
void operator()(BIO* bio) const;
|
|
void operator()(SSL* ssl) const;
|
|
void operator()(SSL_CTX* ctx) const;
|
|
};
|
|
|
|
SSLStream(provider::TaskRunner* task_runner,
|
|
std::unique_ptr<BIO, SslDeleter> stream_bio);
|
|
|
|
static void ConnectBio(
|
|
std::unique_ptr<SSLStream> stream,
|
|
const provider::Network::OpenSslSocketCallback& callback);
|
|
static void DoHandshake(
|
|
std::unique_ptr<SSLStream> stream,
|
|
const provider::Network::OpenSslSocketCallback& callback);
|
|
|
|
// Send task to this method with WeakPtr if callback should not be executed
|
|
// after SSLStream is destroyed.
|
|
void RunTask(const base::Closure& task);
|
|
|
|
provider::TaskRunner* task_runner_{nullptr};
|
|
std::unique_ptr<SSL_CTX, SslDeleter> ctx_;
|
|
std::unique_ptr<SSL, SslDeleter> ssl_;
|
|
|
|
base::WeakPtrFactory<SSLStream> weak_ptr_factory_{this};
|
|
};
|
|
|
|
} // namespace examples
|
|
} // namespace weave
|
|
|
|
#endif // LIBWEAVE_EXAMPLES_PROVIDER_SSL_STREAM_H_
|