The new framework for creating messages is now in place.
[gpgol.git] / src / common.h
1 /* common.h - Common declarations for GpgOL
2  *      Copyright (C) 2004 Timo Schulz
3  *      Copyright (C) 2005, 2006, 2007 g10 Code GmbH
4  *
5  * This file is part of GpgOL.
6  *
7  * GpgOL is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * as published by the Free Software Foundation; either version 2.1
10  * of the License, or (at your option) any later version.
11  *  
12  * GpgOL is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20  * 02110-1301, USA.
21  */
22 #ifndef GPGOL_COMMON_H
23 #define GPGOL_COMMON_H
24
25 #include <gpgme.h>
26
27 #include "util.h"
28  
29
30 #ifdef __cplusplus
31 extern "C" {
32 #if 0
33 }
34 #endif
35 #endif
36
37 /* Identifiers for the protocol.  */
38 typedef enum
39   {
40     PROTOCOL_UNKNOWN = 0,
41     PROTOCOL_OPENPGP,
42     PROTOCOL_SMIME
43   }
44 protocol_t;
45
46
47 /* Possible options for the recipient dialog. */
48 enum
49   {
50     OPT_FLAG_TEXT     =  2,
51     OPT_FLAG_FORCE    =  4,
52     OPT_FLAG_CANCEL   =  8
53   };
54
55
56 typedef enum
57   {
58     GPG_FMT_NONE = 0,       /* do not encrypt attachments */
59     GPG_FMT_CLASSIC = 1,    /* encrypt attachments without any encoding */
60     GPG_FMT_PGP_PEF = 2     /* use the PGP partioned encoding format (PEF) */
61   } 
62 gpgol_format_t;
63
64 /* Type of a message. */
65 typedef enum 
66   {
67     OPENPGP_NONE = 0,
68     OPENPGP_MSG,
69     OPENPGP_SIG,
70     OPENPGP_CLEARSIG,
71     OPENPGP_PUBKEY,   /* Note, that this type is only partly supported */
72     OPENPGP_SECKEY    /* Note, that this type is only partly supported */
73   }
74 openpgp_t;
75
76
77 extern HINSTANCE glob_hinst;
78 extern UINT      this_dll;
79
80
81 /* Passphrase callback structure. */
82 struct passphrase_cb_s
83 {
84   gpgme_key_t signer;
85   gpgme_ctx_t ctx;
86   char keyid[16+1];
87   char *user_id;
88   char *pass;    
89   int opts;
90   int ttl;  /* TTL of the passphrase. */
91   unsigned int decrypt_cmd:1; /* 1 = show decrypt dialog, otherwise secret key
92                                  selection. */
93   unsigned int hide_pwd:1;
94   unsigned int last_was_bad:1;
95 };
96
97 /* Global options - initialized to default by main.c. */
98 #ifdef __cplusplus
99 extern
100 #endif
101 struct 
102 {
103   int passwd_ttl;            /* Time in seconds the passphrase is stored. */
104   int encrypt_default;       /* Encrypt by default. */
105   int sign_default;          /* Sign by default. */
106   int save_decrypted_attach; /* Save decrypted attachments. */
107   int auto_sign_attach;      /* Sign all outgoing attachments. */
108   int enc_format;            /* Encryption format for attachments. */
109   char *default_key;         /* The key we want to always encrypt to. */
110   int enable_default_key;    /* Enable the use of DEFAULT_KEY. */
111   int preview_decrypt;       /* Decrypt in preview window. */
112   int prefer_html;           /* Prefer html in html/text alternatives. */
113
114   /* The compatibility flags. */
115   struct 
116   {
117     unsigned int no_msgcache:1;
118     unsigned int no_pgpmime:1;
119     unsigned int no_oom_write:1; /* Don't write using Outlooks object model. */
120     unsigned int no_preview_info:1; /* No preview info about PGP/MIME. */
121     unsigned int old_reply_hack: 1; /* See gpgmsg.cpp:decrypt. */
122     unsigned int auto_decrypt: 1;   /* Try to decrypt when clicked. */
123     unsigned int no_attestation: 1; /* Don't create an attestation. */
124   } compat; 
125 } opt;
126
127
128 /* The state object used by b64_decode.  */
129 struct b64_state_s
130 {
131   int idx;
132   unsigned char val;
133   int stop_seen;
134   int invalid_encoding;
135 };
136 typedef struct b64_state_s b64_state_t;
137
138
139
140 /*-- common.c --*/
141 void set_global_hinstance (HINSTANCE hinst);
142 void center_window (HWND childwnd, HWND style);
143 char *get_save_filename (HWND root, const char *srcname);
144 char *utf8_to_wincp (const char *string);
145
146 HRESULT w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e);
147
148 size_t qp_decode (char *buffer, size_t length);
149 void b64_init (b64_state_t *state);
150 size_t b64_decode (b64_state_t *state, char *buffer, size_t length);
151
152 /* The length of the boundary - the buffer needs to be allocated one
153    byte larger. */
154 #define BOUNDARYSIZE 20
155 char *generate_boundary (char *buffer);
156
157
158 /*-- recipient-dialog.c --*/
159 unsigned int recipient_dialog_box (gpgme_key_t **ret_rset);
160 unsigned int recipient_dialog_box2 (gpgme_key_t *fnd, char **unknown,
161                                     gpgme_key_t **ret_rset);
162
163 /*-- passphrase-dialog.c --*/
164 int signer_dialog_box (gpgme_key_t *r_key, char **r_passwd, int encrypting);
165 gpgme_error_t passphrase_callback_box (void *opaque, const char *uid_hint, 
166                              const char *pass_info,
167                              int prev_was_bad, int fd);
168 void free_decrypt_key (struct passphrase_cb_s *ctx);
169 const char *get_pubkey_algo_str (gpgme_pubkey_algo_t id);
170
171 /*-- config-dialog.c --*/
172 void config_dialog_box (HWND parent);
173 int start_key_manager (void);
174 int store_extension_value (const char *key, const char *val);
175 int load_extension_value (const char *key, char **val);
176
177 /*-- verify-dialog.c --*/
178 int verify_dialog_box (gpgme_protocol_t protocol, 
179                        gpgme_verify_result_t res, 
180                        const char *filename);
181
182
183 #ifdef __cplusplus
184 }
185 #endif
186 #endif /*GPGOL_COMMON_H*/