2001-12-14 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / assuan / assuan.h
1 /* assuan.c - Definitions for the Assuna protocol
2  *      Copyright (C) 2001 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
51   /* error codes above 99 are meant as status codes */
52   ASSUAN_Not_Implemented = 100,
53   ASSUAN_Server_Fault    = 101,
54   ASSUAN_Invalid_Command = 102,
55   ASSUAN_Unknown_Command = 103,
56   ASSUAN_Syntax_Error    = 104,
57   ASSUAN_Parameter_Error = 105,
58   ASSUAN_Parameter_Conflict = 106,
59   ASSUAN_Line_Too_Long = 107,
60   ASSUAN_Line_Not_Terminated = 108,
61   ASSUAN_No_Input = 109,
62   ASSUAN_No_Output = 110,
63   ASSUAN_Canceled = 111,
64   ASSUAN_Unsupported_Algorithm = 112,
65   ASSUAN_Server_Resource_Problem = 113,
66   ASSUAN_Server_IO_Error = 114,
67   ASSUAN_Server_Bug = 115,
68   ASSUAN_No_Data_Available = 116,
69   ASSUAN_Invalid_Data = 117,
70   ASSUAN_Unexpected_Command = 118,
71   ASSUAN_Too_Much_Data = 119,
72
73   ASSUAN_Bad_Certificate = 201,
74   ASSUAN_Bad_Certificate_Path = 202,
75   ASSUAN_Missing_Certificate = 203,
76   ASSUAN_Bad_Signature = 204,
77   ASSUAN_No_Agent = 205,
78   ASSUAN_Agent_Error = 206,
79   ASSUAN_No_Public_Key = 207,
80   ASSUAN_No_Secret_Key = 208,
81   ASSUAN_Invalid_Name = 209,
82
83   ASSUAN_Cert_Revoked = 301,
84   ASSUAN_No_CRL_For_Cert = 302,
85   ASSUAN_CRL_Too_Old = 303,
86
87 } AssuanError;
88
89 /* This is a list of pre-registered ASSUAN commands */
90 typedef enum {
91   ASSUAN_CMD_NOP = 0,
92   ASSUAN_CMD_CANCEL,    /* cancel the current request */
93   ASSUAN_CMD_BYE,
94   ASSUAN_CMD_AUTH,
95   ASSUAN_CMD_RESET,
96   ASSUAN_CMD_DATA,
97   ASSUAN_CMD_END,
98   ASSUAN_CMD_INPUT,
99   ASSUAN_CMD_OUTPUT,
100
101   ASSUAN_CMD_USER = 256  /* Other commands should be used with this offset*/
102 } AssuanCommand;
103
104 #define ASSUAN_LINELENGTH 1002 /* 1000 + [CR,]LF */
105
106 struct assuan_context_s;
107 typedef struct assuan_context_s *ASSUAN_CONTEXT;
108
109 /*-- assuan-handler.c --*/
110 int assuan_register_command (ASSUAN_CONTEXT ctx,
111                              int cmd_id, const char *cmd_string,
112                              int (*handler)(ASSUAN_CONTEXT, char *));
113 int assuan_register_bye_notify (ASSUAN_CONTEXT ctx,
114                                 void (*fnc)(ASSUAN_CONTEXT));
115 int assuan_register_reset_notify (ASSUAN_CONTEXT ctx,
116                                   void (*fnc)(ASSUAN_CONTEXT));
117 int assuan_register_cancel_notify (ASSUAN_CONTEXT ctx,
118                                    void (*fnc)(ASSUAN_CONTEXT));
119 int assuan_register_input_notify (ASSUAN_CONTEXT ctx,
120                                   void (*fnc)(ASSUAN_CONTEXT, const char *));
121 int assuan_register_output_notify (ASSUAN_CONTEXT ctx,
122                                   void (*fnc)(ASSUAN_CONTEXT, const char *));
123 int assuan_process (ASSUAN_CONTEXT ctx);
124 int assuan_process_next (ASSUAN_CONTEXT ctx);
125 int assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
126                            int *fdarray, int fdarraysize);
127
128
129 FILE *assuan_get_data_fp (ASSUAN_CONTEXT ctx);
130 void assuan_write_status (ASSUAN_CONTEXT ctx,
131                           const char *keyword, const char *text);
132
133
134 /*-- assuan-listen.c --*/
135 AssuanError assuan_set_hello_line (ASSUAN_CONTEXT ctx, const char *line);
136 AssuanError assuan_accept (ASSUAN_CONTEXT ctx);
137 int assuan_get_input_fd (ASSUAN_CONTEXT ctx);
138 int assuan_get_output_fd (ASSUAN_CONTEXT ctx);
139
140
141 /*-- assuan-pipe-server.c --*/
142 int assuan_init_pipe_server (ASSUAN_CONTEXT *r_ctx, int filedes[2]);
143 void assuan_deinit_pipe_server (ASSUAN_CONTEXT ctx);
144
145
146 /*-- assuan-connect.c --*/
147 AssuanError assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name,
148                                  char *const argv[]);
149 void assuan_pipe_disconnect (ASSUAN_CONTEXT ctx);
150 pid_t assuan_get_pid (ASSUAN_CONTEXT ctx);
151
152 /*-- assuan-client.c --*/
153 AssuanError 
154 assuan_transact (ASSUAN_CONTEXT ctx,
155                  const char *command,
156                  AssuanError (*data_cb)(void *, const void *, size_t),
157                  void *data_cb_arg,
158                  AssuanError (*inquire_cb)(void*, const char *),
159                  void *inquire_cb_arg);
160
161
162 /*-- assuan-inquire.c --*/
163 AssuanError assuan_inquire (ASSUAN_CONTEXT ctx, const char *keyword,
164                             char **r_buffer, size_t *r_length, size_t maxlen);
165
166 /*-- assuan-buffer.c --*/
167 AssuanError assuan_read_line (ASSUAN_CONTEXT ctx,
168                               char **line, size_t *linelen);
169 int assuan_pending_line (ASSUAN_CONTEXT ctx);
170 AssuanError assuan_write_line (ASSUAN_CONTEXT ctx, const char *line );
171 AssuanError assuan_send_data (ASSUAN_CONTEXT ctx,
172                               const void *buffer, size_t length);
173
174
175 /*-- assuan-util.c --*/
176 void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
177                                void *(*new_realloc_func)(void *p, size_t n),
178                                void (*new_free_func)(void*) );
179 int assuan_set_error (ASSUAN_CONTEXT ctx, int err, const char *text);
180 void assuan_set_pointer (ASSUAN_CONTEXT ctx, void *pointer);
181 void *assuan_get_pointer (ASSUAN_CONTEXT ctx);
182
183
184 /*-- assuan-errors.c (built) --*/
185 const char *assuan_strerror (AssuanError err);
186
187
188 #ifdef __cplusplus
189 }
190 #endif
191 #endif /*ASSUAN_H*/
192
193