| // |
| // |
| // 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 |
| typedef struct _grpc_gcp_RpcProtocolVersions_Version { |
| uint32_t major; |
| uint32_t minor; |
| } grpc_gcp_rpc_protocol_versions_version; |
| |
| // C struct coresponding to protobuf message RpcProtocolVersions |
| typedef struct _grpc_gcp_RpcProtocolVersions { |
| grpc_gcp_rpc_protocol_versions_version max_rpc_version; |
| grpc_gcp_rpc_protocol_versions_version min_rpc_version; |
| } 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 |