Summary: For one thing, this file is too big so it's good to split it up. Also, having this responder defined in the .cpp file makes it hard to test. Extracting it for testability. Reviewed By: passy Differential Revision: D14000079 fbshipit-source-id: 8da4e0e325f48c0ada8efc7cd6fffcb3440c6e26
74 lines
1.9 KiB
C++
74 lines
1.9 KiB
C++
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the LICENSE
|
|
* file in the root directory of this source tree.
|
|
*/
|
|
#pragma once
|
|
|
|
#include "FlipperInitConfig.h"
|
|
#include "FlipperConnectionManager.h"
|
|
#include "FlipperState.h"
|
|
#include <folly/Executor.h>
|
|
#include <folly/io/async/EventBase.h>
|
|
#include <rsocket/RSocket.h>
|
|
#include <mutex>
|
|
|
|
namespace facebook {
|
|
namespace flipper {
|
|
|
|
class ConnectionEvents;
|
|
class ConnectionContextStore;
|
|
class FlipperRSocketResponder;
|
|
|
|
rsocket::Payload toRSocketPayload(folly::dynamic data);
|
|
|
|
class FlipperConnectionManagerImpl : public FlipperConnectionManager {
|
|
friend ConnectionEvents;
|
|
friend FlipperRSocketResponder;
|
|
|
|
public:
|
|
FlipperConnectionManagerImpl(FlipperInitConfig config, std::shared_ptr<FlipperState> state, std::shared_ptr<ConnectionContextStore> contextStore);
|
|
|
|
~FlipperConnectionManagerImpl();
|
|
|
|
void start() override;
|
|
|
|
void stop() override;
|
|
|
|
bool isOpen() const override;
|
|
|
|
void setCallbacks(Callbacks* callbacks) override;
|
|
|
|
void sendMessage(const folly::dynamic& message) override;
|
|
|
|
void reconnect();
|
|
|
|
private:
|
|
bool isOpen_ = false;
|
|
Callbacks* callbacks_;
|
|
DeviceData deviceData_;
|
|
std::shared_ptr<FlipperState> flipperState_;
|
|
int insecurePort;
|
|
int securePort;
|
|
|
|
folly::EventBase* flipperEventBase_;
|
|
folly::EventBase* connectionEventBase_;
|
|
std::unique_ptr<rsocket::RSocketClient> client_;
|
|
bool connectionIsTrusted_;
|
|
int failedConnectionAttempts_ = 0;
|
|
std::shared_ptr<ConnectionContextStore> contextStore_;
|
|
|
|
void startSync();
|
|
void doCertificateExchange();
|
|
void connectSecurely();
|
|
bool isCertificateExchangeNeeded();
|
|
void requestSignedCertFromFlipper();
|
|
bool isRunningInOwnThread();
|
|
void sendLegacyCertificateRequest(folly::dynamic message);
|
|
std::string getDeviceId();
|
|
};
|
|
|
|
} // namespace flipper
|
|
} // namespace facebook
|