227 lines
7.4 KiB
C
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 */
|