// // // Copyright 2018 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #ifndef GRPC_SRC_CORE_TSI_ALTS_HANDSHAKER_TRANSPORT_SECURITY_COMMON_API_H #define GRPC_SRC_CORE_TSI_ALTS_HANDSHAKER_TRANSPORT_SECURITY_COMMON_API_H #include <grpc/support/port_platform.h> #include <grpc/slice.h> #include <grpc/slice_buffer.h> #include <grpc/support/alloc.h> #include <grpc/support/log.h> #include "src/core/lib/gprpp/crash.h" #include "src/proto/grpc/gcp/transport_security_common.upb.h" // C struct coresponding to protobuf message RpcProtocolVersions.Version grpc_gcp_rpc_protocol_versions_version; // C struct coresponding to protobuf message RpcProtocolVersions grpc_gcp_rpc_protocol_versions; /// /// This method sets the value for max_rpc_versions field of rpc protocol /// versions. /// ///- versions: an rpc protocol version instance. ///- max_major: a major version of maximum supported RPC version. ///- max_minor: a minor version of maximum supported RPC version. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_set_max( grpc_gcp_rpc_protocol_versions* versions, uint32_t max_major, uint32_t max_minor); /// /// This method sets the value for min_rpc_versions field of rpc protocol /// versions. /// ///- versions: an rpc protocol version instance. ///- min_major: a major version of minimum supported RPC version. ///- min_minor: a minor version of minimum supported RPC version. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_set_min( grpc_gcp_rpc_protocol_versions* versions, uint32_t min_major, uint32_t min_minor); /// /// This method serializes an rpc protocol version and returns serialized rpc /// versions in grpc slice. /// ///- versions: an rpc protocol versions instance. ///- slice: grpc slice where the serialized result will be written. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_encode( const grpc_gcp_rpc_protocol_versions* versions, grpc_slice* slice); /// /// This method serializes an rpc protocol version and returns serialized rpc /// versions in grpc slice. /// ///- versions: an rpc protocol versions instance. ///- arena: upb arena. ///- slice: grpc slice where the serialized result will be written. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_encode( const grpc_gcp_RpcProtocolVersions* versions, upb_Arena* arena, grpc_slice* slice); /// /// This method de-serializes input in grpc slice form and stores the result /// in rpc protocol versions. /// ///- slice: a data stream containing a serialized rpc protocol version. ///- versions: an rpc protocol version instance used to hold de-serialized /// result. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_decode( const grpc_slice& slice, grpc_gcp_rpc_protocol_versions* versions); /// /// Assigns value of upb RpcProtocolVersions to grpc_gcp_rpc_protocol_versions. /// void grpc_gcp_rpc_protocol_versions_assign_from_upb( grpc_gcp_rpc_protocol_versions* versions, const grpc_gcp_RpcProtocolVersions* value); /// /// Assigns value of struct grpc_gcp_rpc_protocol_versions to /// RpcProtocolVersions. /// void grpc_gcp_RpcProtocolVersions_assign_from_struct( grpc_gcp_RpcProtocolVersions* versions, upb_Arena* arena, const grpc_gcp_rpc_protocol_versions* value); /// /// This method performs a deep copy operation on rpc protocol versions /// instance. /// ///- src: rpc protocol versions instance that needs to be copied. ///- dst: rpc protocol versions instance that stores the copied result. /// /// The method returns true on success and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_copy( const grpc_gcp_rpc_protocol_versions* src, grpc_gcp_rpc_protocol_versions* dst); /// /// This method performs a version check between local and peer rpc protocol /// versions. /// ///- local_versions: local rpc protocol versions instance. ///- peer_versions: peer rpc protocol versions instance. ///- highest_common_version: an output parameter that will store the highest /// common rpc protocol version both parties agreed on. /// /// The method returns true if the check passes which means both parties agreed /// on a common rpc protocol to use, and false otherwise. /// bool grpc_gcp_rpc_protocol_versions_check( const grpc_gcp_rpc_protocol_versions* local_versions, const grpc_gcp_rpc_protocol_versions* peer_versions, grpc_gcp_rpc_protocol_versions_version* highest_common_version); namespace grpc_core { namespace internal { /// /// Exposed for testing only. /// The method returns 0 if v1 = v2, /// returns 1 if v1 > v2, /// returns -1 if v1 < v2. /// int grpc_gcp_rpc_protocol_version_compare( const grpc_gcp_rpc_protocol_versions_version* v1, const grpc_gcp_rpc_protocol_versions_version* v2); } // namespace internal } // namespace grpc_core #endif // GRPC_SRC_CORE_TSI_ALTS_HANDSHAKER_TRANSPORT_SECURITY_COMMON_API_H