1*cf78ab8cSAndroid Build Coastguard Worker /* 2*cf78ab8cSAndroid Build Coastguard Worker * Copyright 2022 The Android Open Source Project 3*cf78ab8cSAndroid Build Coastguard Worker * 4*cf78ab8cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*cf78ab8cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*cf78ab8cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*cf78ab8cSAndroid Build Coastguard Worker * 8*cf78ab8cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*cf78ab8cSAndroid Build Coastguard Worker * 10*cf78ab8cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*cf78ab8cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*cf78ab8cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*cf78ab8cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*cf78ab8cSAndroid Build Coastguard Worker * limitations under the License. 15*cf78ab8cSAndroid Build Coastguard Worker */ 16*cf78ab8cSAndroid Build Coastguard Worker 17*cf78ab8cSAndroid Build Coastguard Worker // Frontend client 18*cf78ab8cSAndroid Build Coastguard Worker #pragma once 19*cf78ab8cSAndroid Build Coastguard Worker 20*cf78ab8cSAndroid Build Coastguard Worker #include <cstdint> 21*cf78ab8cSAndroid Build Coastguard Worker #include <memory> 22*cf78ab8cSAndroid Build Coastguard Worker #include <vector> 23*cf78ab8cSAndroid Build Coastguard Worker 24*cf78ab8cSAndroid Build Coastguard Worker #include "rust/cxx.h" 25*cf78ab8cSAndroid Build Coastguard Worker 26*cf78ab8cSAndroid Build Coastguard Worker namespace netsim { 27*cf78ab8cSAndroid Build Coastguard Worker namespace frontend { 28*cf78ab8cSAndroid Build Coastguard Worker 29*cf78ab8cSAndroid Build Coastguard Worker enum class GrpcMethod : ::std::uint8_t; 30*cf78ab8cSAndroid Build Coastguard Worker struct ClientResponseReader; 31*cf78ab8cSAndroid Build Coastguard Worker 32*cf78ab8cSAndroid Build Coastguard Worker class ClientResult { 33*cf78ab8cSAndroid Build Coastguard Worker public: ClientResult(bool is_ok,const std::string & err,const std::vector<unsigned char> & byte_vec)34*cf78ab8cSAndroid Build Coastguard Worker ClientResult(bool is_ok, const std::string &err, 35*cf78ab8cSAndroid Build Coastguard Worker const std::vector<unsigned char> &byte_vec) 36*cf78ab8cSAndroid Build Coastguard Worker : is_ok_(is_ok), err_(err), byte_vec_(byte_vec) {}; 37*cf78ab8cSAndroid Build Coastguard Worker IsOk()38*cf78ab8cSAndroid Build Coastguard Worker bool IsOk() const { return is_ok_; }; Err()39*cf78ab8cSAndroid Build Coastguard Worker rust::String Err() const { return err_; }; ByteVec()40*cf78ab8cSAndroid Build Coastguard Worker const std::vector<unsigned char> &ByteVec() const { return byte_vec_; }; 41*cf78ab8cSAndroid Build Coastguard Worker 42*cf78ab8cSAndroid Build Coastguard Worker private: 43*cf78ab8cSAndroid Build Coastguard Worker bool is_ok_; 44*cf78ab8cSAndroid Build Coastguard Worker std::string err_; 45*cf78ab8cSAndroid Build Coastguard Worker const std::vector<unsigned char> byte_vec_; 46*cf78ab8cSAndroid Build Coastguard Worker }; 47*cf78ab8cSAndroid Build Coastguard Worker 48*cf78ab8cSAndroid Build Coastguard Worker class FrontendClient { 49*cf78ab8cSAndroid Build Coastguard Worker public: ~FrontendClient()50*cf78ab8cSAndroid Build Coastguard Worker virtual ~FrontendClient() {}; 51*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> SendGrpc( 52*cf78ab8cSAndroid Build Coastguard Worker frontend::GrpcMethod const &grpc_method, 53*cf78ab8cSAndroid Build Coastguard Worker rust::Vec<rust::u8> const &request_byte_vec) const = 0; 54*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> GetVersion() const = 0; 55*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> ListDevice() const = 0; 56*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> PatchDevice( 57*cf78ab8cSAndroid Build Coastguard Worker rust::Vec<rust::u8> const &request_byte_vec) const = 0; 58*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> Reset() const = 0; 59*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> ListCapture() const = 0; 60*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> PatchCapture( 61*cf78ab8cSAndroid Build Coastguard Worker rust::Vec<rust::u8> const &request_byte_vec) const = 0; 62*cf78ab8cSAndroid Build Coastguard Worker virtual std::unique_ptr<ClientResult> GetCapture( 63*cf78ab8cSAndroid Build Coastguard Worker rust::Vec<::rust::u8> const &request_byte_vec, 64*cf78ab8cSAndroid Build Coastguard Worker ClientResponseReader const &client_reader) const = 0; 65*cf78ab8cSAndroid Build Coastguard Worker }; 66*cf78ab8cSAndroid Build Coastguard Worker 67*cf78ab8cSAndroid Build Coastguard Worker std::unique_ptr<FrontendClient> NewFrontendClient(const std::string &server); 68*cf78ab8cSAndroid Build Coastguard Worker 69*cf78ab8cSAndroid Build Coastguard Worker } // namespace frontend 70*cf78ab8cSAndroid Build Coastguard Worker } // namespace netsim 71