BULK: Fix tests.
[pwmd.git] / src / common.h
blob158ac09af07a625786d0a995e72b713c7b9c1613
1 /*
2 Copyright (C) 2006-2018 Ben Kibbey <bjk@luxsci.net>
4 This file is part of pwmd.
6 Pwmd 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 2 of the License, or
9 (at your option) any later version.
11 Pwmd 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.
16 You should have received a copy of the GNU General Public License
17 along with Pwmd. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef COMMON_H
20 #define COMMON_H
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <pthread.h>
25 #include "pwmd-error.h"
26 #include <assuan.h>
27 #include <stdint.h>
28 #include <libxml/xmlerror.h>
29 #include <pwd.h>
30 #include <time.h>
32 #ifdef ENABLE_NLS
33 #ifdef HAVE_LOCALE_H
34 #include <locale.h>
35 #endif
36 #endif
38 #ifdef HAVE_LIMITS_H
39 #include <limits.h>
40 #ifndef LINE_MAX
41 #ifdef _POSIX2_LINE_MAX
42 #define LINE_MAX _POSIX2_LINE_MAX
43 #else
44 #define LINE_MAX 2048
45 #endif
46 #endif
47 #endif
49 #ifndef _
50 #include "gettext.h"
51 #define _(msgid) gettext(msgid)
52 #endif
54 #ifdef WITH_GNUTLS
55 #include "tls.h"
56 #endif
57 #include "status.h"
58 #include "bulk.h"
60 #define CLIENT_STATE_UNKNOWN 0
61 #define CLIENT_STATE_INIT 1
62 #define CLIENT_STATE_IDLE 2
63 #define CLIENT_STATE_COMMAND 3
64 #define CLIENT_STATE_DISCON 4
66 struct client_thread_s
68 pthread_t tid;
69 int fd;
70 pthread_mutex_t status_mutex;
71 struct status_msg_s *msg_queue;
72 int status_msg_pipe[2];
73 int wrote_status;
74 struct client_s *cl;
75 assuan_peercred_t peer;
76 unsigned state;
77 int eof;
78 time_t conntime;
79 char *name;
80 #ifdef WITH_GNUTLS
81 int timeout;
82 int buffer_timeout;
83 int last_buffer_size;
84 int remote;
85 struct tls_s *tls;
86 char *peeraddr;
87 #endif
90 struct client_s
92 assuan_context_t ctx;
93 int flock_fd;
94 xmlDocPtr doc;
95 xmlErrorPtr xml_error;
96 char *filename;
97 struct client_thread_s *thd;
98 struct crypto_s *crypto;
99 unsigned opts;
100 unsigned flags;
101 char *import_root;
102 long lock_timeout; /* In tenths of a second. */
103 gpg_error_t last_rc;
104 char *last_error; /* ELOOP element path. */
105 unsigned char *crc; /* Of the data file. */
106 int no_access_param; /* Treat no "access" config param as allowed. */
107 int client_state; /* OPTION to receive client state msgs. */
108 int did_cow; /* Have already done a CoW operation. */
109 struct bulk_cmd_s *bulk_p; /* For the command result set in xfer_data(). */
110 #ifdef WITH_GNUTLS
111 int disco; /* Rather than thread->state to avoid lock. */
112 #endif
115 pthread_key_t thread_name_key;
116 pthread_mutex_t cn_mutex;
117 struct slist_s *cn_thread_list;
119 void log_write (const char *fmt, ...);
120 int assuan_log_cb (assuan_context_t ctx, void *data, unsigned cat,
121 const char *msg);
122 gpg_error_t send_error (assuan_context_t ctx, gpg_error_t e);
123 void update_client_state (struct client_s *client, unsigned s);
124 gpg_error_t lock_flock (assuan_context_t ctx, const char *filename, int type,
125 int *fd);
126 void unlock_flock (int *fd);
128 #endif