pacemaker  1.1.14-70404b0
Scalable High-Availability cluster resource manager
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ipcs.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This software is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef CRM_COMMON_IPCS__H
20 # define CRM_COMMON_IPCS__H
21 
22 # include <qb/qbipcs.h>
23 # ifdef HAVE_GNUTLS_GNUTLS_H
24 # undef KEYFILE
25 # include <gnutls/gnutls.h>
26 # endif
27 
28 # include <crm/common/ipc.h>
29 # include <crm/common/mainloop.h>
30 
31 typedef struct crm_client_s crm_client_t;
32 
36 # ifdef HAVE_GNUTLS_GNUTLS_H
37  CRM_CLIENT_TLS = 3,
38 # endif
39 };
40 
41 struct crm_remote_s {
42  /* Shared */
43  char *buffer;
44  size_t buffer_size;
45  size_t buffer_offset;
49 
50  /* CIB-only */
52  char *token;
53 
54  /* TLS only */
55 # ifdef HAVE_GNUTLS_GNUTLS_H
56  gnutls_session_t *tls_session;
57  bool tls_handshake_complete;
58 # endif
59 };
60 
62 {
63  crm_client_flag_ipc_proxied = 0x00001, /* ipc_proxy code only */
64 };
65 
66 struct crm_client_s {
67  uint pid;
68 
69  uid_t uid;
70  gid_t gid;
71 
72  char *id;
73  char *name;
74  char *user;
75 
76  long long options;
77 
80  void *userdata;
81 
83  GList *event_queue;
84 
85  /* Depending on the value of kind, only some of the following
86  * will be populated/valid
87  */
89 
90  qb_ipcs_connection_t *ipcs; /* IPC */
91 
92  struct crm_remote_s *remote; /* TCP/TLS */
93 
94 };
95 
96 extern GHashTable *client_connections;
97 
98 void crm_client_init(void);
99 void crm_client_cleanup(void);
100 
101 crm_client_t *crm_client_get(qb_ipcs_connection_t * c);
102 crm_client_t *crm_client_get_by_id(const char *id);
103 const char *crm_client_name(crm_client_t * c);
104 
105 crm_client_t *crm_client_new(qb_ipcs_connection_t * c, uid_t uid, gid_t gid);
107 void crm_client_disconnect_all(qb_ipcs_service_t *s);
108 
110  const char *tag, const char *function, int line);
111 
112 /* when max_send_size is 0, default ipc buffer size is used */
113 ssize_t crm_ipc_prepare(uint32_t request, xmlNode * message, struct iovec ** result, uint32_t max_send_size);
114 ssize_t crm_ipcs_send(crm_client_t * c, uint32_t request, xmlNode * message, enum crm_ipc_flags flags);
115 ssize_t crm_ipcs_sendv(crm_client_t * c, struct iovec *iov, enum crm_ipc_flags flags);
116 xmlNode *crm_ipcs_recv(crm_client_t * c, void *data, size_t size, uint32_t * id, uint32_t * flags);
117 
118 int crm_ipcs_client_pid(qb_ipcs_connection_t * c);
119 
120 #endif
void crm_client_destroy(crm_client_t *c)
Definition: ipc.c:337
client_type
Definition: ipcs.h:33
size_t buffer_offset
Definition: ipcs.h:45
void crm_client_disconnect_all(qb_ipcs_service_t *s)
Definition: ipc.c:271
mainloop_io_t * source
Definition: ipcs.h:48
uid_t uid
Definition: ipcs.h:69
uint32_t flags
Definition: ipcs.h:79
qb_ipcs_connection_t * ipcs
Definition: ipcs.h:90
uint32_t size
Definition: internal.h:52
int request_id
Definition: ipcs.h:78
xmlNode * crm_ipcs_recv(crm_client_t *c, void *data, size_t size, uint32_t *id, uint32_t *flags)
Definition: ipc.c:394
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:35
char * buffer
Definition: ipcs.h:43
struct crm_remote_s * remote
Definition: ipcs.h:92
crm_client_t * crm_client_get(qb_ipcs_connection_t *c)
Definition: ipc.c:204
char * user
Definition: ipcs.h:74
Wrappers for and extensions to glib mainloop.
void crm_client_init(void)
Definition: ipc.c:249
char * token
Definition: ipcs.h:52
void crm_ipcs_send_ack(crm_client_t *c, uint32_t request, uint32_t flags, const char *tag, const char *function, int line)
Definition: ipc.c:702
uint64_t flags
Definition: remote.c:121
void gnutls_session_t
Definition: cib_remote.c:52
GList * event_queue
Definition: ipcs.h:83
ssize_t crm_ipcs_send(crm_client_t *c, uint32_t request, xmlNode *message, enum crm_ipc_flags flags)
Definition: ipc.c:677
int auth_timeout
Definition: ipcs.h:46
void * userdata
Definition: ipcs.h:80
long long options
Definition: ipcs.h:76
uint pid
Definition: ipcs.h:67
int event_timer
Definition: ipcs.h:82
size_t buffer_size
Definition: ipcs.h:44
gid_t gid
Definition: ipcs.h:70
crm_client_t * crm_client_get_by_id(const char *id)
Definition: ipc.c:215
crm_client_flags
Definition: ipcs.h:61
GHashTable * client_connections
Definition: ipc.c:201
#define uint32_t
Definition: stdint.in.h:158
char data[0]
Definition: internal.h:58
ssize_t crm_ipc_prepare(uint32_t request, xmlNode *message, struct iovec **result, uint32_t max_send_size)
Definition: ipc.c:526
void crm_client_cleanup(void)
Definition: ipc.c:258
char * id
Definition: ipcs.h:72
int crm_ipcs_client_pid(qb_ipcs_connection_t *c)
Definition: ipc.c:384
Wrappers for and extensions to libqb IPC.
const char * crm_client_name(crm_client_t *c)
Definition: ipc.c:235
bool authenticated
Definition: ipcs.h:51
enum client_type kind
Definition: ipcs.h:88
crm_client_t * crm_client_new(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
Definition: ipc.c:288
int tcp_socket
Definition: ipcs.h:47
char * name
Definition: ipcs.h:73
crm_ipc_flags
Definition: ipc.h:41
ssize_t crm_ipcs_sendv(crm_client_t *c, struct iovec *iov, enum crm_ipc_flags flags)
Definition: ipc.c:605