Basic HTMl support
[gpgol.git] / src / ChangeLog
1 2005-11-15  Werner Koch  <wk@g10code.com>
2
3         * Makefile.am (gpgol_LDADD): Remove -lintl for now.
4
5         * olflange.cpp (OnWriteComplete): Make sure that we don't sent out
6         unencrypted stuff on error.
7         * display.cpp (set_message_body): Add arg IS_HTML.
8         (update_display): Ditto.
9
10         * gpgmsg.cpp (loadBody): New arg WANT_HTML.
11         (getOrigText): Ditto.
12
13         * olflange.h (class CGPGExchExtMessageEvents): Add M_WANT_HTML.
14         * olflange.cpp (OnWrite): Set it.
15         (OnWriteComplete): Pass its value to the encrypt functions.
16
17 2005-11-10  Werner Koch  <wk@g10code.com>
18
19         * config-dialog.c (start_key_manager): Changed invocation of
20         default keymanager.
21
22 2005-10-21  Marcus Brinkmann  <marcus@g10code.de>
23
24         * Makefile.am (libgpgme.a, libgpgme.a): New targets.
25         (gpgol_DEPENDENCIES): Add libgpgme.a and libgpg-error.a.
26         (clean-local): Likewise.
27         (gpgol_LDADD): Link to these local versions statically.
28
29 2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
30
31         * mapi32.def: New file.
32         * Makefile.am (gpgol_DEPENDENCIES): New variable.
33         (libmapi32.a): New target.
34         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
35         (clean-local): New target.
36
37 2005-10-19  Werner Koch  <wk@g10code.com>
38
39         * gpgmsg.cpp (sign, encrypt_and_sign): Don't set the body first to
40         empty. If this is really required we should do this in
41         set_message_body.
42         (sign): Save changes. Set content type to text/plain.
43         (encrypt_and_sign): Save changes also for empty bodies.
44
45 2005-10-06  Werner Koch  <wk@g10code.com>
46
47         * gpgmsg.cpp (writeAttestation): Use gpgme_free for BUFFER.
48         * engine-gpgme.c (data_to_file): Ditto.
49
50 2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
51
52         * Makefile.am (gpgol_DEPENDENCIES): New variable.
53         (libmapi32.a): New target.
54         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
55
56         * Makefile.am (gpgol_LDADD): Prefix gpgol.def and mapi32.dll with
57         $(srcdir).
58
59         * Makefile.am (.rc.o): Invoke windres with "-I .".
60
61         * Makefile.am (.rc.o): Invoke windres with -I $(srcdir).
62
63         * Makefile.am (gpgol_SOURCES): Add util.h.
64
65 2005-09-29  Werner Koch  <wk@g10code.com>
66
67         * gpgmsg.cpp (encrypt_and_sign): Pass signing key to encryption
68         function.
69
70         * passphrase-dialog.c (signer_dialog_box): New arg encrypting. 
71
72         * gpgmsg.cpp (encrypt_and_sign): Set content type.
73
74         * engine-gpgme.c (op_lookup_keys): Fixed multiple key detection.
75
76 2005-09-28  Werner Koch  <wk@g10code.com>
77
78         * olflange.cpp (DoCommand): Catch close command and resend to
79         avoid the "save changes?".
80
81         * display.cpp (update_display): Take care of utf-8 issues.
82         * common.c (latin1_to_utf8): New.
83         * pgpmime.c (latin1_data_write): New.
84         (plaintext_handler): Use it here.
85         (message_cb): Detect utf-8 encoding.
86
87         * main.c (read_options): Make sure that compat flags are always
88         properly initialized.
89
90         * display.cpp (find_message_window): First try to find the window
91         by class name.
92
93         * common.c (wchar_to_utf8_2): New.
94
95 2005-09-27  Werner Koch  <wk@g10code.com>
96
97         * pgpmime.c (pgpmime_decrypt): Pass a pseduo filename to the
98         decryption function.
99
100         * verify-dialog.c (load_sigbox): Get key direct from gpgme.
101         * passphrase-dialog.c (load_secbox, load_recipbox): Reworked.
102         (decrypt_key_dlg_proc, decrypt_key_ext_dlg_proc): Reworked.
103         (count_keys, release_keyarray): New.
104         (signer_dialog_box, passphrase_callback_box): Adjusted to above
105         changes.
106         * engine-gpgme.c (op_deinit): Remove keycache cleanup.
107         * Makefile.am (gpgol_SOURCES): Removed keycache.c, keycache.h.
108         * keycache.c, keycache.h: Removed.
109
110         * recipient-dialog.c (recipient_dialog_box) 
111         (recipient_dialog_box2): Rewritten and changed interface.
112         (load_rsetbox): Removed keycache stuff and rewrote to make use of
113         the keyarray.
114         (copy_item, initialize_keybox, recipient_dlg_proc): Ditto.
115         (keycache_to_key_array): Removed.
116         * engine-gpgme.c (op_lookup_keys): Rewritten, changed interface.
117         * gpgmsg.cpp (count_recipients): Renamed to ..
118         (count_strings): .. this.
119         (count_keys): New.
120         (free_recipient_array): Renamed to ..
121         (free_string_array): .. this.
122         (encrypt_and_sign): Adjusted for changes in op_lookup_keys and
123         recipient_dialog_box2.
124
125 2005-09-26  Werner Koch  <wk@g10code.com>
126
127         * passphrase-dialog.c (get_pubkey_algo_str): Add DSA and old Elgamal.
128
129         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attachments we can't
130         open.
131
132         * main.c (write_options): Print message on error.  Rearranged to
133         make use of a table for all options.
134
135 2005-09-23  Werner Koch  <wk@g10code.com>
136
137         * recipient-dialog.c (recipient_dlg_proc): Removed
138         IDC_ENC_OPTARMOR stuff; it was not used.
139         (load_rsetbox): Fixed detection of encryption capability.
140
141         * gpgol-ids.h, gpgol-rsrcs.rc: Ditto.
142         
143 2005-09-22  Werner Koch  <wk@g10code.com>
144
145         * engine-gpgme.c (decrypt_stream): Use gpgme_op_decrypt_verify.
146
147         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attestations when
148         checking for pgp/mime.
149
150         * pgpmime.c (pgpmime_decrypt): Added arg HWND.
151         (message_cb, plaintext_handler): Write attachments.
152         * pgpmime.c (base64_decode): New.
153         * rfc822parse.c (parse_field): Treat Content-Disposition special.
154
155         * gpgmsg.cpp (get_save_filename): Moved to ..
156         * common.c (get_save_filename): .. here.
157
158 2005-09-20  Timo Schulz  <ts@g10code.com>
159
160         * attach.c: New.
161         * attach.h: New.
162         * olflange.cpp (CGPGExchExt): Allocate class for
163         attached file events.
164         (QueryInterface): Return interface pointer for
165         attached file events.
166         * passphrase-dialog.c (load_secbox): Use new GPGME
167         interface.
168         (get_pubkey_algo_str): New.
169         * verify-dialog.c (load_sigbox): Likewise.
170         * recipient-dialog.c (load_recipbox): Likewise.
171
172 2005-09-19  Werner Koch  <wk@g10code.com>
173
174         * msgcache.c (flush_if_needed): New.
175         (msgcache_put): use it.
176         * intern.h (opt): New compatibility flags AUTO_DECRYPT and
177         NO_ATTESTATION.
178         * olflange.cpp (InstallCommands): Use watcher stuff only when this
179         option has been enabled.
180         * gpgmsg.cpp (decrypt): Take care of NO_ATTESTATION.
181         * main.c (DllMain): Removed debug output; this should not be
182         used before initialization!
183         * watcher.cpp: Include config.h.  Removed weird line endings.
184         * gpgmsg.cpp (encrypt_and_sign): Call SaveChanges.
185
186 2005-09-15  Timo Schulz  <ts@g10code.com>
187
188         * util.h: Provider watcher prototypes.
189         * watcher.cpp (watcher_init_hook): New.
190         (watcher_free_hook): New.
191         (watcher_set_callback_ctx): New.
192         (cbt_proc): New.
193         * display.cpp (find_message_window): Removed GpgMsg param.
194         Changed all callers.
195         
196 2005-09-15  Werner Koch  <wk@g10code.com>
197
198         * olflange.cpp (OnWriteComplete): Take care of EEME_FAILED.
199         (OnWrite): Check that we are encrypting only plain text messages.
200
201         * myexchext.h: Add flags used by OnReadComplete.
202
203 2005-09-14  Werner Koch  <wk@g10code.com>
204
205         * gpgmsg.cpp (writeAttestation): Add a content type.
206         (gatherAttachmentInfo): Detect whether we already have an attestation.
207         (decrypt): Don't create duplicate attestations.
208         (writeAttestation): Translate LF to CRLF.
209
210 2005-09-13  Werner Koch  <wk@g10code.com>
211
212         * pgpmime.c (pgpmime_decrypt): New arg ATTESTATION.
213         * engine-gpgme.c (add_verify_attestation): New.
214         (op_decrypt, op_verify_detached_sig, op_verify_detached_sig)
215         (op_verify_detached_sig): Add new arg ATTESTATION.  Changed all
216         callers.
217         (at_sig_summary, at_sig_validity, add_verify_attestation): New.
218         The code has been taken and modified from Mutt's crypt-gpgme.c and
219         entirely been writen by g10 Code.
220         (at_fingerprint): Ditto.
221
222         * gpgmsg.cpp (class GpgMsgImpl): New member ATTESTATION.  Use it
223         in all calls to the functions above.
224
225         * gpgmsg.cpp (decryptAttachment, decrypt): Save plaintext back
226         into the MAPI if desired.
227
228 2004-09-08  Timo Schulz  <ts@g10code.com>
229
230         * passphrase-dialog.c (lod_recipbox): Use gpgme directly
231         to resolve the keyids to userids.
232         * usermap.c, usermap.h: Removed.
233         * HashTable.cpp, HashTable.h: Removed.
234
235 2005-09-07  Timo Schulz  <ts@g10code.com>
236
237         * common.c: Removed unused code.
238         * intern.h: Likewise.
239
240 2005-09-07  Timo Schulz  <ts@g10code.com>
241
242         * olflange.cpp (ul_release): New. Wrapper with error checking
243         around UlRelease.
244         (InstallCommands): Separate test for type and if string is empty.
245         
246 2005-09-06  Werner Koch  <wk@g10code.com>
247
248         * engine-gpgme.c (op_decrypt_stream): Factored most code out to ..
249         (decrypt_stream): .. new.
250         (op_decrypt_stream_to_buffer): Simplified accordingly.  Fixed
251         possible buffer overflow when trying to make it a string. 
252         (op_decrypt_stream_to_gpgme): New.
253
254         * pgpmime.c, pgpmime.h: New.
255         * rfc822parse.h, rfc822parse.c: New.  Taken from GnuPG 1.9.
256
257 2005-09-06  Timo Schulz  <ts@g10code.com>
258
259         * config-dialog.c (get_open_file_name): Correctly terminated filter.
260         New parameter for the title. Changed all callers.
261         (get_folder): Likewise.
262         
263 2005-09-01  Werner Koch  <wk@g10code.com>
264
265         * gpgmsg.cpp (get_pgp_armor_type): New.
266         (gatherAttachmentInfo):  Enhanced to detect text/plain pgp.
267         (verify): Removed.
268         (decrypt): Do clearsig verification here.
269
270         * gpgmsg.cpp (decrypt): Kludge to workaround OL not updating a
271         window.
272         * msgcache.c (msgcache_get_from_mapi): New.
273         * display.cpp (find_message_window): Don't use the GpgMsg function
274         to to the string compare.
275         * gpgmsg.cpp (matchesString): Removed.
276
277         * msgcache.c (msgcache_set_active): Removed.
278         (msgcache_get): Rewritten.
279         (msgcache_put): Now uses PR_CONVERSATION_INDEX as key.  Update
280         existing entries.
281
282         * olflange.cpp (OnRead): Removed msgcache_set_active.
283         (InstallCommands): Now uses the ConversationIndex to match the
284         reply with the message.
285
286 2005-08-31  Werner Koch  <wk@g10code.com>
287
288         * olflange.cpp (DllRegisterServer): Define a CLSID and set the
289         ThreadingModel.
290
291 2005-08-30  Werner Koch  <wk@g10code.com>
292
293         Renamed from "outlgpg" to "gpgol".
294
295         More or less finished this major rewrite.
296
297 2005-08-26  Werner Koch  <wk@g10code.com>
298
299         * MapiGPGME.cpp, MapiGPGME.h: Removed.
300         * display.cpp, display.h: New. 
301
302 2005-08-23  Werner Koch  <wk@g10code.com>
303
304         * msgcache.c, msgcache.h: New.
305
306 2005-08-22  Werner Koch  <wk@g10code.com>
307
308         * olflange.cpp: Major cleanups and partly rewrites.
309
310 2005-08-18  Werner Koch  <wk@g10code.com>
311
312         * gpgmsg.cpp, gpgmsg.hh: New.
313         
314 2005-08-17  Werner Koch  <wk@g10code.com>
315
316         * MapiGPGME.cpp (setMessageAccess): Removed as it was only used at
317         one place.
318         (setRTFBody): Use the above code here directly..
319         (setWindow, setMessage): Removed.  We can't use that because there
320         is only one instance of this class.
321         (decrypt): Add args HWND and MSG.  Changed caller.
322         (getBody): Changed to ..
323         (get_body): .. plain function and add new arg MSG.  Changed all
324         callers.
325         (isHtmlMessage): Likewise changed to ..
326         (is_html_message): .. plain function and add new arg MSG.
327         (doCmd): Removed.
328
329         * common.c (utf8_to_wchar): New.
330
331         * MapiGPGME.cpp (passphraseCallback): Removed.
332         (getPassphrase, clearPassphrase, storePassphrase): Removed.
333         (add_html_line_endings): Rewritten.
334
335         * engine-gpgme.c (op_sign_encrypt_start): Removed because it is
336         not used anywhere.
337         (op_sign): Renamed to ..
338         (do_sign): .. this and made local.
339
340 2005-08-16  Werner Koch  <wk@g10code.com>
341
342         * MapiGPGME.cpp (signAttachment): Simplified.
343         * engine-gpgme.c (op_sign_file): Add arg TTL.
344         (op_sign_file_ext): Removed.
345         (op_sign_file_next): Renamed to ..
346         (do_sign_file): .. this and made local.
347         (do_sign_file): Updated to use new passphrase callback
348         semantics.
349         (op_decrypt_file): Ditto.
350         (free_recipients): Need to use gpgme_key_release and not just
351         free.
352
353         * engine-gpgme.c (do_decrypt): Factored some code out to ..
354         (update_passphrase_cache): .. new.
355         (op_sign_encrypt_file): Updated to use new passphrase callback
356         semantics.
357
358         * MapiGPGME.cpp (getBody): Properly distinguish property types.
359         (delete_buf): Removed macro.  We now use malloc for the body
360         string.  Changed other places to use delete directly for clarity.
361         (fail_if_null): Removed.  Replaced by direct tests and a call to
362         out_of_core.
363         (setDefaultKey): Now use malloc/free instead of new/delete.
364         Changed at other places too.
365         (getDefaultKey): Changed to return a const char *.
366
367         * common.c (wchar_to_utf8): New.
368         (out_of_core): Made global and call abort after displaying the
369         message box.
370
371 2005-08-14  Werner Koch  <wk@g10code.com>
372
373         * MapiGPGME.cpp (log_debug_w32): New.
374         (do_log): New arg W32ERR.  Make sure to print a trailing LF.
375
376         * passphrase-dialog.c (passphrase_callback_box): Revamped.
377         (free_decrypt_key): Wipe out a passphrase.  Remove superfluous
378         variable clearing.
379         * util.h (wipememory2, wipememory): New.
380         (wipestring): New.
381         * engine-gpgme.c (op_decrypt): Renamed to ..
382         (do_decrypt): .. this and made local.
383         (clear_error_if_cancel): Removed as we inlined the code.
384         (do_decrypt): Cleaned up.
385         * main.c (DllMain): Initialize passcaching subsystem.
386         * passcache.c, passcache.h: New.
387         * intern.h: Include it here.
388         * util.h: New.
389
390         * olflange.cpp (DllRegisterServer): Remove key for the old
391         versions of this plugin.
392
393         Merged olgpgmain.dll and olgpgcore.dll into outlgpg.dll.
394         
395         * Makefile.am: Renamed target to outlgpg. Added required files.
396         * olflange.cpp, olflange.h: Renamed from GPGExch.cpp and
397         GPGExch.h.  Removed all the MFC cruft as it is not required - it
398         was only used to get hands on the hInstance of the DLL; chnaged
399         that to use the glob_hinst which gets set by DllMain.
400         * outlgpg.def: New.
401         * olflange-def.h: New.
402         * olflange-dlgs.cpp: Renamed from GPGOptionsDlgs.cpp.
403         * olflange-ids.h: Renamed from ../olflange/resource.h
404         * olflange-rsrcs.rc: Renamed from ..olflange/olgpgmaindlgs.rc and
405         stripped off unneedded stuff.
406         * olgpgcoredlgs.rc: Renamed to ..
407         * outlgpg-rsrcs.rc: .. this and stripped of cruft.
408         * olgpgcoredlgs.h: Renamed to ..
409         * outlgpg-ids.h: .. this.
410         * versioninfo.rc.in: New.
411         
412 2005-08-12  Timo Schulz  <ts@g10code.com>
413
414         * config-dialog.c (sotre_extension_value, load_extension_value):
415         Adjust registry key.
416
417 2005-08-12  Werner Koch  <wk@g10code.com>
418
419         * intern.h: Moved keycache prototypes to keycache.h.
420         * MapiGPGME.cpp (lock_log, unlock_log): New.
421         * engine-gpgme.c (op_init): Check GPGME version.
422         * main.c (outlook_gpg_get_version): Removed as it is now derived
423         from config.h.
424         (DllMain): Initializes gpgme and mapigpgme.
425         * MapiGPGME.cpp (initialize_mapi_gpgme): New.
426
427         * config-dialog.c (store_extension_value, load_extension_value):
428         Changed key to "OutlGPG".
429
430         * MapiGPGME.h (class MapiGPGME): New methods versionString and
431         showVersion.  Breaks ABI but it doesn't matter as we are also
432         going to change the name of the project.
433
434         * Makefile.am: Renamed target to olgpgcore.
435         * resource.h: Renamed to ...
436         * olgpgcoredlgs.h: .. and removed cruft from generator.
437         * gpgmedlgs.rc: Renamed to ..
438         * olgpgcoredlgs.rc: ... and removed cruft.
439         * libgpgmedlgs.def: Renamed to ..
440         * olgpgcore.def: .. this.
441         
442 2005-08-11  Werner Koch  <wk@g10code.com>
443
444         * MapiGPGME.cpp (log_debug): New.  Rewrote the whole log stuff.
445         It is not anymore per instance.
446         (logDebug): New version with va_list arg.
447
448         * MapiGPGME.cpp (passphraseCallback): Use gpgme_error_t becuase
449         C++ enforces enum types.
450
451         * engine-gpgme.c (op_lookup_keys): s/id/names/.  id is a reved
452         word Obj-C and it is good style not to use it in plain C code.
453         (op_sign_file_next): Use gpgme_passphrase_cb_t in declaration.
454         (op_decrypt_next): Ditto.
455
456         * MapiGPGME.cpp (count_recipients): Renamed from countRecipients
457         method, made local and changed both callers.
458         (log_key_info): Changed output format.  New arg PREFIX. Changed
459         callers.
460         (add_html_line_endings): Renamed from addHtmlLineEndings method
461         and made local.
462         (logDebug): Open in text mode.  Removed all superfluous "\r" from
463         callers.
464
465 2005-08-09  Timo Schulz  <ts@g10code.com>
466
467         * main.c (outlook_gpg_get_version): New.
468         Use same version as the Outlook GPG plugin.
469
470         * MapiGPGME.cpp [!__MINGW32__]: Changed sequence of include files.
471
472 2005-08-09  Werner Koch  <wk@g10code.com>
473
474         * MapiGPGME.cpp (userid_from_key, keyid_from_key): New. Changed
475         all calls to the deprecated gpgme_key_get_string_attr function by
476         these.
477
478         * MapiGPGME.h, MapiGPGME.cpp: Splitted into interace and
479         implementation.
480         * HashTable.h (class HashTable): No need to dll export anything.
481
482 2005-08-08  Werner Koch  <wk@g10code.com>
483
484         * common.c (w32_shgetfolderpath): Added.
485         * config-dialog.c (load_config_value_ext): use it here.
486
487 2005-07-21  Timo Schulz  <twoaday@g10code.com>
488
489         * MapiGPGME.cpp (decrypt): Only return if no valid PGP
490         data was found and the message has no attachments.
491         * engine-gpgme.c (op_encrypt): Use --textmode to fix 
492         problems when the recipient OS has different line endings.
493         For example Win32->Linux.
494
495 2005-07-20  Timo Schulz  <twoaday@g10code.com>
496
497         * MapiGPGME.cpp (addHtmlLineEndings): New.
498         (encrypt):Use it here.
499         (signEncrypt): Likewise. Free memory in case of errors.
500         (decrypt): Free memory in case of the verify procedure.
501         Issue a warning when the text of the mail could not be
502         updated.
503         (isMessageEncrypted): New.
504         (countAttachments): Check for null pointers.
505         (clearPassphrase): Likewise.
506         * config-dialog.c (store_config_value): Support '%val%' input.
507         * verify-dialog.c (load_akalist): Return the number of user-ids
508         which were added.
509         * passphrase-dialog.c (load_secbox): Make sure we really start
510         to add the item data at the begin.
511         * intern.h: Fixed GCC compiler problem.
512
513 2005-07-19  Timo Schulz  <twoaday@g10code.com>
514
515         * MapiGPGME.cpp (encrypt): Handle cancel.
516         (encryptAttachments): If no attachments exist, close the table.
517         (decryptAttachments): Likewise.
518         (signAttachments): Likewise.
519         (isHtmlBody): New.
520         (isHtmlMessage): New.
521         (setBody): Html support.
522         (encrypt): Figure out if message is html and encode the right body.
523         (signEncrypt): Likewise.
524         (verify): Always use the non-html body for GPG input.
525         (decrypt): Likewise.
526
527         * engine-gpgme.c (recipient_dialog_box2): Set cancel flag.
528         (op_sign_start): Handle cancel.
529         (recipient_dlg_proc): Make sure there is at least one selected
530         key. Disable armor checkbox.
531
532 2005-07-19  Timo Schulz  <twoaday@g10code.com>
533
534         * MapiGPGME.cpp (~MapiGPGME): After releasing the
535         memory, set all pointers to NULL. It seems that NT5
536         bases operating systems are more pedantic with such
537         issues than 9X based systems.
538         (freeUnknownKeys): Likewise.
539         (freeRecipients): Likewise.
540         (encrypt): Outlook 2003 returns a body string which
541         is not NULL but \0 with a length of 0. Handle it.
542         (sign): Likewise.
543         (signEncrypt): Likewise.
544
545         * engine-gpgme.c (free_recipients): New.
546         (op_encrypt_start): Handle cancel and free memory.
547
548
549 2005-07-18  Timo Schulz  <ts@g10code.com>
550
551         * gpgmedlgs.rc: Native language support for German.
552
553 2005-07-14  Timo Schulz  <ts@g10code.com>
554
555         * MapiGPGME.cpp: Add some missing MAPI constants.
556         (passphrase_callback_box): Repair cancel button.
557         (decrypt): If the user cancels the operation, do not
558         alter the message text.
559         * config-dialog.c (expand_path): New. From WinPT.
560         (load_config_value): Support for REG_EXPAND_SZ.
561         Suggested by Sebastian.
562
563 2005-07-13  Timo Schulz  <ts@g10code.de>
564
565         * MapiGPGME.cpp (sign): Ignore empty bodies.
566         (signEncrypt): Likewise. Free recipient memory.
567         (encrypt): Modify code so it really works.
568         (attachPublicKey): New.
569         * engine-gpgme.c (op_export_keys): New.
570
571 2005-07-12  Timo Schulz  <ts@g10code.de>
572
573         * MapiGPGME.cpp (displayError): New.
574         (writeOptions): Use it here. Simplify the code.
575         (signAttachments): New.
576         (sign): Sign attachments. Noted by Ralf.
577         (processAttachment): Support for sign-only.
578
579 2005-07-08  Timo Schulz  <ts@g10code.de>
580
581         * MapiGPGME.cpp (setEnableLogging): New.
582         (getEnableLogging): New.
583         (logDebug): Move all logging code to this function.
584         (readOptions): Automatically enable logging if the
585         'LogFile' registry entry is valid.
586         (prepareLogging): New.
587         (readOptions): Properly handle ""-strings.
588         * config-dialog.c (does_file_exist): Allow to have
589         parameters like '--keymanager' and cut them off before
590         checking the existence.
591         (start_key_manager): Free memory.
592         (config_dlg_proc): Initialize pointer to 'NULL'.
593         (SHFree): New. Special function to handle shell memory.
594         (get_folder): Free memory.
595         (does_folder_exist): New.
596
597 2005-07-06  Timo Schulz  <ts@g10code.de>
598
599         * MapiGPGME.cpp: s/ATTR_/ATT_.
600         (saveDecryptedAttachment): Cut off the prefix.
601         (clearConfig): New.
602         (clearObject): New.
603         (MapiGPGME): Use it here.
604
605         Use ATT_PREFIX instead of a hardcoded string.
606
607         * engine-gpgme.c
608         (op_sign_file_next): New.
609         (op_sign_file): Call op_sign_file2.
610         (op_sign_file_ext): New.        
611
612 2005-07-05  Timo Schulz  <ts@g10code.de>
613
614         * MapiGPGME.cpp (readOptions, writeOptions):
615         Support for the new 'auto sign attachment' flag.
616         (signAttachment): New.
617         (setSignAttachments): New.
618         (getSignAttachments): New.
619         * engine-gpgme.c (op_sign_file): Enable armor.
620
621 2005-07-03  Timo Schulz  <ts@g10code.com>
622
623         * MapiGPGME.cpp (processAttachment): Implement
624         the decryption part and only use it if the 'save
625         decrypted attachment' flag is set.
626         (saveDecryptedAttachment): New.
627         (writeOptions): Save 'decrypt attachment' flag.
628         (readOptions): Load it here.
629         (cleanupTempFiles): Check handle.
630         (encrypt): If the message has no body skip the
631         procedure.
632         (op_decrypt_file): Set recipient callback.
633         (decryptAttachments): We do not alter the attachment
634         so there is no need to release it again.
635
636         Replace all 'free' with 'xfree'.
637
638 2005-07-01  Timo Schulz  <ts@g10code.com>
639
640         * MapiGPGME.cpp (processAttachment): Check that
641         the file has a valid PGP extension before we try
642         to decrypt the attachment.
643         (checkAttachmentExtension): Check if the file
644         extension is a vliad PGP extension.
645
646
647 2005-06-30  Timo Schulz  <ts@g10code.com>
648
649         * MapiGPGME.cpp (processAttachment): Use a unique
650         temp name to make a cleanup at the end easier.
651         (cleanupTempFiles): Delete possible left over
652         temp files.
653         (~MapiGPGME): Use it here.
654
655 2005-06-22  Timo Schulz  <ts@g10code.com>
656
657         * MapiGPGME.cpp (processAttachment): Close attachment
658         before we delete it.
659         (streamOnFile): Directly use the attachment.
660         (streamFromFile): Likewise.
661         (closeAttachment): Renamed to..
662         (releaseAttachment): ..this.
663
664 2005-06-21  Timo Schulz  <ts@g10code.com>
665
666         * MapiGPGME.cpp (getMessageType): Support all types.
667         (streamOnFile): More straight forward now.
668         (encryptAttachments): Get the attachment table first.
669         (getAttachPathname): New.
670         (processAttachment): Add new parameter for the position
671         of the attachment.
672         (streamFromFile): New.
673         (generateTempname): New.
674         * engine-gpgme.c (op_sign_encrypt_file): New.
675
676 2005-06-17  Timo Schulz  <ts@g10code.com>
677
678         * MapiGPGME.cpp (MapiGPGME): Initialize all attachment
679         components to zero. Thanks to Sebstian for pointing this out.
680
681 2005-06-16  Timo Schulz  <ts@g10code.com>
682
683         * engine-gpgme.c (check_encrypt_result): New. Check if
684         the encrypt procedure returned some invalid recipients.
685         (op_encrypt): Use it here.
686         (op_encrypt_file): Likewise.
687         (op_sign_encrypt): Likewise.
688         * missing.h: Removed unused constants.
689         * verify-dialog.c (load_sigbox): Handle v3 RSA keys.
690         * passphrase-dialog.c (load_secbox): Make sure the index 
691         from the first loop matche the second. Which means skip
692         all invalid keys also.
693
694 2005-06-13  Timo Schulz  <ts@g10code.com>
695
696         * MapiGPGME.cpp (writeOptions): New Option 'defaultKey'.
697         (readOptions): Likewise. Force overwrite 'addDefaultKey'.       
698
699 2005-06-07  Timo Schulz  <ts@g10code.com>
700
701         * passphrase-dialog.c (decrypt_key_dlg_proc): Add a
702         reference to the key object so it will be still valid
703         after the dialog is destroyed.
704         * MapiGPGME.cpp (freeUnknownKeys): Do not try to free
705         the context if no keys are available. Fixed a segv.
706         (signEncrypt): The new code now gets a persistent pointer
707         to the key.
708         * engine-gpgme.c (op_sign_encrypt): Load the right
709         dialog to request the passphrase.
710
711 2005-06-05  Timo Schulz  <ts@g10code.com>
712
713         * passphrase-dialog.c (load_recipbox): Check ctx if null.
714         (passphrase_callback_box): Different dialogs for sign
715         and decrypt.
716         (signer_dialog_box): Do not zero the context too early.
717         * keycache.c (enum_gpg_seckeys): Also reload if ctx
718         is NULL.
719         * MapiGPGME.cpp (signEncrypt): Return if the user
720         cancelled the signer selection dialog.   
721         * recipient-dialog.c (recipient_dlg_proc): Check 'Text Mode'
722         button.
723         * keycache.c (enum_gpg_keys, enum_gpg_seckeys): Fully
724         reset the keycache initializing it again. Thanks to Ralf.
725
726 2005-06-04  Timo Schulz  <ts@g10code.com>
727
728         * verify-dialog.c (load_sigbox): Only issue a warning
729         if the key exists but is not valid.
730         Get pkalgo from the signature.
731         Fixed format string problem s/%d/%s.    
732         * config-dialog.c (load_config_value): Close reg handle.
733         (config_dlg_proc): Show error if the values could not
734         be written to the registry.
735
736 2005-06-03  Timo Schulz  <ts@g10code.com>
737
738         * mapuser.c (new_usermap): New.
739         (free_usermap): New.
740         * engine-gpgme.c (op_decrypt): Return 'No_Seckey' if
741         appropriate and not just 'Decrypt_Failed'.
742         Set the gpgme_ctx_t object in the callback to allow
743         to list the 'encrypt_to' entries.
744         * passphrase-dialog.c (decrypt_key_dlg_proc): Make sure
745         we only warn when there is a valid callback context.
746         (load_secbox): New parameter 'ctlid'. Changed all callers.
747         (load_recipbox): New. Use usermap to lookup user-id's.
748         (decrypt_key_ext_dlg_proc): New dialog procedure for
749         the callback mode.
750         * HashTable.cpp (HashTable_new): New. C-interface.
751         (HashTable_free): Likewise.
752         (HashTable_get): Likewise.
753         (HashTable_put): Likewise.
754         (HashTable_get_i): Likewise.
755         (HashTable_size): Likewise.
756
757 2005-05-29  Timo Schulz  <ts@g10code.com>
758
759         * passphrase-dialog.c (decrypt_key_dlg_proc): Warning
760         if the user cancels the signing process.
761         Make the passphrase field invisible if the key is used
762         in selection mode.
763         (recipient_dlg_proc): Likewise.
764         (signer_dialog_box): Return -1 if the user cancelled the
765         dialog.
766         * engine-gpgme.c (op_sign): Set flags to '1' to indicate
767         signing process.
768         * config-dialog.c (does_file_exist): Use appropriate
769         length for xmalloc. Noted by Sebastian.
770
771 2005-05-24  Timo Schulz  <ts@g10code.com>
772
773         * MapiGPGME.cpp (setXHeader): New.
774         (getXHeader): New.
775         * engine-gpgme.c (op_sign_file): Implemented.
776
777 2005-05-22  Timo Schulz  <ts@g10code.com>
778
779         * MapiGPGME.cpp (createAttachment): New.
780         (deleteAttachment): New.
781         (encryptAttachments): New.
782         (encrypt): Also encrypt the attachments if possible.
783         (signEncrypt): Likewise.
784         (setEncodingFormat): New.
785         (getEncodingFormat): New.
786         (readOptions, writeOptions): Store encoding format.
787         (MapiGPGME): The default encoding is 'CLASSIC'.
788
789 2005-05-21  Timo Schulz  <ts@g10code.com>
790
791         * HashTable.h: Export functions.
792         * MapiGPGME.cpp (freeAttachments): New.
793         (getAttachments): New.
794         (openAttachment): New.
795         (closeAttachment): New.
796         (processAttachment): New.
797         (hasAttachments): New.
798         (countAttachments): New.
799         (doCmdFile): New. Can handle files.
800         (doCmdAttach): New. Can handle attachment action types.
801         (signEncrypt): Release locusr key.
802         * engine-gpgme.c (op_sign_file): New. Dummy.
803         (op_sign_encrypt_file): New. Dummy.
804
805 2005-05-11  Timo Schulz  <ts@g10code.com>
806
807         * common.c (cache_item_new): New.
808         (cache_item_free): New.
809         * engine-gpgme.c (op_decrypt_start_ext): Return an cache item and
810         not just the passphrase. Changed all caller.
811         * MapiGPGME.cpp (passphraseCallback): Support caching.
812         (decrypt): Likewise.
813         (storePassphrase): Likewise.
814         (getPassphrase): Likewise.
815         * HashTable.cpp: New.
816
817 2005-05-10  Timo Schulz  <ts@g10code.com>
818
819         * passphrase-dialog.c (decrypt_key_dlg_proc): Reset 'hide state'.
820         Show some text when the user entered a wrong passphrase.
821         * MapiGPGME.cpp (findMessageWindow): New.
822         (setRTFBody): New.
823         (decrypt): Just change the window text, not the MAPI object.
824         Call verify() if this is a clearsigned message.
825         (getMessageType): New.
826         (getAttachmentExtension): New.
827         (verify): Extract text and set it.
828         * engine-gpgme.c (op_decrypt): Spawn verify dialog if the text
829         was also signed.
830         (op_decrypt_file): New.
831         * verify-dialog.c (load_sigbox): Avoid key cache and give more
832         information.    
833         * passphrase-dialog.c (decrypt_key_dlg_proc): Handle 'x' clicks.
834         * logging.c (log_debug): Disable it for release versions.
835
836 2005-05-08  Timo Schulz  <ts@g10code.com>
837
838         * MapiGPGME.cpp (readOptions): Handle logfile.
839         (writeOptions): Likewise.
840         (storePassphrase): New.
841         (clearPassphrase): New.
842         (passphraseCallback): New. Needs to be static...
843         (decrypt): Store passphrase if requested.
844         (~MapiGPGME): Free memory.
845         (streamOnFile): New.
846         (getAttachMethod): New.
847         (getAttachFilename): New.
848         (setAttachMethod): New.
849         (getAttachFilename): New.
850         (getMessageHasAttachments): New.
851         (getMessageFlags): New.
852
853         * engine-gpgme.c (op_decrypt): New. Factoured out
854         code from...
855         (op_decrypt_start): ..here. Now call op_decrypt
856         with standard parameters.
857         (op_decrypt_next): Allow to use a pre-defined 
858         passphrase callback. Needed for caching.
859
860 2005-05-02  Timo Schulz  <ts@g10code.com>
861
862         * MapiGPGME.cpp (fail_if_null, delete_buf): New
863         (doCmd): New.
864         (setBody): If the body to set is empty, do nothing.
865         (freeKeyArray): New.
866         (readOptions): New.
867         (writeOptions): New.
868         Implement all getters and setters for the config code.
869
870         * keycache.c: Now that we use a DLL, we create a
871         shared data segment for static data.
872         (load_keycache_objects): New.
873
874 2005-05-01  Timo Schulz  <ts@g10code.com>
875
876         * MapiGPGME.cpp (rtfSync): New.
877         * logging.c (log_debug): New.
878         * common.c (xfree): New.
879         * engine-gpgme.c (op_lookup_keys): Corrected offsets.
880
881 2005-04-29  Timo Schulz  <ts@g10code.com>
882
883         * engine-gpgme.c (op_encrypt_file): New.
884
885 2005-04-27  Timo Schulz  <ts@g10code.com>
886
887         * config-dialog.c (config_dialog_box): Add dialog
888         item to select a GUI key manager.
889         Check that the entered files really exist.
890         (config_dlg_proc): Likewise.
891         (does_file_exist): New.
892
893 2005-04-24  Timo Schulz  <ts@g10code.com>
894
895         * main.c (DllMain): New. With a static library it was not
896         possible to have a separate resource file. Thus we use a
897         DLL now which contains all needed dialogs.
898         * common.c (set_global_hinstance): New.
899         * libgpgmedlgs.def: New.
900
901 2005-04-18  Timo Schulz  <ts@g10code.com>
902
903         * recipient-dialog.c (recipient_dialog_box2): New
904         way to show pre-selected keys.
905         (copy_item): New paramenter for the pos.
906         (find_item): Do not select the item.
907
908         * gpgmedlgs.rc (IDD_ENC): New label to describe
909         the listbox.
910
911 2005-04-15  Timo Schulz  <ts@g10code.com>
912
913         * common.c (xmalloc, xcalloc, xstrdup): New.
914         (out_of_core): New.
915         * recipient-dialog.c (initialize_keybox): New.
916         (find_item): New.
917         * MapiGPGME.cpp (freeUnknownKeys): New.
918         (signEncrypt): Show dialog to select a key if no
919         default key was set.
920
921         * Replace all std-c alloc functions with x equivalents.
922
923 2005-04-13  Timo Schulz  <ts@g10code.com>
924
925         * engine-gpgme.c (do_init): Alloc keycache objects.
926         (do_deinit): Cleanup the mess.
927         (op_lookup_keys): New. Allow to find keys via the email.
928
929         * GPGME.cpp (MapiGPGME): New. MAPI interface.
930
931 2005-04-07  Timo Schulz  <ts@g10code.com>
932
933         * verify-dialog.c (load_akalist): New.
934         (load_sigbox): Handle bad signatures.
935         * keycache.c (enum_gpg_keys): Allow to reset the
936         enum context.
937         * config-dialog.c (get_open_file_name): Use MAX_PATH.
938         (get_folder): Likewise.
939         * recipient-dialog.c (load_rsetbox): Modify code to
940         add the last keycache item.
941         * passphrase-dialog.c (load_secbox): Likewise.