2002-06-04 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / assuan / assuan.h
1 /* assuan.c - Definitions for the Assuna protocol
2  *      Copyright (C) 2001, 2002 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG 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.
10  *
11  * GnuPG 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, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21 #ifndef ASSUAN_H
22 #define ASSUAN_H
23
24 #include <stdio.h>
25 #include <sys/types.h>
26
27 #ifdef __cplusplus
28 extern "C" { 
29 #if 0
30  }
31 #endif
32 #endif
33
34 typedef enum {
35   ASSUAN_No_Error = 0,
36   ASSUAN_General_Error = 1,
37   ASSUAN_Out_Of_Core = 2,
38   ASSUAN_Invalid_Value = 3,
39   ASSUAN_Timeout = 4,  
40   ASSUAN_Read_Error = 5,
41   ASSUAN_Write_Error = 6,
42   ASSUAN_Problem_Starting_Server = 7,
43   ASSUAN_Not_A_Server = 8,
44   ASSUAN_Not_A_Client = 9,
45   ASSUAN_Nested_Commands = 10,
46   ASSUAN_Invalid_Response = 11,
47   ASSUAN_No_Data_Callback = 12,
48   ASSUAN_No_Inquire_Callback = 13,
49   ASSUAN_Connect_Failed = 14,
50   ASSUAN_Accept_Failed = 15,
51
52   /* error codes above 99 are meant as status codes */
53   ASSUAN_Not_Implemented = 100,
54   ASSUAN_Server_Fault    = 101,
55   ASSUAN_Invalid_Command = 102,
56   ASSUAN_Unknown_Command = 103,
57   ASSUAN_Syntax_Error    = 104,
58   ASSUAN_Parameter_Error = 105,
59   ASSUAN_Parameter_Conflict = 106,
60   ASSUAN_Line_Too_Long = 107,
61   ASSUAN_Line_Not_Terminated = 108,
62   ASSUAN_No_Input = 109,
63   ASSUAN_No_Output = 110,
64   ASSUAN_Canceled = 111,
65   ASSUAN_Unsupported_Algorithm = 112,
66   ASSUAN_Server_Resource_Problem = 113,
67   ASSUAN_Server_IO_Error = 114,
68   ASSUAN_Server_Bug = 115,
69   ASSUAN_No_Data_Available = 116,
70   ASSUAN_Invalid_Data = 117,
71   ASSUAN_Unexpected_Command = 118,
72   ASSUAN_Too_Much_Data = 119,
73   ASSUAN_Inquire_Unknown = 120,
74   ASSUAN_Inquire_Error = 121,
75   ASSUAN_Invalid_Option = 122,
76   ASSUAN_Invalid_Index = 123,
77   ASSUAN_Unexpected_Status = 124,
78   ASSUAN_Unexpected_Data = 125,
79   ASSUAN_Invalid_Status = 126,
80
81   ASSUAN_Not_Confirmed = 128,
82
83   ASSUAN_Bad_Certificate = 201,
84   ASSUAN_Bad_Certificate_Path = 202,
85   ASSUAN_Missing_Certificate = 203,
86   ASSUAN_Bad_Signature = 204,
87   ASSUAN_No_Agent = 205,
88   ASSUAN_Agent_Error = 206,
89   ASSUAN_No_Public_Key = 207,
90   ASSUAN_No_Secret_Key = 208,
91   ASSUAN_Invalid_Name = 209,
92
93   ASSUAN_Cert_Revoked = 301,
94   ASSUAN_No_CRL_For_Cert = 302,
95   ASSUAN_CRL_Too_Old = 303,
96   ASSUAN_Not_Trusted = 304,
97
98   ASSUAN_Card_Error = 401,
99   ASSUAN_Invalid_Card = 402,
100   ASSUAN_No_PKCS15_App = 403,
101   ASSUAN_Card_Not_Present = 404,
102   ASSUAN_Invalid_Id = 405
103
104 } AssuanError;
105
106 /* This is a list of pre-registered ASSUAN commands */
107 typedef enum {
108   ASSUAN_CMD_NOP = 0,
109   ASSUAN_CMD_CANCEL,    /* cancel the current request */
110   ASSUAN_CMD_BYE,
111   ASSUAN_CMD_AUTH,
112   ASSUAN_CMD_RESET,
113   ASSUAN_CMD_OPTION,
114   ASSUAN_CMD_DATA,
115   ASSUAN_CMD_END,
116   ASSUAN_CMD_INPUT,
117   ASSUAN_CMD_OUTPUT,
118
119   ASSUAN_CMD_USER = 256  /* Other commands should be used with this offset*/
120 } AssuanCommand;
121
122 #define ASSUAN_LINELENGTH 1002 /* 1000 + [CR,]LF */
123
124 struct assuan_context_s;
125 typedef struct assuan_context_s *ASSUAN_CONTEXT;
126
127 /*-- assuan-handler.c --*/
128 int assuan_register_command (ASSUAN_CONTEXT ctx,
129                              int cmd_id, const char *cmd_string,
130                              int (*handler)(ASSUAN_CONTEXT, char *));
131 int assuan_register_bye_notify (ASSUAN_CONTEXT ctx,
132                                 void (*fnc)(ASSUAN_CONTEXT));
133 int assuan_register_reset_notify (ASSUAN_CONTEXT ctx,
134                                   void (*fnc)(ASSUAN_CONTEXT));
135 int assuan_register_cancel_notify (ASSUAN_CONTEXT ctx,
136                                    void (*fnc)(ASSUAN_CONTEXT));
137 int assuan_register_input_notify (ASSUAN_CONTEXT ctx,
138                                   void (*fnc)(ASSUAN_CONTEXT, const char *));
139 int assuan_register_output_notify (ASSUAN_CONTEXT ctx,
140                                   void (*fnc)(ASSUAN_CONTEXT, const char *));
141
142 int assuan_register_option_handler (ASSUAN_CONTEXT ctx,
143                                     int (*fnc)(ASSUAN_CONTEXT,
144                                                const char*, const char*));
145
146 int assuan_process (ASSUAN_CONTEXT ctx);
147 int assuan_process_next (ASSUAN_CONTEXT ctx);
148 int assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
149                            int *fdarray, int fdarraysize);
150
151
152 FILE *assuan_get_data_fp (ASSUAN_CONTEXT ctx);
153 AssuanError assuan_set_okay_line (ASSUAN_CONTEXT ctx, const char *line);
154 void assuan_write_status (ASSUAN_CONTEXT ctx,
155                           const char *keyword, const char *text);
156
157
158 /*-- assuan-listen.c --*/
159 AssuanError assuan_set_hello_line (ASSUAN_CONTEXT ctx, const char *line);
160 AssuanError assuan_accept (ASSUAN_CONTEXT ctx);
161 int assuan_get_input_fd (ASSUAN_CONTEXT ctx);
162 int assuan_get_output_fd (ASSUAN_CONTEXT ctx);
163 AssuanError assuan_close_input_fd (ASSUAN_CONTEXT ctx);
164 AssuanError assuan_close_output_fd (ASSUAN_CONTEXT ctx);
165
166
167 /*-- assuan-pipe-server.c --*/
168 int assuan_init_pipe_server (ASSUAN_CONTEXT *r_ctx, int filedes[2]);
169 void assuan_deinit_server (ASSUAN_CONTEXT ctx);
170
171 /*-- assuan-socket-server.c --*/
172 int assuan_init_socket_server (ASSUAN_CONTEXT *r_ctx, int listen_fd);
173
174
175 /*-- assuan-pipe-connect.c --*/
176 AssuanError assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name,
177                                  char *const argv[], int *fd_child_list);
178 AssuanError assuan_pipe_connect2 (ASSUAN_CONTEXT *ctx, const char *name,
179                                   char *const argv[], int *fd_child_list,
180                                   unsigned int connect_flags);
181
182 /*-- assuan-socket-connect.c --*/
183 AssuanError assuan_socket_connect (ASSUAN_CONTEXT *ctx, const char *name,
184                                    pid_t server_pid);
185
186 /*-- assuan-connect.c --*/
187 void assuan_disconnect (ASSUAN_CONTEXT ctx);
188 pid_t assuan_get_pid (ASSUAN_CONTEXT ctx);
189
190 /*-- assuan-client.c --*/
191 AssuanError 
192 assuan_transact (ASSUAN_CONTEXT ctx,
193                  const char *command,
194                  AssuanError (*data_cb)(void *, const void *, size_t),
195                  void *data_cb_arg,
196                  AssuanError (*inquire_cb)(void*, const char *),
197                  void *inquire_cb_arg,
198                  AssuanError (*status_cb)(void*, const char *),
199                  void *status_cb_arg);
200
201
202 /*-- assuan-inquire.c --*/
203 AssuanError assuan_inquire (ASSUAN_CONTEXT ctx, const char *keyword,
204                             char **r_buffer, size_t *r_length, size_t maxlen);
205
206 /*-- assuan-buffer.c --*/
207 AssuanError assuan_read_line (ASSUAN_CONTEXT ctx,
208                               char **line, size_t *linelen);
209 int assuan_pending_line (ASSUAN_CONTEXT ctx);
210 AssuanError assuan_write_line (ASSUAN_CONTEXT ctx, const char *line );
211 AssuanError assuan_send_data (ASSUAN_CONTEXT ctx,
212                               const void *buffer, size_t length);
213
214
215 /*-- assuan-util.c --*/
216 void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
217                                void *(*new_realloc_func)(void *p, size_t n),
218                                void (*new_free_func)(void*) );
219 void assuan_set_log_stream (ASSUAN_CONTEXT ctx, FILE *fp);
220 int assuan_set_error (ASSUAN_CONTEXT ctx, int err, const char *text);
221 void assuan_set_pointer (ASSUAN_CONTEXT ctx, void *pointer);
222 void *assuan_get_pointer (ASSUAN_CONTEXT ctx);
223
224 void assuan_begin_confidential (ASSUAN_CONTEXT ctx);
225 void assuan_end_confidential (ASSUAN_CONTEXT ctx);
226
227 /*-- assuan-errors.c (built) --*/
228 const char *assuan_strerror (AssuanError err);
229
230
231 #ifdef __cplusplus
232 }
233 #endif
234 #endif /*ASSUAN_H*/