1 #ifndef AUTH_CLIENT_PRIVATE_H
2 #define AUTH_CLIENT_PRIVATE_H
3 
4 #include "connection.h"
5 
6 #include "auth-client.h"
7 
8 #define AUTH_CONNECT_TIMEOUT_MSECS (30*1000)
9 
10 struct auth_client_request {
11 	pool_t pool;
12 	struct event *event;
13 
14 	struct auth_client_connection *conn;
15 	unsigned int id;
16 	time_t created;
17 
18 	auth_request_callback_t *callback;
19 	void *context;
20 };
21 
22 struct auth_client_connection {
23 	struct connection conn;
24 	pool_t pool;
25 
26 	struct auth_client *client;
27 	time_t last_connect;
28 
29 	struct timeout *to;
30 
31 	unsigned int server_pid;
32 	unsigned int connect_uid;
33 	char *cookie;
34 
35 	ARRAY(struct auth_mech_desc) available_auth_mechs;
36 
37 	/* id => request */
38 	HASH_TABLE(void *, struct auth_client_request *) requests;
39 
40 	bool has_plain_mech:1;
41 	bool connected:1;
42 };
43 
44 struct auth_client {
45 	char *auth_socket_path;
46 	unsigned int client_pid;
47 	struct event *event;
48 
49 	struct connection_list *clist;
50 	struct auth_client_connection *conn;
51 
52 	auth_connect_notify_callback_t *connect_notify_callback;
53 	void *connect_notify_context;
54 
55 	unsigned int request_id_counter;
56 
57 	unsigned int connect_timeout_msecs;
58 
59 	bool debug:1;
60 };
61 
62 extern struct event_category event_category_auth_client;
63 
64 bool auth_client_request_is_aborted(struct auth_client_request *request);
65 time_t auth_client_request_get_create_time(struct auth_client_request *request);
66 
67 void auth_client_request_server_input(struct auth_client_request *request,
68 				      enum auth_request_status status,
69 				      const char *const *args);
70 
71 struct connection_list *auth_client_connection_list_init(void);
72 
73 struct auth_client_connection *
74 auth_client_connection_init(struct auth_client *client);
75 void auth_client_connection_deinit(struct auth_client_connection **conn);
76 
77 int auth_client_connection_connect(struct auth_client_connection *conn);
78 void auth_client_connection_disconnect(struct auth_client_connection *conn,
79 				       const char *reason);
80 
81 /* Queues a new request. Must not be called if connection is not connected. */
82 unsigned int
83 auth_client_connection_add_request(struct auth_client_connection *conn,
84 				   struct auth_client_request *request);
85 void auth_client_connection_remove_request(struct auth_client_connection *conn,
86 					   unsigned int id);
87 
88 #endif
89