blob: 6d30a6c66807b3bca12db9d5aa805accfa0908d0 [file] [log] [blame]
// Copyright 2012 The Goma 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 DEVTOOLS_GOMA_CLIENT_FAKE_TLS_ENGINE_H_
#define DEVTOOLS_GOMA_CLIENT_FAKE_TLS_ENGINE_H_
#include "compiler_specific.h"
#include "tls_engine.h"
namespace devtools_goma {
// This just pass through transport input to application, and vice-versa.
// That is why this is called "fake".
class FakeTLSEngine : public TLSEngine {
public:
enum FakeTLSEngineBroken {
FAKE_TLS_NO_BROKEN = 0,
FAKE_TLS_GET_BROKEN = 1,
FAKE_TLS_SET_BROKEN = 2,
FAKE_TLS_READ_BROKEN = 3,
FAKE_TLS_WRITE_BROKEN = 4,
};
bool IsIOPending() const override;
bool IsReady() const override;
int GetDataToSendTransport(string* data) override;
size_t GetBufSizeFromTransport() override;
int SetDataFromTransport(const absl::string_view& data) override;
// Read and Write return number of read/write bytes if success.
// Otherwise, TLSErrorReason.
int Read(void* data, int size) override;
int Write(const void* data, int size) override;
string GetLastErrorMessage() const override {
return "TLSEngine error message";
}
bool IsRecycled() const override { return is_recycled_; }
protected:
friend class FakeTLSEngineFactory;
FakeTLSEngine() :
offset_sock_to_app_(0),
is_recycled_(false),
broken_(FAKE_TLS_NO_BROKEN),
execute_broken_(false),
max_read_size_(-1) {}
~FakeTLSEngine() override;
virtual void SetIsRecycled(bool value) { is_recycled_ = value; }
virtual void SetBroken(FakeTLSEngineBroken broken) { broken_ = broken; }
virtual void SetMaxReadSize(int size) { max_read_size_ = size; }
private:
string buffer_app_to_sock_;
string buffer_sock_to_app_;
size_t offset_sock_to_app_;
bool is_recycled_;
enum FakeTLSEngineBroken broken_;
bool execute_broken_;
int max_read_size_;
DISALLOW_COPY_AND_ASSIGN(FakeTLSEngine);
};
// TLSEngineFactory is synchronized.
class FakeTLSEngineFactory : public TLSEngineFactory {
public:
FakeTLSEngineFactory() :
sock_(-1), tls_engine_(NULL), broken_(FakeTLSEngine::FAKE_TLS_NO_BROKEN),
max_read_size_(-1) {}
~FakeTLSEngineFactory() override;
TLSEngine* NewTLSEngine(int sock) override;
void WillCloseSocket(int sock) override;
string GetCertsInfo() override { return certs_info_; }
void SetBroken(FakeTLSEngine::FakeTLSEngineBroken broken) {
broken_ = broken;
}
void SetMaxReadSize(int size) {
max_read_size_ = size;
}
// Dummy.
void SetHostname(const string& hostname ALLOW_UNUSED) override {}
private:
int sock_;
FakeTLSEngine* tls_engine_;
string certs_info_;
enum FakeTLSEngine::FakeTLSEngineBroken broken_;
int max_read_size_;
DISALLOW_COPY_AND_ASSIGN(FakeTLSEngineFactory);
};
} // namespace devtools_goma
#endif // DEVTOOLS_GOMA_CLIENT_FAKE_TLS_ENGINE_H_