// // // Copyright 2016 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_LIB_TRANSPORT_HANDSHAKER_H #define GRPC_SRC_CORE_LIB_TRANSPORT_HANDSHAKER_H #include <grpc/support/port_platform.h> #include <stddef.h> #include <memory> #include "absl/base/thread_annotations.h" #include "absl/container/inlined_vector.h" #include <grpc/event_engine/event_engine.h> #include <grpc/slice.h> #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/gprpp/ref_counted.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" #include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/tcp_server.h" namespace grpc_core { /// Handshakers are used to perform initial handshakes on a connection /// before the client sends the initial request. Some examples of what /// a handshaker can be used for includes support for HTTP CONNECT on /// the client side and various types of security initialization. /// /// In general, handshakers should be used via a handshake manager. /// Arguments passed through handshakers and to the on_handshake_done callback. /// /// For handshakers, all members are input/output parameters; for /// example, a handshaker may read from or write to \a endpoint and /// then later replace it with a wrapped endpoint. Similarly, a /// handshaker may modify \a args. /// /// A handshaker takes ownership of the members while a handshake is in /// progress. Upon failure or shutdown of an in-progress handshaker, /// the handshaker is responsible for destroying the members and setting /// them to NULL before invoking the on_handshake_done callback. /// /// For the on_handshake_done callback, all members are input arguments, /// which the callback takes ownership of. struct HandshakerArgs { … }; /// /// Handshaker /// class Handshaker : public RefCounted<Handshaker> { … }; // // HandshakeManager // class HandshakeManager : public RefCounted<HandshakeManager> { … }; } // namespace grpc_core // TODO(arjunroy): These are transitional to account for the new handshaker API // and will eventually be removed entirely. grpc_handshake_manager; grpc_handshaker; void grpc_handshake_manager_add(grpc_handshake_manager* mgr, grpc_handshaker* handshaker); #endif // GRPC_SRC_CORE_LIB_TRANSPORT_HANDSHAKER_H