Go2Py/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_handshake.h

227 lines
7.4 KiB
C

/*
* Copyright(c) 2006 to 2021 ZettaScale Technology and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#ifndef DDSI_HANDSHAKE_H
#define DDSI_HANDSHAKE_H
#include "dds/ddsi/ddsi_entity.h"
#if defined (__cplusplus)
extern "C" {
#endif
struct ddsi_participant;
struct ddsi_proxy_participant;
struct ddsi_handshake;
struct dssi_hsadmin;
enum ddsi_handshake_state {
STATE_HANDSHAKE_IN_PROGRESS,
STATE_HANDSHAKE_TIMED_OUT,
STATE_HANDSHAKE_FAILED,
STATE_HANDSHAKE_PROCESSED,
STATE_HANDSHAKE_SEND_TOKENS,
STATE_HANDSHAKE_OK
};
/* The handshake will not use the related handshake object after this callback
* was executed. This means that it can be deleted in this callback. */
typedef void (*ddsi_handshake_end_cb_t)(
struct ddsi_handshake *handshake,
struct ddsi_participant *pp,
struct ddsi_proxy_participant *proxypp,
enum ddsi_handshake_state result);
#ifdef DDS_HAS_SECURITY
#include "dds/ddsi/ddsi_security_msg.h"
/**
* @brief Release the handshake.
*
* This function will decrement the refcount associated with the handshake
* and delete the handshake when the refcount becomes 0.
*
* @param[in] handshake The handshake.
*/
void ddsi_handshake_release(struct ddsi_handshake *handshake);
/**
* @brief Handle an authentication handshake message received from the remote participant.
*
* During the authentication phase handshake messages are being exchanged between the local and
* the remote participant. THis function will handle a handshake message received from a remote
* participant.
*
* @param[in] handshake The handshake.
* @param[in] pp The local participant.
* @param[in] proxypp The remote participant.
* @param[in] msg The handshake message received.
*/
void ddsi_handshake_handle_message(struct ddsi_handshake *handshake, const struct ddsi_participant *pp, const struct ddsi_proxy_participant *proxypp, const struct nn_participant_generic_message *msg);
/**
* @brief Notify the handshake that crypto tokens have been received.
*
* The handshake could be finished at one end while the other side has not yet processed the
* final handshake messages. The arrival of crypto tokens signals that the other side has also finished
* processing the handshake. This function is used to signal the handshake that crypto tokens have been
* received.
*
* @param[in] handshake The handshake.
*/
void ddsi_handshake_crypto_tokens_received(struct ddsi_handshake *handshake);
/**
* @brief Get the shared secret handle.
*
* During the handshake a shared secret is established which is used to encrypt
* and decrypt the crypto token exchange messages. This function will return a
* handle to the shared secret which will be passed to the crypto plugin to
* determine the session keys used for the echange of the the crypto tokens.
*
* @param[in] handshake The handshake.
*
* @returns handle to the shared sercet.
*/
int64_t ddsi_handshake_get_shared_secret(const struct ddsi_handshake *handshake);
/**
* @brief Get the handshake handle
*
* This function returns the handshake handle that was returned by the authentication plugin
* when starting the handshake.
*
* @param[in] handshake The handshake.
*
* @returns The handshake handle.
*/
int64_t ddsi_handshake_get_handle(const struct ddsi_handshake *handshake);
/**
* @brief Create and start the handshake for the participants
*
* This function will create a handshake for the specified local
* and remote participants when it does not yet exists. It will start the
* handshake procedure by calling the corresponding functions of the authentication plugin.
* The callback function is called by the handshake when to report events,
* for example to indicate that the handshake has finished or has failed.
*
* @param[in] pp The local participant.
* @param[in] proxypp The remote participant.
* @param[in] callback The callback function.
*
*/
void ddsi_handshake_register(struct ddsi_participant *pp, struct ddsi_proxy_participant *proxypp, ddsi_handshake_end_cb_t callback);
/**
* @brief Remove the handshake associated with the specified participants.
*
* This function will remove the handshake from the handshake administation and release
* the handshake. When the handshake argument is not specified the handshake is searched
* in the handshake administation.
*
* @param[in] pp The local participant.
* @param[in] proxypp The remote participant.
*
*/
void ddsi_handshake_remove(struct ddsi_participant *pp, struct ddsi_proxy_participant *proxypp);
/**
* @brief Searches for the handshake associated with the specified participants
*
* This function will search through the handshake administration to find the handshake
* corresponding the to specified local and remote participant.
*
* @param[in] pp The local participant.
* @param[in] proxypp The remote participant.
*
* @returns The handshake
*/
struct ddsi_handshake * ddsi_handshake_find(struct ddsi_participant *pp, struct ddsi_proxy_participant *proxypp);
/**
* @brief Searches for the handshake associated with the specified participants
*
* This function will search through the handshake administration to find the handshake
* corresponding the to specified local and remote participant.
*
* @param[in] pp The local participant.
* @param[in] proxypp The remote participant.
*
* @returns The handshake
*/
struct ddsi_handshake * ddsi_handshake_find(struct ddsi_participant *pp, struct ddsi_proxy_participant *proxypp);
/**
* @brief Initialize the handshake administration
*
* @param[in] gv The global parameters
*/
void ddsi_handshake_admin_init(struct ddsi_domaingv *gv);
/**
* @brief Stop handshake background processing.
*
* @param[in] gv The global parameters
*/
void ddsi_handshake_admin_stop(struct ddsi_domaingv *gv);
/**
* @brief Deinitialze the handshake administration.
*
* @param[in] gv The global parameters
*/
void ddsi_handshake_admin_deinit(struct ddsi_domaingv *gv);
#else /* DDS_HAS_SECURITY */
#include "dds/ddsi/q_unused.h"
DDS_INLINE_EXPORT inline void ddsi_handshake_register(UNUSED_ARG(struct ddsi_participant *pp), UNUSED_ARG(struct ddsi_proxy_participant *proxypp), UNUSED_ARG(ddsi_handshake_end_cb_t callback))
{
}
DDS_INLINE_EXPORT inline void ddsi_handshake_release(UNUSED_ARG(struct ddsi_handshake *handshake))
{
}
DDS_INLINE_EXPORT inline void ddsi_handshake_crypto_tokens_received(UNUSED_ARG(struct ddsi_handshake *handshake))
{
}
DDS_INLINE_EXPORT inline int64_t ddsi_handshake_get_shared_secret(UNUSED_ARG(const struct ddsi_handshake *handshake))
{
return 0;
}
DDS_INLINE_EXPORT inline int64_t ddsi_handshake_get_handle(UNUSED_ARG(const struct ddsi_handshake *handshake))
{
return 0;
}
DDS_INLINE_EXPORT inline void ddsi_handshake_remove(UNUSED_ARG(struct ddsi_participant *pp), UNUSED_ARG(struct ddsi_proxy_participant *proxypp), UNUSED_ARG(struct ddsi_handshake *handshake))
{
}
DDS_INLINE_EXPORT inline struct ddsi_handshake * ddsi_handshake_find(UNUSED_ARG(struct ddsi_participant *pp), UNUSED_ARG(struct ddsi_proxy_participant *proxypp))
{
return NULL;
}
#endif /* DDS_HAS_SECURITY */
#if defined (__cplusplus)
}
#endif
#endif /* DDSI_HANDSHAKE_H */