root/include/crm/common/remote_internal.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. pcmk__is_pacemaker_remote_node
  2. pcmk__is_remote_node
  3. pcmk__is_guest_or_bundle_node

   1 /*
   2  * Copyright 2008-2024 the Pacemaker project contributors
   3  *
   4  * The version control history for this file may have further details.
   5  *
   6  * This source code is licensed under the GNU Lesser General Public License
   7  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
   8  */
   9 
  10 #ifndef PCMK__CRM_COMMON_REMOTE_INTERNAL__H
  11 #define PCMK__CRM_COMMON_REMOTE_INTERNAL__H
  12 
  13 #include <stdbool.h>                    // bool
  14 
  15 #include <crm/common/nodes.h>           // pcmk_node_variant_remote
  16 #include <crm/common/scheduler_types.h> // pcmk_node_t
  17 
  18 // internal functions from remote.c
  19 
  20 typedef struct pcmk__remote_s pcmk__remote_t;
  21 
  22 int pcmk__remote_send_xml(pcmk__remote_t *remote, const xmlNode *msg);
  23 int pcmk__remote_ready(const pcmk__remote_t *remote, int timeout_ms);
  24 int pcmk__read_remote_message(pcmk__remote_t *remote, int timeout_ms);
  25 xmlNode *pcmk__remote_message_xml(pcmk__remote_t *remote);
  26 int pcmk__connect_remote(const char *host, int port, int timeout_ms,
  27                          int *timer_id, int *sock_fd, void *userdata,
  28                          void (*callback) (void *userdata, int rc, int sock));
  29 int pcmk__accept_remote_connection(int ssock, int *csock);
  30 void pcmk__sockaddr2str(const void *sa, char *s);
  31 
  32 /*!
  33  * \internal
  34  * \brief Check whether a node is a Pacemaker Remote node of any kind
  35  *
  36  * \param[in] node  Node to check
  37  *
  38  * \return true if \p node is a remote, guest, or bundle node, otherwise false
  39  */
  40 static inline bool
  41 pcmk__is_pacemaker_remote_node(const pcmk_node_t *node)
     /* [previous][next][first][last][top][bottom][index][help] */
  42 {
  43     return (node != NULL) && (node->details->type == pcmk_node_variant_remote);
  44 }
  45 
  46 /*!
  47  * \internal
  48  * \brief Check whether a node is a remote node
  49  *
  50  * \param[in] node  Node to check
  51  *
  52  * \return true if \p node is a remote node, otherwise false
  53  */
  54 static inline bool
  55 pcmk__is_remote_node(const pcmk_node_t *node)
     /* [previous][next][first][last][top][bottom][index][help] */
  56 {
  57     return pcmk__is_pacemaker_remote_node(node)
  58            && ((node->details->remote_rsc == NULL)
  59                || (node->details->remote_rsc->container == NULL));
  60 }
  61 
  62 /*!
  63  * \internal
  64  * \brief Check whether a node is a guest or bundle node
  65  *
  66  * \param[in] node  Node to check
  67  *
  68  * \return true if \p node is a guest or bundle node, otherwise false
  69  */
  70 static inline bool
  71 pcmk__is_guest_or_bundle_node(const pcmk_node_t *node)
     /* [previous][next][first][last][top][bottom][index][help] */
  72 {
  73     return pcmk__is_pacemaker_remote_node(node)
  74            && (node->details->remote_rsc != NULL)
  75            && (node->details->remote_rsc->container != NULL);
  76 }
  77 
  78 #ifdef HAVE_GNUTLS_GNUTLS_H
  79 #include <gnutls/gnutls.h>
  80 
  81 gnutls_session_t *pcmk__new_tls_session(int csock, unsigned int conn_type,
  82                                         gnutls_credentials_type_t cred_type,
  83                                         void *credentials);
  84 int pcmk__init_tls_dh(gnutls_dh_params_t *dh_params);
  85 int pcmk__read_handshake_data(const pcmk__client_t *client);
  86 
  87 /*!
  88  * \internal
  89  * \brief Perform client TLS handshake after establishing TCP socket
  90  *
  91  * \param[in,out] remote       Newly established remote connection
  92  * \param[in]     timeout_sec  Abort handshake if not completed within this time
  93  * \param[out]    gnutls_rc    If this is non-NULL, it will be set to the GnuTLS
  94  *                             rc (for logging) if this function returns EPROTO,
  95  *                             otherwise GNUTLS_E_SUCCESS
  96  *
  97  * \return Standard Pacemaker return code
  98  */
  99 int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec,
 100                                int *gnutls_rc);
 101 
 102 #endif    // HAVE_GNUTLS_GNUTLS_H
 103 #endif      // PCMK__CRM_COMMON_REMOTE_INTERNAL__H

/* [previous][next][first][last][top][bottom][index][help] */