Fixed pwmd_save_async2() when used with an SSH channel. Finishes commit
[libpwmd.git] / src / types.h
blob1602e71d03a61df4f77aa1d960ec575fb0c9c84e
1 /* vim:tw=78:ts=8:sw=4:set ft=c: */
2 /*
3 Copyright (C) 2006-2009 Ben Kibbey <bjk@luxsci.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02110-1301 USA
19 #ifndef TYPES_H
20 #define TYPES_H
22 #include <assuan.h>
24 #ifdef WITH_TCP
25 #include <libssh2.h>
26 #endif
28 #define N_ARRAY(a) (sizeof(a)/sizeof(a[0]))
30 typedef enum {
31 ASYNC_CMD_NONE,
32 #ifdef WITH_TCP
33 ASYNC_CMD_DNS,
34 ASYNC_CMD_CONNECT,
35 ASYNC_CMD_HOSTKEY,
36 #endif
37 ASYNC_CMD_OPEN,
38 ASYNC_CMD_OPEN2,
39 ASYNC_CMD_SAVE,
40 ASYNC_CMD_SAVE2,
41 } pwmd_async_cmd_t;
43 #ifdef WITH_TCP
44 typedef struct {
45 char *host;
46 unsigned port;
47 char *username;
48 char *known_hosts;
49 char *identity;
50 char *identity_pub;
51 int fd;
52 gpg_error_t rc;
53 ares_channel chan;
54 int async;
55 struct hostent *he;
56 LIBSSH2_SESSION *session;
57 LIBSSH2_CHANNEL *channel;
58 int get_only;
59 char *hostkey;
60 pwmd_async_cmd_t cmd;
61 } pwmd_tcp_conn_t;
62 #endif
64 struct pwm_s {
65 assuan_context_t ctx;
66 #ifdef WITH_TCP
67 pwmd_tcp_conn_t *tcp_conn;
68 #endif
69 int fd;
70 pwmd_async_t state;
71 pwmd_async_cmd_t cmd;
72 char *result; /* temporary: not related to anything the client can see. */
73 #ifdef WITH_PINENTRY
74 pid_t pid;
75 assuan_context_t pctx;
76 gpg_error_t pin_error;
77 int nb_fd; /* for pwmd_open/save_async2(). */
78 int pin_try;
79 #endif
80 int is_open_cmd;
81 int use_pinentry; // this is for a local pinentry, not pwmd pinentry.
82 int pinentry_tries;
83 int ntries;
84 char *pinentry_path;
85 char *pinentry_tty;
86 char *pinentry_term;
87 char *pinentry_display;
88 char *lcctype;
89 char *lcmessages;
90 char *title;
91 char *prompt;
92 char *desc;
93 char *password;
94 char *filename;
95 int pinentry_timeout;
96 pwmd_password_fn passfunc;
97 void *passdata;
98 pwmd_status_fn status_func;
99 void *status_data;
100 pwmd_inquire_fn inquire_func;
101 void *inquire_data;
102 char *name;
105 typedef struct {
106 size_t len;
107 void *buf;
108 } membuf_t;
110 typedef struct {
111 int fd;
112 gpg_error_t error;
113 char password[ASSUAN_LINELENGTH+1];
114 } pwmd_nb_status_t;
116 static gpg_error_t assuan_command(pwm_t *pwm, assuan_context_t ctx,
117 char **result, const char *cmd);
119 #endif