s/uint32_t/unsigned.
[libpwmd.git] / src / common.h
blobb674e874f17211d844a57232f93feccb52f029c0
1 /*
2 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
3 2016
4 Ben Kibbey <bjk@luxsci.net>
6 This file is part of pwmd.
8 Pwmd is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 2 of the License, or
11 (at your option) any later version.
13 Pwmd is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with Pwmd. If not, see <http://www.gnu.org/licenses/>.
21 #ifndef COMMON_H
22 #define COMMON_H
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #include <pthread.h>
27 #include "pwmd-error.h"
28 #include <assuan.h>
29 #include <stdint.h>
30 #include <libxml/xmlerror.h>
31 #include <pwd.h>
32 #include <time.h>
34 #ifdef ENABLE_NLS
35 #ifdef HAVE_LOCALE_H
36 #include <locale.h>
37 #endif
38 #endif
40 #ifdef HAVE_LIMITS_H
41 #include <limits.h>
42 #ifndef LINE_MAX
43 #ifdef _POSIX2_LINE_MAX
44 #define LINE_MAX _POSIX2_LINE_MAX
45 #else
46 #define LINE_MAX 2048
47 #endif
48 #endif
49 #endif
51 #ifndef _
52 #include "gettext.h"
53 #define _(msgid) gettext(msgid)
54 #endif
56 #ifdef WITH_GNUTLS
57 #include "tls.h"
58 #endif
59 #include "status.h"
61 #define CLIENT_STATE_UNKNOWN 0
62 #define CLIENT_STATE_INIT 1
63 #define CLIENT_STATE_IDLE 2
64 #define CLIENT_STATE_COMMAND 3
65 #define CLIENT_STATE_DISCON 4
67 struct client_thread_s
69 pthread_t tid;
70 int fd;
71 pthread_mutex_t status_mutex;
72 struct status_msg_s *msg_queue;
73 int status_msg_pipe[2];
74 int wrote_status;
75 struct client_s *cl;
76 assuan_peercred_t peer;
77 unsigned state;
78 time_t conntime;
79 #ifdef WITH_GNUTLS
80 int timeout;
81 int buffer_timeout;
82 int last_buffer_size;
83 int remote;
84 struct tls_s *tls;
85 char *peeraddr;
86 #endif
89 struct client_s
91 assuan_context_t ctx;
92 int flock_fd;
93 void *doc; /* xmlDocPtr */
94 xmlErrorPtr xml_error;
95 char *filename;
96 struct client_thread_s *thd;
97 struct crypto_s *crypto;
98 unsigned opts;
99 unsigned flags;
100 char *import_root;
101 long lock_timeout; /* In tenths of a second. */
102 gpg_error_t last_rc;
103 char *last_error; /* ELOOP element path. */
104 unsigned char *crc; /* Of the data file. */
105 int no_access_param; /* Treat no "access" config param as allowed. */
106 int client_state; /* OPTION to receive client state msgs. */
107 #ifdef WITH_GNUTLS
108 int disco; /* Rather than thread->state to avoid lock. */
109 #endif
112 pthread_key_t thread_name_key;
113 pthread_mutex_t cn_mutex;
114 struct slist_s *cn_thread_list;
116 void log_write (const char *fmt, ...);
117 int assuan_log_cb (assuan_context_t ctx, void *data, unsigned cat,
118 const char *msg);
119 gpg_error_t send_error (assuan_context_t ctx, gpg_error_t e);
120 void update_client_state (struct client_s *client, unsigned s);
121 gpg_error_t lock_flock (assuan_context_t ctx, const char *filename, int type,
122 int *fd);
123 void unlock_flock (int *fd);
125 #endif