blob: 14e8a32b613a48d7c441f74dc74f3cc8fedd7db5 [file] [log] [blame]
//
//
// 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