1 /*
2    CTDB client code
3 
4    Copyright (C) Amitay Isaacs  2015
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef __CTDB_CLIENT_PRIVATE_H__
21 #define __CTDB_CLIENT_PRIVATE_H__
22 
23 #include "protocol/protocol.h"
24 #include "client/client.h"
25 
26 struct ctdb_db_context {
27 	struct ctdb_db_context *prev, *next;
28 	uint32_t db_id;
29 	uint8_t db_flags;
30 	const char *db_name;
31 	const char *db_path;
32 	struct tdb_wrap *ltdb;
33 };
34 
35 struct ctdb_client_context {
36 	struct reqid_context *idr;
37 	struct srvid_context *srv;
38 	struct srvid_context *tunnels;
39 	struct comm_context *comm;
40 	ctdb_client_callback_func_t callback;
41 	void *private_data;
42 	int fd;
43 	uint32_t pnn;
44 	struct ctdb_db_context *db;
45 };
46 
47 struct ctdb_record_handle {
48 	struct tevent_context *ev;
49 	struct ctdb_client_context *client;
50 	struct ctdb_db_context *db;
51 	struct ctdb_ltdb_header header;
52 	TDB_DATA key;
53 	TDB_DATA data; /* This is returned from tdb_fetch() */
54 	bool readonly;
55 };
56 
57 struct ctdb_transaction_handle {
58 	struct tevent_context *ev;
59 	struct ctdb_client_context *client;
60 	struct ctdb_db_context *db, *db_g_lock;
61 	struct ctdb_rec_buffer *recbuf;
62 	struct ctdb_server_id sid;
63 	const char *lock_name;
64 	bool readonly;
65 	bool updated;
66 };
67 
68 struct ctdb_tunnel_context {
69 	struct ctdb_client_context *client;
70 	uint64_t tunnel_id;
71 	ctdb_tunnel_callback_func_t callback;
72 	void *private_data;
73 };
74 
75 /* From client_call.c */
76 
77 void ctdb_client_reply_call(struct ctdb_client_context *client,
78 			    uint8_t *buf, size_t buflen, uint32_t reqid);
79 
80 /* From client_db.c */
81 
82 struct tdb_context *client_db_tdb(struct ctdb_db_context *db);
83 
84 /* From client_message.c */
85 
86 void ctdb_client_req_message(struct ctdb_client_context *client,
87 			     uint8_t *buf, size_t buflen, uint32_t reqid);
88 
89 /* From client_control.c */
90 
91 void ctdb_client_reply_control(struct ctdb_client_context *client,
92 			       uint8_t *buf, size_t buflen, uint32_t reqid);
93 
94 /* From client_tunnel.c */
95 
96 void ctdb_client_req_tunnel(struct ctdb_client_context *client,
97 			    uint8_t *buf, size_t buflen, uint32_t reqid);
98 
99 #endif /* __CTDB_CLIENT_PRIVATE_H__ */
100